@shopify/shopify-app-remix 3.8.3 → 3.8.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (187) hide show
  1. package/dist/cjs/react/components/AppProvider/AppProvider.js.map +1 -1
  2. package/dist/cjs/react/components/AppProxyForm/AppProxyForm.js.map +1 -1
  3. package/dist/cjs/react/components/AppProxyLink/AppProxyLink.js.map +1 -1
  4. package/dist/cjs/react/components/AppProxyProvider/AppProxyProvider.js.map +1 -1
  5. package/dist/cjs/react/components/RemixPolarisLink.js.map +1 -1
  6. package/dist/cjs/react/const.js.map +1 -1
  7. package/dist/cjs/server/adapters/node/index.js.map +1 -1
  8. package/dist/cjs/server/adapters/vercel/index.js.map +1 -1
  9. package/dist/cjs/server/authenticate/admin/authenticate.js.map +1 -1
  10. package/dist/cjs/server/authenticate/admin/billing/cancel.js.map +1 -1
  11. package/dist/cjs/server/authenticate/admin/billing/check.js.map +1 -1
  12. package/dist/cjs/server/authenticate/admin/billing/create-usage-record.js.map +1 -1
  13. package/dist/cjs/server/authenticate/admin/billing/helpers.js.map +1 -1
  14. package/dist/cjs/server/authenticate/admin/billing/request.js.map +1 -1
  15. package/dist/cjs/server/authenticate/admin/billing/require.js.map +1 -1
  16. package/dist/cjs/server/authenticate/admin/billing/update-usage-subscription-capped-amount.js.map +1 -1
  17. package/dist/cjs/server/authenticate/admin/helpers/begin-auth.js.map +1 -1
  18. package/dist/cjs/server/authenticate/admin/helpers/create-admin-api-context.js.map +1 -1
  19. package/dist/cjs/server/authenticate/admin/helpers/ensure-app-is-embedded-if-required.js.map +1 -1
  20. package/dist/cjs/server/authenticate/admin/helpers/ensure-session-token-search-param-if-required.js.map +1 -1
  21. package/dist/cjs/server/authenticate/admin/helpers/handle-client-error.js.map +1 -1
  22. package/dist/cjs/server/authenticate/admin/helpers/redirect-to-auth-page.js.map +1 -1
  23. package/dist/cjs/server/authenticate/admin/helpers/redirect-to-bounce-page.js.map +1 -1
  24. package/dist/cjs/server/authenticate/admin/helpers/redirect-to-install-page.js.map +1 -1
  25. package/dist/cjs/server/authenticate/admin/helpers/redirect-to-shopify-or-app-root.js.map +1 -1
  26. package/dist/cjs/server/authenticate/admin/helpers/redirect-with-app-bridge-headers.js.map +1 -1
  27. package/dist/cjs/server/authenticate/admin/helpers/redirect-with-exitiframe.js.map +1 -1
  28. package/dist/cjs/server/authenticate/admin/helpers/redirect.js.map +1 -1
  29. package/dist/cjs/server/authenticate/admin/helpers/render-app-bridge.js.map +1 -1
  30. package/dist/cjs/server/authenticate/admin/helpers/trigger-after-auth-hook.js.map +1 -1
  31. package/dist/cjs/server/authenticate/admin/helpers/validate-redirect-url.js.map +1 -1
  32. package/dist/cjs/server/authenticate/admin/helpers/validate-shop-and-host-params.js.map +1 -1
  33. package/dist/cjs/server/authenticate/admin/scope/client/fetch-scopes-details.js.map +1 -1
  34. package/dist/cjs/server/authenticate/admin/scope/client/revoke-scopes.js.map +1 -1
  35. package/dist/cjs/server/authenticate/admin/scope/factory.js.map +1 -1
  36. package/dist/cjs/server/authenticate/admin/scope/query.js.map +1 -1
  37. package/dist/cjs/server/authenticate/admin/scope/request.js.map +1 -1
  38. package/dist/cjs/server/authenticate/admin/scope/revoke.js.map +1 -1
  39. package/dist/cjs/server/authenticate/admin/strategies/auth-code-flow.js.map +1 -1
  40. package/dist/cjs/server/authenticate/admin/strategies/merchant-custom-app.js.map +1 -1
  41. package/dist/cjs/server/authenticate/admin/strategies/token-exchange.js.map +1 -1
  42. package/dist/cjs/server/authenticate/const.js.map +1 -1
  43. package/dist/cjs/server/authenticate/flow/authenticate.js.map +1 -1
  44. package/dist/cjs/server/authenticate/fulfillment-service/authenticate.js.map +1 -1
  45. package/dist/cjs/server/authenticate/helpers/add-response-headers.js.map +1 -1
  46. package/dist/cjs/server/authenticate/helpers/app-bridge-url.js.map +1 -1
  47. package/dist/cjs/server/authenticate/helpers/create-or-load-offline-session.js.map +1 -1
  48. package/dist/cjs/server/authenticate/helpers/ensure-cors-headers.js.map +1 -1
  49. package/dist/cjs/server/authenticate/helpers/get-session-token-header.js.map +1 -1
  50. package/dist/cjs/server/authenticate/helpers/get-shop-from-request.js.map +1 -1
  51. package/dist/cjs/server/authenticate/helpers/idempotent-promise-handler.js.map +1 -1
  52. package/dist/cjs/server/authenticate/helpers/invalidate-access-token.js.map +1 -1
  53. package/dist/cjs/server/authenticate/helpers/reject-bot-request.js.map +1 -1
  54. package/dist/cjs/server/authenticate/helpers/respond-to-invalid-session-token.js.map +1 -1
  55. package/dist/cjs/server/authenticate/helpers/respond-to-options-request.js.map +1 -1
  56. package/dist/cjs/server/authenticate/helpers/validate-session-token.js.map +1 -1
  57. package/dist/cjs/server/authenticate/login/login.js.map +1 -1
  58. package/dist/cjs/server/authenticate/public/appProxy/authenticate.js.map +1 -1
  59. package/dist/cjs/server/authenticate/public/checkout/authenticate.js.map +1 -1
  60. package/dist/cjs/server/authenticate/public/customer-account/authenticate.js.map +1 -1
  61. package/dist/cjs/server/authenticate/public/extension/authenticate.js.map +1 -1
  62. package/dist/cjs/server/authenticate/public/factory.js.map +1 -1
  63. package/dist/cjs/server/authenticate/public/pos/authenticate.js.map +1 -1
  64. package/dist/cjs/server/authenticate/webhooks/authenticate.js.map +1 -1
  65. package/dist/cjs/server/authenticate/webhooks/register.js.map +1 -1
  66. package/dist/cjs/server/boundary/error.js.map +1 -1
  67. package/dist/cjs/server/boundary/headers.js.map +1 -1
  68. package/dist/cjs/server/boundary/index.js.map +1 -1
  69. package/dist/cjs/server/clients/admin/factory.js.map +1 -1
  70. package/dist/cjs/server/clients/admin/graphql.js.map +1 -1
  71. package/dist/cjs/server/clients/admin/rest.js.map +1 -1
  72. package/dist/cjs/server/clients/storefront/factory.js.map +1 -1
  73. package/dist/cjs/server/errors.js.map +1 -1
  74. package/dist/cjs/server/future/flags.js.map +1 -1
  75. package/dist/cjs/server/index.js.map +1 -1
  76. package/dist/cjs/server/override-logger.js.map +1 -1
  77. package/dist/cjs/server/shopify-app.js.map +1 -1
  78. package/dist/cjs/server/test-helpers/test-config.js.map +1 -1
  79. package/dist/cjs/server/types.js.map +1 -1
  80. package/dist/cjs/server/unauthenticated/admin/factory.js.map +1 -1
  81. package/dist/cjs/server/unauthenticated/storefront/factory.js.map +1 -1
  82. package/dist/cjs/server/version.js +1 -1
  83. package/dist/cjs/server/version.js.map +1 -1
  84. package/dist/cjs/session-storage/shopify-app-session-storage-memory/dist/esm/memory.js.map +1 -1
  85. package/dist/esm/react/components/AppProvider/AppProvider.mjs.map +1 -1
  86. package/dist/esm/react/components/AppProxyForm/AppProxyForm.mjs.map +1 -1
  87. package/dist/esm/react/components/AppProxyLink/AppProxyLink.mjs.map +1 -1
  88. package/dist/esm/react/components/AppProxyProvider/AppProxyProvider.mjs.map +1 -1
  89. package/dist/esm/react/components/RemixPolarisLink.mjs.map +1 -1
  90. package/dist/esm/react/const.mjs.map +1 -1
  91. package/dist/esm/server/adapters/node/index.mjs.map +1 -1
  92. package/dist/esm/server/adapters/vercel/index.mjs.map +1 -1
  93. package/dist/esm/server/authenticate/admin/authenticate.mjs.map +1 -1
  94. package/dist/esm/server/authenticate/admin/billing/cancel.mjs.map +1 -1
  95. package/dist/esm/server/authenticate/admin/billing/check.mjs.map +1 -1
  96. package/dist/esm/server/authenticate/admin/billing/create-usage-record.mjs.map +1 -1
  97. package/dist/esm/server/authenticate/admin/billing/helpers.mjs.map +1 -1
  98. package/dist/esm/server/authenticate/admin/billing/request.mjs.map +1 -1
  99. package/dist/esm/server/authenticate/admin/billing/require.mjs.map +1 -1
  100. package/dist/esm/server/authenticate/admin/billing/update-usage-subscription-capped-amount.mjs.map +1 -1
  101. package/dist/esm/server/authenticate/admin/helpers/begin-auth.mjs.map +1 -1
  102. package/dist/esm/server/authenticate/admin/helpers/create-admin-api-context.mjs.map +1 -1
  103. package/dist/esm/server/authenticate/admin/helpers/ensure-app-is-embedded-if-required.mjs.map +1 -1
  104. package/dist/esm/server/authenticate/admin/helpers/ensure-session-token-search-param-if-required.mjs.map +1 -1
  105. package/dist/esm/server/authenticate/admin/helpers/handle-client-error.mjs.map +1 -1
  106. package/dist/esm/server/authenticate/admin/helpers/redirect-to-auth-page.mjs.map +1 -1
  107. package/dist/esm/server/authenticate/admin/helpers/redirect-to-bounce-page.mjs.map +1 -1
  108. package/dist/esm/server/authenticate/admin/helpers/redirect-to-install-page.mjs.map +1 -1
  109. package/dist/esm/server/authenticate/admin/helpers/redirect-to-shopify-or-app-root.mjs.map +1 -1
  110. package/dist/esm/server/authenticate/admin/helpers/redirect-with-app-bridge-headers.mjs.map +1 -1
  111. package/dist/esm/server/authenticate/admin/helpers/redirect-with-exitiframe.mjs.map +1 -1
  112. package/dist/esm/server/authenticate/admin/helpers/redirect.mjs.map +1 -1
  113. package/dist/esm/server/authenticate/admin/helpers/render-app-bridge.mjs.map +1 -1
  114. package/dist/esm/server/authenticate/admin/helpers/trigger-after-auth-hook.mjs.map +1 -1
  115. package/dist/esm/server/authenticate/admin/helpers/validate-redirect-url.mjs.map +1 -1
  116. package/dist/esm/server/authenticate/admin/helpers/validate-shop-and-host-params.mjs.map +1 -1
  117. package/dist/esm/server/authenticate/admin/scope/client/fetch-scopes-details.mjs.map +1 -1
  118. package/dist/esm/server/authenticate/admin/scope/client/revoke-scopes.mjs.map +1 -1
  119. package/dist/esm/server/authenticate/admin/scope/factory.mjs.map +1 -1
  120. package/dist/esm/server/authenticate/admin/scope/query.mjs.map +1 -1
  121. package/dist/esm/server/authenticate/admin/scope/request.mjs.map +1 -1
  122. package/dist/esm/server/authenticate/admin/scope/revoke.mjs.map +1 -1
  123. package/dist/esm/server/authenticate/admin/strategies/auth-code-flow.mjs.map +1 -1
  124. package/dist/esm/server/authenticate/admin/strategies/merchant-custom-app.mjs.map +1 -1
  125. package/dist/esm/server/authenticate/admin/strategies/token-exchange.mjs.map +1 -1
  126. package/dist/esm/server/authenticate/const.mjs.map +1 -1
  127. package/dist/esm/server/authenticate/flow/authenticate.mjs.map +1 -1
  128. package/dist/esm/server/authenticate/fulfillment-service/authenticate.mjs.map +1 -1
  129. package/dist/esm/server/authenticate/helpers/add-response-headers.mjs.map +1 -1
  130. package/dist/esm/server/authenticate/helpers/app-bridge-url.mjs.map +1 -1
  131. package/dist/esm/server/authenticate/helpers/create-or-load-offline-session.mjs.map +1 -1
  132. package/dist/esm/server/authenticate/helpers/ensure-cors-headers.mjs.map +1 -1
  133. package/dist/esm/server/authenticate/helpers/get-session-token-header.mjs.map +1 -1
  134. package/dist/esm/server/authenticate/helpers/get-shop-from-request.mjs.map +1 -1
  135. package/dist/esm/server/authenticate/helpers/idempotent-promise-handler.mjs.map +1 -1
  136. package/dist/esm/server/authenticate/helpers/invalidate-access-token.mjs.map +1 -1
  137. package/dist/esm/server/authenticate/helpers/reject-bot-request.mjs.map +1 -1
  138. package/dist/esm/server/authenticate/helpers/respond-to-invalid-session-token.mjs.map +1 -1
  139. package/dist/esm/server/authenticate/helpers/respond-to-options-request.mjs.map +1 -1
  140. package/dist/esm/server/authenticate/helpers/validate-session-token.mjs.map +1 -1
  141. package/dist/esm/server/authenticate/login/login.mjs.map +1 -1
  142. package/dist/esm/server/authenticate/public/appProxy/authenticate.mjs.map +1 -1
  143. package/dist/esm/server/authenticate/public/checkout/authenticate.mjs.map +1 -1
  144. package/dist/esm/server/authenticate/public/customer-account/authenticate.mjs.map +1 -1
  145. package/dist/esm/server/authenticate/public/extension/authenticate.mjs.map +1 -1
  146. package/dist/esm/server/authenticate/public/factory.mjs.map +1 -1
  147. package/dist/esm/server/authenticate/public/pos/authenticate.mjs.map +1 -1
  148. package/dist/esm/server/authenticate/webhooks/authenticate.mjs.map +1 -1
  149. package/dist/esm/server/authenticate/webhooks/register.mjs.map +1 -1
  150. package/dist/esm/server/boundary/error.mjs.map +1 -1
  151. package/dist/esm/server/boundary/headers.mjs.map +1 -1
  152. package/dist/esm/server/boundary/index.mjs.map +1 -1
  153. package/dist/esm/server/clients/admin/factory.mjs.map +1 -1
  154. package/dist/esm/server/clients/admin/graphql.mjs.map +1 -1
  155. package/dist/esm/server/clients/admin/rest.mjs.map +1 -1
  156. package/dist/esm/server/clients/storefront/factory.mjs.map +1 -1
  157. package/dist/esm/server/errors.mjs.map +1 -1
  158. package/dist/esm/server/future/flags.mjs.map +1 -1
  159. package/dist/esm/server/index.mjs.map +1 -1
  160. package/dist/esm/server/override-logger.mjs.map +1 -1
  161. package/dist/esm/server/shopify-app.mjs.map +1 -1
  162. package/dist/esm/server/test-helpers/test-config.mjs.map +1 -1
  163. package/dist/esm/server/types.mjs.map +1 -1
  164. package/dist/esm/server/unauthenticated/admin/factory.mjs.map +1 -1
  165. package/dist/esm/server/unauthenticated/storefront/factory.mjs.map +1 -1
  166. package/dist/esm/server/version.mjs +1 -1
  167. package/dist/esm/server/version.mjs.map +1 -1
  168. package/dist/esm/session-storage/shopify-app-session-storage-memory/dist/esm/memory.mjs.map +1 -1
  169. package/dist/ts/server/authenticate/admin/billing/cancel.d.ts.map +1 -1
  170. package/dist/ts/server/authenticate/admin/billing/check.d.ts.map +1 -1
  171. package/dist/ts/server/authenticate/admin/billing/create-usage-record.d.ts.map +1 -1
  172. package/dist/ts/server/authenticate/admin/billing/request.d.ts.map +1 -1
  173. package/dist/ts/server/authenticate/admin/billing/require.d.ts.map +1 -1
  174. package/dist/ts/server/authenticate/admin/billing/update-usage-subscription-capped-amount.d.ts.map +1 -1
  175. package/dist/ts/server/authenticate/admin/helpers/ensure-app-is-embedded-if-required.d.ts.map +1 -1
  176. package/dist/ts/server/authenticate/admin/helpers/ensure-session-token-search-param-if-required.d.ts.map +1 -1
  177. package/dist/ts/server/authenticate/admin/helpers/redirect-to-bounce-page.d.ts.map +1 -1
  178. package/dist/ts/server/authenticate/admin/scope/request.d.ts.map +1 -1
  179. package/dist/ts/server/authenticate/admin/scope/revoke.d.ts.map +1 -1
  180. package/dist/ts/server/authenticate/admin/scope/types.d.ts +25 -59
  181. package/dist/ts/server/authenticate/admin/scope/types.d.ts.map +1 -1
  182. package/dist/ts/server/authenticate/login/login.d.ts.map +1 -1
  183. package/dist/ts/server/authenticate/webhooks/register.d.ts.map +1 -1
  184. package/dist/ts/server/unauthenticated/admin/factory.d.ts.map +1 -1
  185. package/dist/ts/server/version.d.ts +1 -1
  186. package/dist/tsconfig.build.tsbuildinfo +1 -1
  187. package/package.json +13 -13
@@ -1 +1 @@
1
- {"version":3,"file":"AppProvider.js","sources":["../../../../../../src/react/components/AppProvider/AppProvider.tsx"],"sourcesContent":[null],"names":["APP_BRIDGE_URL","_jsxs","_Fragment","_jsx","PolarisAppProvider","RemixPolarisLink"],"mappings":";;;;;;;;AAwCA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8DG;AACG,SAAU,WAAW,CAAC,KAAuB,EAAA;IACjD,MAAM,EACJ,QAAQ,EACR,MAAM,EACN,IAAI,EACJ,aAAa,GAAG,IAAI,EACpB,gBAAgB,GAAGA,qBAAc,EACjC,GAAG,YAAY,EAChB,GAAG,KAAK;AAET,IAAA,QACEC,eAAA,CAAAC,mBAAA,EAAA,EAAA,QAAA,EAAA,CACG,aAAa,IAAIC,cAAQ,CAAA,QAAA,EAAA,EAAA,GAAG,EAAE,gBAAgB,EAAgB,cAAA,EAAA,MAAM,EAAI,CAAA,EACzEA,eAACC,mBAAkB,EAAA,EAAA,GACb,YAAY,EAChB,aAAa,EAAEC,iCAAgB,EAC/B,IAAI,EAAE,IAAI,IAAI,WAAW,EAExB,QAAA,EAAA,QAAQ,EACU,CAAA,CAAA,EAAA,CACpB;AAEP;;;;"}
1
+ {"version":3,"file":"AppProvider.js","sources":["../../../../../../src/react/components/AppProvider/AppProvider.tsx"],"sourcesContent":["import {\n AppProvider as PolarisAppProvider,\n AppProviderProps as PolarisAppProviderProps,\n} from '@shopify/polaris';\n// This leads to some TS errors, but it does compile to something that works\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore\nimport englishI18n from '@shopify/polaris/locales/en.json' with {type: 'json'};\n\nimport {APP_BRIDGE_URL} from '../../const';\nimport {RemixPolarisLink} from '../RemixPolarisLink';\n\nexport interface AppProviderProps\n extends Omit<PolarisAppProviderProps, 'linkComponent' | 'i18n'> {\n /**\n * The API key for your Shopify app. This is the `Client ID` from the Partner Dashboard.\n *\n * When using the Shopify CLI, this is the `SHOPIFY_API_KEY` environment variable. If you're using the environment\n * variable, then you need to pass it from the loader to the component.\n */\n apiKey: string;\n /**\n * Whether the app is loaded inside the Shopify Admin. Default is `true`.\n *\n * {@link https://shopify.dev/docs/apps/admin/embedded-app-home}\n */\n isEmbeddedApp?: boolean;\n /**\n * The internationalization (i18n) configuration for your Polaris provider.\n *\n * {@link https://polaris.shopify.com/components/utilities/app-provider}\n */\n i18n?: PolarisAppProviderProps['i18n'];\n /**\n * Used internally by Shopify. You don't need to set this.\n * @private\n */\n __APP_BRIDGE_URL?: string;\n}\n\n/**\n * Sets up the Polaris `AppProvider` and injects the App Bridge script.\n *\n * This component extends the [`AppProvider`](https://polaris.shopify.com/components/utilities/app-provider) component\n * from Polaris, and accepts all of its props except for `linkComponent`, which is overridden to use the Remix `Link`\n * component.\n *\n * {@link https://polaris.shopify.com/components/utilities/app-provider}\n * {@link https://shopify.dev/tools/app-bridge}\n *\n * @example\n * <caption>Set up AppProvider.</caption>\n * <description>Wrap your app in the `AppProvider` component and pass in your API key.</description>\n * ```ts\n * // /app/routes/**\\/*.ts\n * import {authenticate} from '~/shopify.server';\n * import {AppProvider} from '@shopify/shopify-app-remix/react';\n *\n * export async function loader({ request }) {\n * await authenticate.admin(request);\n *\n * return json({ apiKey: process.env.SHOPIFY_API_KEY });\n * }\n *\n * export default function App() {\n * const { apiKey } = useLoaderData();\n *\n * return (\n * <AppProvider isEmbeddedApp apiKey={apiKey}>\n * <Outlet />\n * </AppProvider>\n * );\n * }\n * ```\n *\n * @example\n * <caption>Localize Polaris components.</caption>\n * <description>Pass in a different locale for Polaris to translate its components.</description>\n * ```ts\n * // /app/routes/**\\/*.ts\n * import {authenticate} from '~/shopify.server';\n * import {AppProvider} from '@shopify/shopify-app-remix/react';\n *\n * export async function loader({ request }) {\n * await authenticate.admin(request);\n *\n * return json({\n * apiKey: process.env.SHOPIFY_API_KEY,\n * polarisTranslations: require(\"@shopify/polaris/locales/fr.json\"),\n * });\n * }\n *\n * export default function App() {\n * const { apiKey, polarisTranslations } = useLoaderData();\n *\n * return (\n * <AppProvider apiKey={apiKey} i18n={polarisTranslations}>\n * <Outlet />\n * </AppProvider>\n * );\n * }\n * ```\n */\nexport function AppProvider(props: AppProviderProps) {\n const {\n children,\n apiKey,\n i18n,\n isEmbeddedApp = true,\n __APP_BRIDGE_URL = APP_BRIDGE_URL,\n ...polarisProps\n } = props;\n\n return (\n <>\n {isEmbeddedApp && <script src={__APP_BRIDGE_URL} data-api-key={apiKey} />}\n <PolarisAppProvider\n {...polarisProps}\n linkComponent={RemixPolarisLink}\n i18n={i18n || englishI18n}\n >\n {children}\n </PolarisAppProvider>\n </>\n );\n}\n"],"names":["APP_BRIDGE_URL","_jsxs","_Fragment","_jsx","PolarisAppProvider","RemixPolarisLink"],"mappings":";;;;;;;;AAwCA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8DG;AACG,SAAU,WAAW,CAAC,KAAuB,EAAA;IACjD,MAAM,EACJ,QAAQ,EACR,MAAM,EACN,IAAI,EACJ,aAAa,GAAG,IAAI,EACpB,gBAAgB,GAAGA,qBAAc,EACjC,GAAG,YAAY,EAChB,GAAG,KAAK;AAET,IAAA,QACEC,eAAA,CAAAC,mBAAA,EAAA,EAAA,QAAA,EAAA,CACG,aAAa,IAAIC,cAAA,CAAA,QAAA,EAAA,EAAQ,GAAG,EAAE,gBAAgB,EAAA,cAAA,EAAgB,MAAM,EAAA,CAAI,EACzEA,eAACC,mBAAkB,EAAA,EAAA,GACb,YAAY,EAChB,aAAa,EAAEC,iCAAgB,EAC/B,IAAI,EAAE,IAAI,IAAI,WAAW,EAAA,QAAA,EAExB,QAAQ,EAAA,CACU,CAAA,EAAA,CACpB;AAEP;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"AppProxyForm.js","sources":["../../../../../../src/react/components/AppProxyForm/AppProxyForm.tsx"],"sourcesContent":[null],"names":["useContext","AppProxyProviderContext","_jsx","Form"],"mappings":";;;;;;;AASA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuDG;AACG,SAAU,YAAY,CAAC,KAAwB,EAAA;AACnD,IAAA,MAAM,OAAO,GAAGA,gBAAU,CAACC,wCAAuB,CAAC;IAEnD,IAAI,CAAC,OAAO,EAAE;AACZ,QAAA,MAAM,IAAI,KAAK,CACb,gEAAgE,CACjE;;IAGH,MAAM,EAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,UAAU,EAAC,GAAG,KAAK;IAE/C,QACEC,eAACC,UAAI,EAAA,EAAC,MAAM,EAAE,OAAO,CAAC,SAAS,CAAC,MAAM,EAAE,KAAK,CAAC,EAAM,GAAA,UAAU,YAC3D,QAAQ,EAAA,CACJ;AAEX;;;;"}
1
+ {"version":3,"file":"AppProxyForm.js","sources":["../../../../../../src/react/components/AppProxyForm/AppProxyForm.tsx"],"sourcesContent":["import {useContext} from 'react';\nimport {Form, type FormProps} from '@remix-run/react';\n\nimport {AppProxyProviderContext} from '../AppProxyProvider';\n\nexport interface AppProxyFormProps extends FormProps {\n action: string;\n}\n\n/**\n * Sets up a Remix `<Form>` component that works when rendered on an app proxy page.\n *\n * Supports any properties accepted by the `<Form>` component.\n *\n * Because Remix doesn't support URL rewriting, any route using this component should <b>match the pathname of the proxy\n * URL exactly</b>, and <b>end in a trailing slash</b> (e.g., `https://<shop>/apps/proxy/`), or set the Remix Form prop\n * `navigate` to `false`.\n *\n * @example\n * <caption>Render a form element in a proxied route.</caption>\n * <description>Use an `AppProxyForm` within an `AppProxy` to create a form.</description>\n * ```ts\n * // /app/routes/apps/appProxy.ts\n * import {\n * AppProxyProvider,\n * AppProxyForm,\n * } from \"@shopify/shopify-app-remix/react\";\n * import { authenticate } from \"~/shopify.server\";\n *\n * export async function loader({ request }) {\n * await authenticate.public.appProxy(request);\n *\n * return json({ appUrl: process.env.SHOPIFY_APP_URL });\n * }\n *\n * export async function action({ request }) {\n * await authenticate.public.appProxy(request);\n *\n * const formData = await request.formData();\n * const field = formData.get(\"field\")?.toString();\n *\n * // Perform actions\n * if (field) {\n * console.log(\"Field:\", field);\n * }\n *\n * // Return JSON to the client\n * return json({ message: \"Success!\" });\n * }\n *\n * export default function App() {\n * const { appUrl } = useLoaderData();\n *\n * return (\n * <AppProxyProvider appUrl={appUrl}>\n * <AppProxyForm action=\"/apps/appProxy\" method=\"post\">\n * <input type=\"text\" name=\"field\" />\n *\n * <input type=\"submit\" name=\"Submit\" />\n * </AppProxyForm>\n * </AppProxyProvider>\n * );\n * }\n * ```\n */\nexport function AppProxyForm(props: AppProxyFormProps) {\n const context = useContext(AppProxyProviderContext);\n\n if (!context) {\n throw new Error(\n 'AppProxyForm must be used within an AppProxyProvider component',\n );\n }\n\n const {children, action, ...otherProps} = props;\n\n return (\n <Form action={context.formatUrl(action, false)} {...otherProps}>\n {children}\n </Form>\n );\n}\n"],"names":["useContext","AppProxyProviderContext","_jsx","Form"],"mappings":";;;;;;;AASA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuDG;AACG,SAAU,YAAY,CAAC,KAAwB,EAAA;AACnD,IAAA,MAAM,OAAO,GAAGA,gBAAU,CAACC,wCAAuB,CAAC;IAEnD,IAAI,CAAC,OAAO,EAAE;AACZ,QAAA,MAAM,IAAI,KAAK,CACb,gEAAgE,CACjE;IACH;IAEA,MAAM,EAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,UAAU,EAAC,GAAG,KAAK;IAE/C,QACEC,eAACC,UAAI,EAAA,EAAC,MAAM,EAAE,OAAO,CAAC,SAAS,CAAC,MAAM,EAAE,KAAK,CAAC,EAAA,GAAM,UAAU,YAC3D,QAAQ,EAAA,CACJ;AAEX;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"AppProxyLink.js","sources":["../../../../../../src/react/components/AppProxyLink/AppProxyLink.tsx"],"sourcesContent":[null],"names":["useContext","AppProxyProviderContext","_jsx"],"mappings":";;;;;;AAYA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6BG;AACG,SAAU,YAAY,CAAC,KAAwB,EAAA;AACnD,IAAA,MAAM,OAAO,GAAGA,gBAAU,CAACC,wCAAuB,CAAC;IAEnD,IAAI,CAAC,OAAO,EAAE;AACZ,QAAA,MAAM,IAAI,KAAK,CACb,gEAAgE,CACjE;;IAGH,MAAM,EAAC,QAAQ,EAAE,IAAI,EAAE,GAAG,UAAU,EAAC,GAAG,KAAK;AAE7C,IAAA,QACEC,cAAG,CAAA,GAAA,EAAA,EAAA,IAAI,EAAE,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,KAAM,UAAU,EAAA,QAAA,EAC7C,QAAQ,EAAA,CACP;AAER;;;;"}
1
+ {"version":3,"file":"AppProxyLink.js","sources":["../../../../../../src/react/components/AppProxyLink/AppProxyLink.tsx"],"sourcesContent":["import {useContext} from 'react';\n\nimport {AppProxyProviderContext} from '../AppProxyProvider';\n\nexport interface AppProxyLinkProps\n extends React.DetailedHTMLProps<\n React.AnchorHTMLAttributes<HTMLAnchorElement>,\n HTMLAnchorElement\n > {\n href: string;\n}\n\n/**\n * Sets up an `<a />` HTML element that works when rendered behind an app proxy.\n *\n * Supports any properties accepted by the `<a />` HTML element.\n *\n * @example\n * <caption>Link to a different route.</caption>\n * <description>Use an `AppProxyLink` within an `AppProxyProvider` to link to a different proxied route.</description>\n * ```ts\n * // /app/routes/**\\/*.ts\n * import {authenticate} from '~/shopify.server';\n * import {AppProxyProvider, AppProxyLink} from '@shopify/shopify-app-remix/react';\n *\n * export async function loader({ request }) {\n * await authenticate.public.appProxy(request);\n *\n * return json({ appUrl: process.env.SHOPIFY_APP_URL });\n * }\n *\n * export default function App() {\n * const { appUrl } = useLoaderData();\n *\n * return (\n * <AppProxyProvider appUrl={appUrl}>\n * <AppProxyLink href=\"/other-proxy-route\">Link to another route</AppProxyLink>\n * </AppProxyProvider>\n * );\n * }\n * ```\n */\nexport function AppProxyLink(props: AppProxyLinkProps) {\n const context = useContext(AppProxyProviderContext);\n\n if (!context) {\n throw new Error(\n 'AppProxyLink must be used within an AppProxyProvider component',\n );\n }\n\n const {children, href, ...otherProps} = props;\n\n return (\n <a href={context.formatUrl(href)} {...otherProps}>\n {children}\n </a>\n );\n}\n"],"names":["useContext","AppProxyProviderContext","_jsx"],"mappings":";;;;;;AAYA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6BG;AACG,SAAU,YAAY,CAAC,KAAwB,EAAA;AACnD,IAAA,MAAM,OAAO,GAAGA,gBAAU,CAACC,wCAAuB,CAAC;IAEnD,IAAI,CAAC,OAAO,EAAE;AACZ,QAAA,MAAM,IAAI,KAAK,CACb,gEAAgE,CACjE;IACH;IAEA,MAAM,EAAC,QAAQ,EAAE,IAAI,EAAE,GAAG,UAAU,EAAC,GAAG,KAAK;AAE7C,IAAA,QACEC,cAAA,CAAA,GAAA,EAAA,EAAG,IAAI,EAAE,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,KAAM,UAAU,EAAA,QAAA,EAC7C,QAAQ,EAAA,CACP;AAER;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"AppProxyProvider.js","sources":["../../../../../../src/react/components/AppProxyProvider/AppProxyProvider.tsx"],"sourcesContent":[null],"names":["createContext","useState","useEffect","_jsxs","_jsx"],"mappings":";;;;;MAyBa,uBAAuB,GAClCA,mBAAa,CAAsC,IAAI;AAEzD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiCG;AACG,SAAU,gBAAgB,CAAC,KAA4B,EAAA;AAC3D,IAAA,MAAM,EAAC,QAAQ,EAAE,MAAM,EAAC,GAAG,KAAK;IAChC,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAGC,cAAQ,EAAmB;IAE/DC,eAAS,CACP,MAAM,aAAa,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,EAClD,CAAC,aAAa,CAAC,CAChB;AAED,IAAA,QACEC,eAAA,CAAC,uBAAuB,CAAC,QAAQ,EAAA,EAC/B,KAAK,EAAE,EAAC,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,cAAc,CAAC,UAAU,CAAC,EAAC,EAAA,QAAA,EAAA,CAElEC,cAAM,CAAA,MAAA,EAAA,EAAA,IAAI,EAAE,MAAM,EAAI,CAAA,EAErB,QAAQ,CAAA,EAAA,CACwB;AAEvC;AAEA,SAAS,cAAc,CAAC,UAA2B,EAAA;AACjD,IAAA,OAAO,CAAC,GAAuB,EAAE,SAAS,GAAG,IAAI,KAAI;QACnD,IAAI,CAAC,GAAG,EAAE;AACR,YAAA,OAAO,GAAG;;QAGZ,IAAI,QAAQ,GAAG,GAAG;QAElB,IAAI,SAAS,IAAI,UAAU,IAAI,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;AACvD,YAAA,QAAQ,GAAG,IAAI,GAAG,CAAC,GAAG,UAAU,CAAC,MAAM,CAAA,EAAG,GAAG,CAAA,CAAE,CAAC,CAAC,IAAI;;QAEvD,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;AAC3B,YAAA,QAAQ,GAAG,CAAA,EAAG,QAAQ,CAAA,CAAA,CAAG;;AAG3B,QAAA,OAAO,QAAQ;AACjB,KAAC;AACH;;;;;"}
1
+ {"version":3,"file":"AppProxyProvider.js","sources":["../../../../../../src/react/components/AppProxyProvider/AppProxyProvider.tsx"],"sourcesContent":["import {createContext, useEffect, useState} from 'react';\n\nexport interface AppProxyProviderProps {\n /**\n * The URL where the app is hosted. You can set this from the `SHOPIFY_APP_URL` environment variable.\n */\n appUrl: string;\n\n /**\n * The children to render.\n */\n children?: React.ReactNode;\n}\n\ntype FormatUrlFunction = (\n url: string | undefined,\n addOrigin?: boolean,\n) => string | undefined;\n\ninterface AppProxyProviderContextProps {\n appUrl: string;\n formatUrl: FormatUrlFunction;\n requestUrl?: URL;\n}\n\nexport const AppProxyProviderContext =\n createContext<AppProxyProviderContextProps | null>(null);\n\n/**\n * Sets up a page to render behind a Shopify app proxy, enabling JavaScript and CSS to be loaded from the app.\n *\n * Also provides components that enable using other components such as links and forms within proxies.\n *\n * > Caution:\n * Because Remix doesn't support URL rewriting, any route using this component should <b>match the pathname of the proxy\n * URL exactly</b>, and <b>end in a trailing slash</b> (e.g., `https://<shop>/apps/proxy/`).\n *\n * @example\n * <caption>Wrap a route with an AppProxyProvider component.</caption>\n * <description>Wrap your route component in the `AppProxyProvider` component and pass in your app URL.</description>\n * ```ts\n * // /app/routes/**\\/*.ts\n * import {authenticate} from '~/shopify.server';\n * import {AppProxyProvider} from '@shopify/shopify-app-remix/react';\n *\n * export async function loader({ request }) {\n * await authenticate.public.appProxy(request);\n *\n * return json({ appUrl: process.env.SHOPIFY_APP_URL });\n * }\n *\n * export default function App() {\n * const { appUrl } = useLoaderData();\n *\n * return (\n * <AppProxyProvider appUrl={appUrl}>\n * Page content\n * </AppProxyProvider>\n * );\n * }\n * ```\n */\nexport function AppProxyProvider(props: AppProxyProviderProps) {\n const {children, appUrl} = props;\n const [requestUrl, setRequestUrl] = useState<URL | undefined>();\n\n useEffect(\n () => setRequestUrl(new URL(window.location.href)),\n [setRequestUrl],\n );\n\n return (\n <AppProxyProviderContext.Provider\n value={{appUrl, requestUrl, formatUrl: formatProxyUrl(requestUrl)}}\n >\n <base href={appUrl} />\n\n {children}\n </AppProxyProviderContext.Provider>\n );\n}\n\nfunction formatProxyUrl(requestUrl: URL | undefined): FormatUrlFunction {\n return (url: string | undefined, addOrigin = true) => {\n if (!url) {\n return url;\n }\n\n let finalUrl = url;\n\n if (addOrigin && requestUrl && finalUrl.startsWith('/')) {\n finalUrl = new URL(`${requestUrl.origin}${url}`).href;\n }\n if (!finalUrl.endsWith('/')) {\n finalUrl = `${finalUrl}/`;\n }\n\n return finalUrl;\n };\n}\n"],"names":["createContext","useState","useEffect","_jsxs","_jsx"],"mappings":";;;;;MAyBa,uBAAuB,GAClCA,mBAAa,CAAsC,IAAI;AAEzD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiCG;AACG,SAAU,gBAAgB,CAAC,KAA4B,EAAA;AAC3D,IAAA,MAAM,EAAC,QAAQ,EAAE,MAAM,EAAC,GAAG,KAAK;IAChC,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAGC,cAAQ,EAAmB;IAE/DC,eAAS,CACP,MAAM,aAAa,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,EAClD,CAAC,aAAa,CAAC,CAChB;AAED,IAAA,QACEC,eAAA,CAAC,uBAAuB,CAAC,QAAQ,EAAA,EAC/B,KAAK,EAAE,EAAC,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,cAAc,CAAC,UAAU,CAAC,EAAC,EAAA,QAAA,EAAA,CAElEC,cAAA,CAAA,MAAA,EAAA,EAAM,IAAI,EAAE,MAAM,EAAA,CAAI,EAErB,QAAQ,CAAA,EAAA,CACwB;AAEvC;AAEA,SAAS,cAAc,CAAC,UAA2B,EAAA;AACjD,IAAA,OAAO,CAAC,GAAuB,EAAE,SAAS,GAAG,IAAI,KAAI;QACnD,IAAI,CAAC,GAAG,EAAE;AACR,YAAA,OAAO,GAAG;QACZ;QAEA,IAAI,QAAQ,GAAG,GAAG;QAElB,IAAI,SAAS,IAAI,UAAU,IAAI,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;AACvD,YAAA,QAAQ,GAAG,IAAI,GAAG,CAAC,GAAG,UAAU,CAAC,MAAM,CAAA,EAAG,GAAG,CAAA,CAAE,CAAC,CAAC,IAAI;QACvD;QACA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;AAC3B,YAAA,QAAQ,GAAG,CAAA,EAAG,QAAQ,CAAA,CAAA,CAAG;QAC3B;AAEA,QAAA,OAAO,QAAQ;AACjB,IAAA,CAAC;AACH;;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"RemixPolarisLink.js","sources":["../../../../../src/react/components/RemixPolarisLink.tsx"],"sourcesContent":[null],"names":["_jsx","Link"],"mappings":";;;;;;AAQa,MAAA,gBAAgB,GAAG,KAAK,CAAC,UAAU,CAG9C,CAAC,KAAK,EAAE,GAAG,MACXA,cAAC,CAAAC,UAAI,EAAK,EAAA,GAAA,KAAK,EAAE,EAAE,EAAE,KAAK,CAAC,GAAG,IAAI,KAAK,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAI,CAAA,CACzD;;;;"}
1
+ {"version":3,"file":"RemixPolarisLink.js","sources":["../../../../../src/react/components/RemixPolarisLink.tsx"],"sourcesContent":["import React from 'react';\nimport {Link} from '@remix-run/react';\n// Polaris' LinkProps doesn't match this type, so we need to import it directly\nimport type {\n LinkLikeComponent,\n LinkLikeComponentProps,\n} from '@shopify/polaris/build/ts/src/utilities/link';\n\nexport const RemixPolarisLink = React.forwardRef<\n HTMLAnchorElement,\n LinkLikeComponentProps\n>((props, ref) => (\n <Link {...props} to={props.url ?? props.to} ref={ref} />\n)) as LinkLikeComponent;\n"],"names":["_jsx","Link"],"mappings":";;;;;;AAQO,MAAM,gBAAgB,GAAG,KAAK,CAAC,UAAU,CAG9C,CAAC,KAAK,EAAE,GAAG,MACXA,cAAA,CAACC,UAAI,EAAA,EAAA,GAAK,KAAK,EAAE,EAAE,EAAE,KAAK,CAAC,GAAG,IAAI,KAAK,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAA,CAAI,CACzD;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"const.js","sources":["../../../../src/react/const.ts"],"sourcesContent":[null],"names":[],"mappings":";;AAAO,MAAM,cAAc,GACzB;;;;"}
1
+ {"version":3,"file":"const.js","sources":["../../../../src/react/const.ts"],"sourcesContent":["export const APP_BRIDGE_URL =\n 'https://cdn.shopify.com/shopifycloud/app-bridge.js';\n"],"names":[],"mappings":";;AAAO,MAAM,cAAc,GACzB;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../../../src/server/adapters/node/index.ts"],"sourcesContent":[null],"names":["setCrypto","setAbstractRuntimeString","setAppBridgeUrlOverride"],"mappings":";;;;;;;;;AASAA,iBAAS,CAAC,MAAa,CAAC;AAExBC,gCAAwB,CAAC,MAAK;AAC5B,IAAA,OAAO,cAAc;AACvB,CAAC,CAAC;AAEF;AACA,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE;AAC9B,IAAAC,oCAAuB,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;AACrD;AACA;;"}
1
+ {"version":3,"file":"index.js","sources":["../../../../../../src/server/adapters/node/index.ts"],"sourcesContent":["import crypto from 'crypto';\n\nimport {\n setAbstractRuntimeString,\n setCrypto,\n} from '@shopify/shopify-api/runtime';\n\nimport {setAppBridgeUrlOverride} from '../../authenticate/helpers';\n\nsetCrypto(crypto as any);\n\nsetAbstractRuntimeString(() => {\n return `Remix (Node)`;\n});\n\n/* eslint-disable no-process-env */\nif (process.env.APP_BRIDGE_URL) {\n setAppBridgeUrlOverride(process.env.APP_BRIDGE_URL);\n}\n/* eslint-enable no-process-env */\n"],"names":["setCrypto","setAbstractRuntimeString","setAppBridgeUrlOverride"],"mappings":";;;;;;;;;AASAA,iBAAS,CAAC,MAAa,CAAC;AAExBC,gCAAwB,CAAC,MAAK;AAC5B,IAAA,OAAO,cAAc;AACvB,CAAC,CAAC;AAEF;AACA,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE;AAC9B,IAAAC,oCAAuB,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;AACrD;AACA;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../../../src/server/adapters/vercel/index.ts"],"sourcesContent":[null],"names":["installGlobals","setAbstractFetchFunc"],"mappings":";;;;;;AAKAA,mBAAc,EAAE;AAEhB,MAAM,SAAS,GAAG,KAAK;AACvBC,4BAAoB,CAAC,OAAO,GAAG,IAAI,KAAI;IACrC,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,GAAG,IAAI,CAAC;AAEzC,IAAA,OAAO,QAAe;AACxB,CAAC,CAAC;;"}
1
+ {"version":3,"file":"index.js","sources":["../../../../../../src/server/adapters/vercel/index.ts"],"sourcesContent":["import {setAbstractFetchFunc} from '@shopify/shopify-api/runtime';\nimport {installGlobals} from '@remix-run/node';\n\nimport '../node';\n\ninstallGlobals();\n\nconst fetchFunc = fetch;\nsetAbstractFetchFunc(async (...args) => {\n const response = await fetchFunc(...args);\n\n return response as any;\n});\n"],"names":["installGlobals","setAbstractFetchFunc"],"mappings":";;;;;;AAKAA,mBAAc,EAAE;AAEhB,MAAM,SAAS,GAAG,KAAK;AACvBC,4BAAoB,CAAC,OAAO,GAAG,IAAI,KAAI;IACrC,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,GAAG,IAAI,CAAC;AAEzC,IAAA,OAAO,QAAe;AACxB,CAAC,CAAC;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"authenticate.js","sources":["../../../../../../src/server/authenticate/admin/authenticate.ts"],"sourcesContent":[null],"names":["getShopFromRequest","renderAppBridge","request","createAdminApiContext","requireBillingFactory","checkBillingFactory","requestBillingFactory","cancelBillingFactory","createUsageRecordFactory","updateUsageCappedAmountFactory","ensureCORSHeadersFactory","redirectFactory","scopesApiFactory","respondToBotRequest","respondToOptionsRequest","getSessionTokenHeader","validateShopAndHostParams","ensureAppIsEmbeddedIfRequired","ensureSessionTokenSearchParamIfRequired","getSessionTokenFromUrlParam","validateSessionToken"],"mappings":"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"}
1
+ {"version":3,"file":"authenticate.js","sources":["../../../../../../src/server/authenticate/admin/authenticate.ts"],"sourcesContent":["import {JwtPayload, Session, ShopifyRestResources} from '@shopify/shopify-api';\n\nimport type {BasicParams} from '../../types';\nimport type {AppConfigArg} from '../../config-types';\nimport {\n getSessionTokenHeader,\n ensureCORSHeadersFactory,\n getSessionTokenFromUrlParam,\n respondToBotRequest,\n respondToOptionsRequest,\n validateSessionToken,\n getShopFromRequest,\n} from '../helpers';\n\nimport {\n cancelBillingFactory,\n requestBillingFactory,\n requireBillingFactory,\n checkBillingFactory,\n createUsageRecordFactory,\n updateUsageCappedAmountFactory,\n} from './billing';\nimport type {\n AdminContext,\n AuthenticateAdmin,\n EmbeddedAdminContext,\n NonEmbeddedAdminContext,\n} from './types';\nimport {\n createAdminApiContext,\n ensureAppIsEmbeddedIfRequired,\n ensureSessionTokenSearchParamIfRequired,\n redirectFactory,\n renderAppBridge,\n validateShopAndHostParams,\n} from './helpers';\nimport {AuthorizationStrategy} from './strategies/types';\nimport {scopesApiFactory} from './scope/factory';\n\nexport interface SessionTokenContext {\n shop: string;\n sessionId?: string;\n sessionToken?: string;\n payload?: JwtPayload;\n}\n\ninterface AuthStrategyParams extends BasicParams {\n strategy: AuthorizationStrategy;\n}\n\nexport function authStrategyFactory<\n ConfigArg extends AppConfigArg,\n Resources extends ShopifyRestResources = ShopifyRestResources,\n>({\n strategy,\n ...params\n}: AuthStrategyParams): AuthenticateAdmin<ConfigArg, Resources> {\n const {api, logger, config} = params;\n\n async function respondToBouncePageRequest(request: Request) {\n const url = new URL(request.url);\n\n if (url.pathname === config.auth.patchSessionTokenPath) {\n logger.debug('Rendering bounce page', {\n shop: getShopFromRequest(request),\n });\n throw renderAppBridge({config, logger, api}, request);\n }\n }\n\n async function respondToExitIframeRequest(request: Request) {\n const url = new URL(request.url);\n\n if (url.pathname === config.auth.exitIframePath) {\n const destination = url.searchParams.get('exitIframe')!;\n\n logger.debug('Rendering exit iframe page', {\n shop: getShopFromRequest(request),\n destination,\n });\n throw renderAppBridge({config, logger, api}, request, {url: destination});\n }\n }\n\n type AdminContextBase =\n | EmbeddedAdminContext<ConfigArg, Resources>\n | NonEmbeddedAdminContext<ConfigArg, Resources>;\n\n function createContext(\n request: Request,\n session: Session,\n authStrategy: AuthorizationStrategy,\n sessionToken?: JwtPayload,\n ): AdminContext<ConfigArg, Resources> {\n let context: AdminContextBase = {\n admin: createAdminApiContext<ConfigArg, Resources>(\n session,\n params,\n authStrategy.handleClientError(request),\n ),\n billing: {\n require: requireBillingFactory(params, request, session),\n check: checkBillingFactory(params, request, session),\n request: requestBillingFactory(params, request, session),\n cancel: cancelBillingFactory(params, request, session),\n createUsageRecord: createUsageRecordFactory(params, request, session),\n updateUsageCappedAmount: updateUsageCappedAmountFactory(\n params,\n request,\n session,\n ),\n },\n\n session,\n cors: ensureCORSHeadersFactory(params, request),\n };\n\n context = addEmbeddedFeatures(context, request, session, sessionToken);\n context = addScopesFeatures(context);\n\n return context as AdminContext<ConfigArg, Resources>;\n }\n\n function addEmbeddedFeatures(\n context: AdminContextBase,\n request: Request,\n session: Session,\n sessionToken?: JwtPayload,\n ) {\n if (config.isEmbeddedApp) {\n return {\n ...context,\n sessionToken,\n redirect: redirectFactory(params, request, session.shop),\n };\n }\n return context;\n }\n\n function addScopesFeatures(context: AdminContextBase) {\n return {\n ...context,\n scopes: scopesApiFactory(params, context.session, context.admin),\n };\n }\n\n return async function authenticateAdmin(request: Request) {\n try {\n respondToBotRequest(params, request);\n respondToOptionsRequest(params, request);\n await respondToBouncePageRequest(request);\n await respondToExitIframeRequest(request);\n await strategy.respondToOAuthRequests(request);\n\n // If this is a valid request, but it doesn't have a session token header, this is a document request. We need to\n // ensure we're embedded if needed and we have the information needed to load the session.\n if (!getSessionTokenHeader(request)) {\n validateShopAndHostParams(params, request);\n await ensureAppIsEmbeddedIfRequired(params, request);\n await ensureSessionTokenSearchParamIfRequired(params, request);\n }\n\n logger.info('Authenticating admin request', {\n shop: getShopFromRequest(request),\n });\n\n const {payload, shop, sessionId, sessionToken} =\n await getSessionTokenContext(params, request);\n\n logger.debug('Loading session from storage', {shop, sessionId});\n const existingSession = sessionId\n ? await config.sessionStorage!.loadSession(sessionId)\n : undefined;\n\n const session = await strategy.authenticate(request, {\n session: existingSession,\n sessionToken,\n shop,\n });\n\n return createContext(request, session, strategy, payload);\n } catch (errorOrResponse) {\n if (errorOrResponse instanceof Response) {\n logger.debug('Authenticate returned a response', {\n shop: getShopFromRequest(request),\n });\n ensureCORSHeadersFactory(params, request)(errorOrResponse);\n }\n\n throw errorOrResponse;\n }\n };\n}\n\nasync function getSessionTokenContext(\n params: BasicParams,\n request: Request,\n): Promise<SessionTokenContext> {\n const {api, config, logger} = params;\n\n const headerSessionToken = getSessionTokenHeader(request);\n const searchParamSessionToken = getSessionTokenFromUrlParam(request);\n const sessionToken = (headerSessionToken || searchParamSessionToken)!;\n\n logger.debug('Attempting to authenticate session token', {\n shop: getShopFromRequest(request),\n sessionToken: JSON.stringify({\n header: headerSessionToken,\n search: searchParamSessionToken,\n }),\n });\n\n if (config.isEmbeddedApp) {\n const payload = await validateSessionToken(params, request, sessionToken);\n const dest = new URL(payload.dest);\n const shop = dest.hostname;\n\n logger.debug('Session token is valid - authenticated', {shop, payload});\n const sessionId = config.useOnlineTokens\n ? api.session.getJwtSessionId(shop, payload.sub)\n : api.session.getOfflineId(shop);\n\n return {shop, payload, sessionId, sessionToken};\n }\n\n const url = new URL(request.url);\n const shop = url.searchParams.get('shop')!;\n\n const sessionId = await api.session.getCurrentId({\n isOnline: config.useOnlineTokens,\n rawRequest: request,\n });\n\n return {shop, sessionId, payload: undefined, sessionToken};\n}\n"],"names":["getShopFromRequest","renderAppBridge","request","createAdminApiContext","requireBillingFactory","checkBillingFactory","requestBillingFactory","cancelBillingFactory","createUsageRecordFactory","updateUsageCappedAmountFactory","ensureCORSHeadersFactory","redirectFactory","scopesApiFactory","respondToBotRequest","respondToOptionsRequest","getSessionTokenHeader","validateShopAndHostParams","ensureAppIsEmbeddedIfRequired","ensureSessionTokenSearchParamIfRequired","getSessionTokenFromUrlParam","validateSessionToken"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"cancel.js","sources":["../../../../../../../src/server/authenticate/admin/billing/cancel.ts"],"sourcesContent":[null],"names":["HttpResponseError","invalidateAccessToken","redirectToAuthPage"],"mappings":";;;;;;;;;SAQgB,oBAAoB,CAClC,MAAmB,EACnB,OAAgB,EAChB,OAAgB,EAAA;AAEhB,IAAA,OAAO,eAAe,aAAa,CAAC,OAA6B,EAAA;AAC/D,QAAA,MAAM,EAAC,GAAG,EAAE,MAAM,EAAC,GAAG,MAAM;AAE5B,QAAA,MAAM,CAAC,KAAK,CAAC,oBAAoB,EAAE,EAAC,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,GAAG,OAAO,EAAC,CAAC;AAEpE,QAAA,IAAI;AACF,YAAA,OAAO,MAAM,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC;gBAC9B,OAAO;gBACP,cAAc,EAAE,OAAO,CAAC,cAAc;gBACtC,MAAM,EAAE,OAAO,CAAC,MAAM;gBACtB,OAAO,EAAE,OAAO,CAAC,OAAO;AACzB,aAAA,CAAC;;QACF,OAAO,KAAK,EAAE;AACd,YAAA,IAAI,KAAK,YAAYA,4BAAiB,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,KAAK,GAAG,EAAE;AACrE,gBAAA,MAAM,CAAC,KAAK,CAAC,6CAA6C,EAAE;oBAC1D,IAAI,EAAE,OAAO,CAAC,IAAI;AACnB,iBAAA,CAAC;AACF,gBAAA,MAAMC,2CAAqB,CAAC,MAAM,EAAE,OAAO,CAAC;gBAC5C,MAAM,MAAMC,qCAAkB,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC;;iBACxD;AACL,gBAAA,MAAM,KAAK;;;AAGjB,KAAC;AACH;;;;"}
1
+ {"version":3,"file":"cancel.js","sources":["../../../../../../../src/server/authenticate/admin/billing/cancel.ts"],"sourcesContent":["import {HttpResponseError, Session} from '@shopify/shopify-api';\n\nimport type {BasicParams} from '../../../types';\nimport {redirectToAuthPage} from '../helpers';\nimport {invalidateAccessToken} from '../../helpers';\n\nimport type {CancelBillingOptions} from './types';\n\nexport function cancelBillingFactory(\n params: BasicParams,\n request: Request,\n session: Session,\n) {\n return async function cancelBilling(options: CancelBillingOptions) {\n const {api, logger} = params;\n\n logger.debug('Cancelling billing', {shop: session.shop, ...options});\n\n try {\n return await api.billing.cancel({\n session,\n subscriptionId: options.subscriptionId,\n isTest: options.isTest,\n prorate: options.prorate,\n });\n } catch (error) {\n if (error instanceof HttpResponseError && error.response.code === 401) {\n logger.debug('API token was invalid, redirecting to OAuth', {\n shop: session.shop,\n });\n await invalidateAccessToken(params, session);\n throw await redirectToAuthPage(params, request, session.shop);\n } else {\n throw error;\n }\n }\n };\n}\n"],"names":["HttpResponseError","invalidateAccessToken","redirectToAuthPage"],"mappings":";;;;;;;;;SAQgB,oBAAoB,CAClC,MAAmB,EACnB,OAAgB,EAChB,OAAgB,EAAA;AAEhB,IAAA,OAAO,eAAe,aAAa,CAAC,OAA6B,EAAA;AAC/D,QAAA,MAAM,EAAC,GAAG,EAAE,MAAM,EAAC,GAAG,MAAM;AAE5B,QAAA,MAAM,CAAC,KAAK,CAAC,oBAAoB,EAAE,EAAC,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,GAAG,OAAO,EAAC,CAAC;AAEpE,QAAA,IAAI;AACF,YAAA,OAAO,MAAM,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC;gBAC9B,OAAO;gBACP,cAAc,EAAE,OAAO,CAAC,cAAc;gBACtC,MAAM,EAAE,OAAO,CAAC,MAAM;gBACtB,OAAO,EAAE,OAAO,CAAC,OAAO;AACzB,aAAA,CAAC;QACJ;QAAE,OAAO,KAAK,EAAE;AACd,YAAA,IAAI,KAAK,YAAYA,4BAAiB,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,KAAK,GAAG,EAAE;AACrE,gBAAA,MAAM,CAAC,KAAK,CAAC,6CAA6C,EAAE;oBAC1D,IAAI,EAAE,OAAO,CAAC,IAAI;AACnB,iBAAA,CAAC;AACF,gBAAA,MAAMC,2CAAqB,CAAC,MAAM,EAAE,OAAO,CAAC;gBAC5C,MAAM,MAAMC,qCAAkB,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC;YAC/D;iBAAO;AACL,gBAAA,MAAM,KAAK;YACb;QACF;AACF,IAAA,CAAC;AACH;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"check.js","sources":["../../../../../../../src/server/authenticate/admin/billing/check.ts"],"sourcesContent":[null],"names":["HttpResponseError","invalidateAccessToken","redirectToAuthPage"],"mappings":";;;;;;;;;SASgB,mBAAmB,CACjC,MAAmB,EACnB,OAAgB,EAChB,OAAgB,EAAA;AAEhB,IAAA,OAAO,eAAe,YAAY,CAChC,UAAuC,EAAE,EAAA;AAEzC,QAAA,MAAM,EAAC,GAAG,EAAE,MAAM,EAAC,GAAG,MAAM;AAE5B,QAAA,MAAM,CAAC,KAAK,CAAC,wBAAwB,EAAE,EAAC,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,GAAG,OAAO,EAAC,CAAC;AAExE,QAAA,IAAI;AACF,YAAA,OAAO,MAAM,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC;gBAC7B,OAAO;gBACP,KAAK,EAAE,OAAO,CAAC,KAAiB;gBAChC,MAAM,EAAE,OAAO,CAAC,MAAM;AACtB,gBAAA,YAAY,EAAE,IAAI;AACnB,aAAA,CAAC;;QACF,OAAO,KAAK,EAAE;AACd,YAAA,IAAI,KAAK,YAAYA,4BAAiB,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,KAAK,GAAG,EAAE;AACrE,gBAAA,MAAM,CAAC,KAAK,CAAC,6CAA6C,EAAE;oBAC1D,IAAI,EAAE,OAAO,CAAC,IAAI;AACnB,iBAAA,CAAC;AACF,gBAAA,MAAMC,2CAAqB,CAAC,MAAM,EAAE,OAAO,CAAC;gBAC5C,MAAM,MAAMC,qCAAkB,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC;;iBACxD;AACL,gBAAA,MAAM,KAAK;;;AAGjB,KAAC;AACH;;;;"}
1
+ {"version":3,"file":"check.js","sources":["../../../../../../../src/server/authenticate/admin/billing/check.ts"],"sourcesContent":["import {HttpResponseError, Session} from '@shopify/shopify-api';\n\nimport type {BasicParams} from '../../../types';\nimport {redirectToAuthPage} from '../helpers';\nimport type {AppConfigArg} from '../../../config-types';\nimport {invalidateAccessToken} from '../../helpers';\n\nimport type {CheckBillingOptions} from './types';\n\nexport function checkBillingFactory<Config extends AppConfigArg>(\n params: BasicParams,\n request: Request,\n session: Session,\n) {\n return async function checkBilling(\n options: CheckBillingOptions<Config> = {},\n ) {\n const {api, logger} = params;\n\n logger.debug('Checking billing plans', {shop: session.shop, ...options});\n\n try {\n return await api.billing.check({\n session,\n plans: options.plans as string[],\n isTest: options.isTest,\n returnObject: true,\n });\n } catch (error) {\n if (error instanceof HttpResponseError && error.response.code === 401) {\n logger.debug('API token was invalid, redirecting to OAuth', {\n shop: session.shop,\n });\n await invalidateAccessToken(params, session);\n throw await redirectToAuthPage(params, request, session.shop);\n } else {\n throw error;\n }\n }\n };\n}\n"],"names":["HttpResponseError","invalidateAccessToken","redirectToAuthPage"],"mappings":";;;;;;;;;SASgB,mBAAmB,CACjC,MAAmB,EACnB,OAAgB,EAChB,OAAgB,EAAA;AAEhB,IAAA,OAAO,eAAe,YAAY,CAChC,UAAuC,EAAE,EAAA;AAEzC,QAAA,MAAM,EAAC,GAAG,EAAE,MAAM,EAAC,GAAG,MAAM;AAE5B,QAAA,MAAM,CAAC,KAAK,CAAC,wBAAwB,EAAE,EAAC,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,GAAG,OAAO,EAAC,CAAC;AAExE,QAAA,IAAI;AACF,YAAA,OAAO,MAAM,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC;gBAC7B,OAAO;gBACP,KAAK,EAAE,OAAO,CAAC,KAAiB;gBAChC,MAAM,EAAE,OAAO,CAAC,MAAM;AACtB,gBAAA,YAAY,EAAE,IAAI;AACnB,aAAA,CAAC;QACJ;QAAE,OAAO,KAAK,EAAE;AACd,YAAA,IAAI,KAAK,YAAYA,4BAAiB,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,KAAK,GAAG,EAAE;AACrE,gBAAA,MAAM,CAAC,KAAK,CAAC,6CAA6C,EAAE;oBAC1D,IAAI,EAAE,OAAO,CAAC,IAAI;AACnB,iBAAA,CAAC;AACF,gBAAA,MAAMC,2CAAqB,CAAC,MAAM,EAAE,OAAO,CAAC;gBAC5C,MAAM,MAAMC,qCAAkB,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC;YAC/D;iBAAO;AACL,gBAAA,MAAM,KAAK;YACb;QACF;AACF,IAAA,CAAC;AACH;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"create-usage-record.js","sources":["../../../../../../../src/server/authenticate/admin/billing/create-usage-record.ts"],"sourcesContent":[null],"names":["HttpResponseError","invalidateAccessToken","redirectToAuthPage"],"mappings":";;;;;;;;;SAQgB,wBAAwB,CACtC,MAAmB,EACnB,OAAgB,EAChB,OAAgB,EAAA;AAEhB,IAAA,OAAO,eAAe,iBAAiB,CAAC,OAAiC,EAAA;AACvE,QAAA,MAAM,EAAC,GAAG,EAAE,MAAM,EAAC,GAAG,MAAM;AAE5B,QAAA,MAAM,CAAC,KAAK,CAAC,qBAAqB,EAAE,EAAC,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,GAAG,OAAO,EAAC,CAAC;AAErE,QAAA,IAAI;AACF,YAAA,OAAO,MAAM,GAAG,CAAC,OAAO,CAAC,iBAAiB,CAAC;AACzC,gBAAA,GAAG,OAAO;gBACV,OAAO;AACR,aAAA,CAAC;;QACF,OAAO,KAAK,EAAE;AACd,YAAA,IAAI,KAAK,YAAYA,4BAAiB,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,KAAK,GAAG,EAAE;AACrE,gBAAA,MAAM,CAAC,KAAK,CAAC,6CAA6C,EAAE;oBAC1D,IAAI,EAAE,OAAO,CAAC,IAAI;AACnB,iBAAA,CAAC;AACF,gBAAA,MAAMC,2CAAqB,CAAC,MAAM,EAAE,OAAO,CAAC;gBAC5C,MAAM,MAAMC,qCAAkB,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC;;iBACxD;AACL,gBAAA,MAAM,KAAK;;;AAGjB,KAAC;AACH;;;;"}
1
+ {"version":3,"file":"create-usage-record.js","sources":["../../../../../../../src/server/authenticate/admin/billing/create-usage-record.ts"],"sourcesContent":["import {HttpResponseError, Session} from '@shopify/shopify-api';\n\nimport type {BasicParams} from '../../../types';\nimport {redirectToAuthPage} from '../helpers';\nimport {invalidateAccessToken} from '../../helpers';\n\nimport type {CreateUsageRecordOptions} from './types';\n\nexport function createUsageRecordFactory(\n params: BasicParams,\n request: Request,\n session: Session,\n) {\n return async function createUsageRecord(options: CreateUsageRecordOptions) {\n const {api, logger} = params;\n\n logger.debug('Create usage record', {shop: session.shop, ...options});\n\n try {\n return await api.billing.createUsageRecord({\n ...options,\n session,\n });\n } catch (error) {\n if (error instanceof HttpResponseError && error.response.code === 401) {\n logger.debug('API token was invalid, redirecting to OAuth', {\n shop: session.shop,\n });\n await invalidateAccessToken(params, session);\n throw await redirectToAuthPage(params, request, session.shop);\n } else {\n throw error;\n }\n }\n };\n}\n"],"names":["HttpResponseError","invalidateAccessToken","redirectToAuthPage"],"mappings":";;;;;;;;;SAQgB,wBAAwB,CACtC,MAAmB,EACnB,OAAgB,EAChB,OAAgB,EAAA;AAEhB,IAAA,OAAO,eAAe,iBAAiB,CAAC,OAAiC,EAAA;AACvE,QAAA,MAAM,EAAC,GAAG,EAAE,MAAM,EAAC,GAAG,MAAM;AAE5B,QAAA,MAAM,CAAC,KAAK,CAAC,qBAAqB,EAAE,EAAC,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,GAAG,OAAO,EAAC,CAAC;AAErE,QAAA,IAAI;AACF,YAAA,OAAO,MAAM,GAAG,CAAC,OAAO,CAAC,iBAAiB,CAAC;AACzC,gBAAA,GAAG,OAAO;gBACV,OAAO;AACR,aAAA,CAAC;QACJ;QAAE,OAAO,KAAK,EAAE;AACd,YAAA,IAAI,KAAK,YAAYA,4BAAiB,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,KAAK,GAAG,EAAE;AACrE,gBAAA,MAAM,CAAC,KAAK,CAAC,6CAA6C,EAAE;oBAC1D,IAAI,EAAE,OAAO,CAAC,IAAI;AACnB,iBAAA,CAAC;AACF,gBAAA,MAAMC,2CAAqB,CAAC,MAAM,EAAE,OAAO,CAAC;gBAC5C,MAAM,MAAMC,qCAAkB,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC;YAC/D;iBAAO;AACL,gBAAA,MAAM,KAAK;YACb;QACF;AACF,IAAA,CAAC;AACH;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.js","sources":["../../../../../../../src/server/authenticate/admin/billing/helpers.ts"],"sourcesContent":[null],"names":["getAppBridgeHeaders","redirect"],"mappings":";;;;;;AAKM,SAAU,gBAAgB,CAC9B,MAAmB,EACnB,OAAgB,EAChB,GAAW,EACX,IAAY,EAAA;AAEZ,IAAA,MAAM,EAAC,MAAM,EAAE,MAAM,EAAC,GAAG,MAAM;IAE/B,MAAM,CAAC,KAAK,CAAC,wBAAwB,EAAE,EAAC,IAAI,EAAE,GAAG,EAAC,CAAC;IAEnD,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC;AACvC,IAAA,MAAM,iBAAiB,GAAG,UAAU,CAAC,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,GAAG;IACzE,MAAM,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC;IAEzD,IAAI,YAAY,EAAE;;;;;AAKhB,QAAA,MAAM,IAAI,QAAQ,CAAC,SAAS,EAAE;AAC5B,YAAA,MAAM,EAAE,GAAG;AACX,YAAA,UAAU,EAAE,cAAc;AAC1B,YAAA,OAAO,EAAEA,gDAAmB,CAAC,GAAG,CAAC;AAClC,SAAA,CAAC;;SACG,IAAI,iBAAiB,EAAE;AAC5B,QAAA,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC;YACjC,IAAI;YACJ,IAAI,EAAE,UAAU,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAE;AAC1C,YAAA,UAAU,EAAE,GAAG;AAChB,SAAA,CAAC;AAEF,QAAA,MAAMC,sBAAQ,CAAC,CAAG,EAAA,MAAM,CAAC,IAAI,CAAC,cAAc,CAAA,CAAA,EAAI,MAAM,CAAC,QAAQ,EAAE,CAAA,CAAE,CAAC;;SAC/D;;AAEL,QAAA,MAAMA,sBAAQ,CAAC,GAAG,CAAC;;AAEvB;;;;"}
1
+ {"version":3,"file":"helpers.js","sources":["../../../../../../../src/server/authenticate/admin/billing/helpers.ts"],"sourcesContent":["import {redirect} from '@remix-run/server-runtime';\n\nimport {BasicParams} from '../../../types';\nimport {getAppBridgeHeaders} from '../helpers';\n\nexport function redirectOutOfApp(\n params: BasicParams,\n request: Request,\n url: string,\n shop: string,\n): never {\n const {config, logger} = params;\n\n logger.debug('Redirecting out of app', {shop, url});\n\n const requestUrl = new URL(request.url);\n const isEmbeddedRequest = requestUrl.searchParams.get('embedded') === '1';\n const isXhrRequest = request.headers.get('authorization');\n\n if (isXhrRequest) {\n // eslint-disable-next-line no-warning-comments\n // TODO Check this with the beta flag disabled (with the bounce page)\n // Remix is not including the X-Shopify-API-Request-Failure-Reauthorize-Url when throwing a Response\n // https://github.com/remix-run/remix/issues/5356\n throw new Response(undefined, {\n status: 401,\n statusText: 'Unauthorized',\n headers: getAppBridgeHeaders(url),\n });\n } else if (isEmbeddedRequest) {\n const params = new URLSearchParams({\n shop,\n host: requestUrl.searchParams.get('host')!,\n exitIframe: url,\n });\n\n throw redirect(`${config.auth.exitIframePath}?${params.toString()}`);\n } else {\n // This will only ever happen for non-embedded apps, because the authenticator will stop before reaching this point\n throw redirect(url);\n }\n}\n"],"names":["getAppBridgeHeaders","redirect"],"mappings":";;;;;;AAKM,SAAU,gBAAgB,CAC9B,MAAmB,EACnB,OAAgB,EAChB,GAAW,EACX,IAAY,EAAA;AAEZ,IAAA,MAAM,EAAC,MAAM,EAAE,MAAM,EAAC,GAAG,MAAM;IAE/B,MAAM,CAAC,KAAK,CAAC,wBAAwB,EAAE,EAAC,IAAI,EAAE,GAAG,EAAC,CAAC;IAEnD,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC;AACvC,IAAA,MAAM,iBAAiB,GAAG,UAAU,CAAC,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,GAAG;IACzE,MAAM,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC;IAEzD,IAAI,YAAY,EAAE;;;;;AAKhB,QAAA,MAAM,IAAI,QAAQ,CAAC,SAAS,EAAE;AAC5B,YAAA,MAAM,EAAE,GAAG;AACX,YAAA,UAAU,EAAE,cAAc;AAC1B,YAAA,OAAO,EAAEA,gDAAmB,CAAC,GAAG,CAAC;AAClC,SAAA,CAAC;IACJ;SAAO,IAAI,iBAAiB,EAAE;AAC5B,QAAA,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC;YACjC,IAAI;YACJ,IAAI,EAAE,UAAU,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAE;AAC1C,YAAA,UAAU,EAAE,GAAG;AAChB,SAAA,CAAC;AAEF,QAAA,MAAMC,sBAAQ,CAAC,CAAA,EAAG,MAAM,CAAC,IAAI,CAAC,cAAc,CAAA,CAAA,EAAI,MAAM,CAAC,QAAQ,EAAE,CAAA,CAAE,CAAC;IACtE;SAAO;;AAEL,QAAA,MAAMA,sBAAQ,CAAC,GAAG,CAAC;IACrB;AACF;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"request.js","sources":["../../../../../../../src/server/authenticate/admin/billing/request.ts"],"sourcesContent":[null],"names":["HttpResponseError","invalidateAccessToken","redirectToAuthPage","redirectOutOfApp"],"mappings":";;;;;;;;;;SAcgB,qBAAqB,CACnC,MAAmB,EACnB,OAAgB,EAChB,OAAgB,EAAA;AAEhB,IAAA,OAAO,eAAe,cAAc,CAAC,EACnC,IAAI,EACJ,MAAM,EACN,SAAS,EACT,GAAG,SAAS,EACkB,EAAA;AAC9B,QAAA,MAAM,EAAC,GAAG,EAAE,MAAM,EAAC,GAAG,MAAM;AAE5B,QAAA,MAAM,CAAC,IAAI,CAAC,oBAAoB,EAAE;YAChC,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,IAAI;YACJ,MAAM;YACN,SAAS;AACV,SAAA,CAAC;AAEF,QAAA,IAAI,MAAoC;AACxC,QAAA,IAAI;AACF,YAAA,MAAM,GAAG,MAAM,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC;AACjC,gBAAA,IAAI,EAAE,IAAc;gBACpB,OAAO;gBACP,MAAM;gBACN,SAAS;AACT,gBAAA,YAAY,EAAE,IAAI;AAClB,gBAAA,GAAG,SAAS;AACb,aAAA,CAAC;;QACF,OAAO,KAAK,EAAE;AACd,YAAA,IAAI,KAAK,YAAYA,4BAAiB,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,KAAK,GAAG,EAAE;AACrE,gBAAA,MAAM,CAAC,KAAK,CAAC,6CAA6C,EAAE;oBAC1D,IAAI,EAAE,OAAO,CAAC,IAAI;AACnB,iBAAA,CAAC;AACF,gBAAA,MAAMC,2CAAqB,CAAC,MAAM,EAAE,OAAO,CAAC;gBAC5C,MAAM,MAAMC,qCAAkB,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC;;iBACxD;AACL,gBAAA,MAAM,KAAK;;;AAIf,QAAA,MAAMC,wBAAgB,CACpB,MAAM,EACN,OAAO,EACP,MAAM,CAAC,eAAe,EACtB,OAAO,CAAC,IAAI,CACb;AACH,KAAC;AACH;;;;"}
1
+ {"version":3,"file":"request.js","sources":["../../../../../../../src/server/authenticate/admin/billing/request.ts"],"sourcesContent":["import {\n BillingRequestResponseObject,\n HttpResponseError,\n Session,\n} from '@shopify/shopify-api';\n\nimport {AppConfigArg} from '../../../config-types';\nimport {BasicParams} from '../../../types';\nimport {redirectToAuthPage} from '../helpers';\nimport {invalidateAccessToken} from '../../helpers';\n\nimport {redirectOutOfApp} from './helpers';\nimport type {RequestBillingOptions} from './types';\n\nexport function requestBillingFactory<Config extends AppConfigArg>(\n params: BasicParams,\n request: Request,\n session: Session,\n) {\n return async function requestBilling({\n plan,\n isTest,\n returnUrl,\n ...overrides\n }: RequestBillingOptions<Config>): Promise<never> {\n const {api, logger} = params;\n\n logger.info('Requesting billing', {\n shop: session.shop,\n plan,\n isTest,\n returnUrl,\n });\n\n let result: BillingRequestResponseObject;\n try {\n result = await api.billing.request({\n plan: plan as string,\n session,\n isTest,\n returnUrl,\n returnObject: true,\n ...overrides,\n });\n } catch (error) {\n if (error instanceof HttpResponseError && error.response.code === 401) {\n logger.debug('API token was invalid, redirecting to OAuth', {\n shop: session.shop,\n });\n await invalidateAccessToken(params, session);\n throw await redirectToAuthPage(params, request, session.shop);\n } else {\n throw error;\n }\n }\n\n throw redirectOutOfApp(\n params,\n request,\n result.confirmationUrl,\n session.shop,\n );\n };\n}\n"],"names":["HttpResponseError","invalidateAccessToken","redirectToAuthPage","redirectOutOfApp"],"mappings":";;;;;;;;;;SAcgB,qBAAqB,CACnC,MAAmB,EACnB,OAAgB,EAChB,OAAgB,EAAA;AAEhB,IAAA,OAAO,eAAe,cAAc,CAAC,EACnC,IAAI,EACJ,MAAM,EACN,SAAS,EACT,GAAG,SAAS,EACkB,EAAA;AAC9B,QAAA,MAAM,EAAC,GAAG,EAAE,MAAM,EAAC,GAAG,MAAM;AAE5B,QAAA,MAAM,CAAC,IAAI,CAAC,oBAAoB,EAAE;YAChC,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,IAAI;YACJ,MAAM;YACN,SAAS;AACV,SAAA,CAAC;AAEF,QAAA,IAAI,MAAoC;AACxC,QAAA,IAAI;AACF,YAAA,MAAM,GAAG,MAAM,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC;AACjC,gBAAA,IAAI,EAAE,IAAc;gBACpB,OAAO;gBACP,MAAM;gBACN,SAAS;AACT,gBAAA,YAAY,EAAE,IAAI;AAClB,gBAAA,GAAG,SAAS;AACb,aAAA,CAAC;QACJ;QAAE,OAAO,KAAK,EAAE;AACd,YAAA,IAAI,KAAK,YAAYA,4BAAiB,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,KAAK,GAAG,EAAE;AACrE,gBAAA,MAAM,CAAC,KAAK,CAAC,6CAA6C,EAAE;oBAC1D,IAAI,EAAE,OAAO,CAAC,IAAI;AACnB,iBAAA,CAAC;AACF,gBAAA,MAAMC,2CAAqB,CAAC,MAAM,EAAE,OAAO,CAAC;gBAC5C,MAAM,MAAMC,qCAAkB,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC;YAC/D;iBAAO;AACL,gBAAA,MAAM,KAAK;YACb;QACF;AAEA,QAAA,MAAMC,wBAAgB,CACpB,MAAM,EACN,OAAO,EACP,MAAM,CAAC,eAAe,EACtB,OAAO,CAAC,IAAI,CACb;AACH,IAAA,CAAC;AACH;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"require.js","sources":["../../../../../../../src/server/authenticate/admin/billing/require.ts"],"sourcesContent":[null],"names":["HttpResponseError","invalidateAccessToken","redirectToAuthPage"],"mappings":";;;;;;;;;SAagB,qBAAqB,CACnC,MAAmB,EACnB,OAAgB,EAChB,OAAgB,EAAA;AAEhB,IAAA,MAAM,EAAC,GAAG,EAAE,MAAM,EAAC,GAAG,MAAM;AAE5B,IAAA,OAAO,eAAe,cAAc,CAAC,OAAsC,EAAA;AACzE,QAAA,MAAM,UAAU,GAAG;YACjB,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,MAAM,EAAE,OAAO,CAAC,MAAM;SACvB;AAED,QAAA,MAAM,CAAC,KAAK,CAAC,+BAA+B,EAAE,UAAU,CAAC;AAEzD,QAAA,IAAI,IAAgC;AACpC,QAAA,IAAI;AACF,YAAA,IAAI,GAAG,MAAM,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC;gBAC7B,OAAO;gBACP,KAAK,EAAE,OAAO,CAAC,KAAiB;gBAChC,MAAM,EAAE,OAAO,CAAC,MAAM;AACtB,gBAAA,YAAY,EAAE,IAAI;AACnB,aAAA,CAAC;;QACF,OAAO,KAAK,EAAE;AACd,YAAA,IAAI,KAAK,YAAYA,4BAAiB,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,KAAK,GAAG,EAAE;AACrE,gBAAA,MAAM,CAAC,KAAK,CAAC,6CAA6C,EAAE,UAAU,CAAC;AAEvE,gBAAA,MAAMC,2CAAqB,CAAC,MAAM,EAAE,OAAO,CAAC;gBAC5C,MAAM,MAAMC,qCAAkB,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC;;iBACxD;AACL,gBAAA,MAAM,KAAK;;;AAIf,QAAA,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE;AAC1B,YAAA,MAAM,CAAC,KAAK,CAAC,sBAAsB,EAAE,UAAU,CAAC;YAChD,MAAM,MAAM,OAAO,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;;AAGlE,QAAA,MAAM,CAAC,KAAK,CAAC,yBAAyB,EAAE,UAAU,CAAC;AAEnD,QAAA,OAAO,IAAI;AACb,KAAC;AACH;;;;"}
1
+ {"version":3,"file":"require.js","sources":["../../../../../../../src/server/authenticate/admin/billing/require.ts"],"sourcesContent":["import {\n BillingCheckResponseObject,\n HttpResponseError,\n Session,\n} from '@shopify/shopify-api';\n\nimport type {BasicParams} from '../../../types';\nimport type {AppConfigArg} from '../../../config-types';\nimport {redirectToAuthPage} from '../helpers';\nimport {invalidateAccessToken} from '../../helpers';\n\nimport type {RequireBillingOptions} from './types';\n\nexport function requireBillingFactory<Config extends AppConfigArg>(\n params: BasicParams,\n request: Request,\n session: Session,\n) {\n const {api, logger} = params;\n\n return async function requireBilling(options: RequireBillingOptions<Config>) {\n const logContext = {\n shop: session.shop,\n plans: options.plans,\n isTest: options.isTest,\n };\n\n logger.debug('Checking billing for the shop', logContext);\n\n let data: BillingCheckResponseObject;\n try {\n data = await api.billing.check({\n session,\n plans: options.plans as string[],\n isTest: options.isTest,\n returnObject: true,\n });\n } catch (error) {\n if (error instanceof HttpResponseError && error.response.code === 401) {\n logger.debug('API token was invalid, redirecting to OAuth', logContext);\n\n await invalidateAccessToken(params, session);\n throw await redirectToAuthPage(params, request, session.shop);\n } else {\n throw error;\n }\n }\n\n if (!data.hasActivePayment) {\n logger.debug('Billing check failed', logContext);\n throw await options.onFailure(new Error('Billing check failed'));\n }\n\n logger.debug('Billing check succeeded', logContext);\n\n return data;\n };\n}\n"],"names":["HttpResponseError","invalidateAccessToken","redirectToAuthPage"],"mappings":";;;;;;;;;SAagB,qBAAqB,CACnC,MAAmB,EACnB,OAAgB,EAChB,OAAgB,EAAA;AAEhB,IAAA,MAAM,EAAC,GAAG,EAAE,MAAM,EAAC,GAAG,MAAM;AAE5B,IAAA,OAAO,eAAe,cAAc,CAAC,OAAsC,EAAA;AACzE,QAAA,MAAM,UAAU,GAAG;YACjB,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,MAAM,EAAE,OAAO,CAAC,MAAM;SACvB;AAED,QAAA,MAAM,CAAC,KAAK,CAAC,+BAA+B,EAAE,UAAU,CAAC;AAEzD,QAAA,IAAI,IAAgC;AACpC,QAAA,IAAI;AACF,YAAA,IAAI,GAAG,MAAM,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC;gBAC7B,OAAO;gBACP,KAAK,EAAE,OAAO,CAAC,KAAiB;gBAChC,MAAM,EAAE,OAAO,CAAC,MAAM;AACtB,gBAAA,YAAY,EAAE,IAAI;AACnB,aAAA,CAAC;QACJ;QAAE,OAAO,KAAK,EAAE;AACd,YAAA,IAAI,KAAK,YAAYA,4BAAiB,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,KAAK,GAAG,EAAE;AACrE,gBAAA,MAAM,CAAC,KAAK,CAAC,6CAA6C,EAAE,UAAU,CAAC;AAEvE,gBAAA,MAAMC,2CAAqB,CAAC,MAAM,EAAE,OAAO,CAAC;gBAC5C,MAAM,MAAMC,qCAAkB,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC;YAC/D;iBAAO;AACL,gBAAA,MAAM,KAAK;YACb;QACF;AAEA,QAAA,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE;AAC1B,YAAA,MAAM,CAAC,KAAK,CAAC,sBAAsB,EAAE,UAAU,CAAC;YAChD,MAAM,MAAM,OAAO,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;QAClE;AAEA,QAAA,MAAM,CAAC,KAAK,CAAC,yBAAyB,EAAE,UAAU,CAAC;AAEnD,QAAA,OAAO,IAAI;AACb,IAAA,CAAC;AACH;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"update-usage-subscription-capped-amount.js","sources":["../../../../../../../src/server/authenticate/admin/billing/update-usage-subscription-capped-amount.ts"],"sourcesContent":[null],"names":["HttpResponseError","invalidateAccessToken","redirectToAuthPage","redirectOutOfApp"],"mappings":";;;;;;;;;;SAagB,8BAA8B,CAC5C,MAAmB,EACnB,OAAgB,EAChB,OAAgB,EAAA;AAEhB,IAAA,OAAO,eAAe,uBAAuB,CAC3C,OAAuC,EAAA;AAEvC,QAAA,MAAM,EAAC,GAAG,EAAE,MAAM,EAAC,GAAG,MAAM;AAE5B,QAAA,MAAM,CAAC,KAAK,CAAC,2CAA2C,EAAE;YACxD,IAAI,EAAE,OAAO,CAAC,IAAI;AAClB,YAAA,GAAG,OAAO;AACX,SAAA,CAAC;AAEF,QAAA,IAAI,MAAsC;AAC1C,QAAA,IAAI;AACF,YAAA,MAAM,GAAG,MAAM,GAAG,CAAC,OAAO,CAAC,uBAAuB,CAAC;gBACjD,OAAO;gBACP,sBAAsB,EAAE,OAAO,CAAC,sBAAsB;gBACtD,YAAY,EAAE,OAAO,CAAC,YAAY;AACnC,aAAA,CAAC;;QACF,OAAO,KAAK,EAAE;AACd,YAAA,IAAI,KAAK,YAAYA,4BAAiB,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,KAAK,GAAG,EAAE;AACrE,gBAAA,MAAM,CAAC,KAAK,CAAC,6CAA6C,EAAE;oBAC1D,IAAI,EAAE,OAAO,CAAC,IAAI;AACnB,iBAAA,CAAC;AACF,gBAAA,MAAMC,2CAAqB,CAAC,MAAM,EAAE,OAAO,CAAC;gBAC5C,MAAM,MAAMC,qCAAkB,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC;;iBACxD;AACL,gBAAA,MAAM,KAAK;;;AAIf,QAAA,MAAMC,wBAAgB,CACpB,MAAM,EACN,OAAO,EACP,MAAM,CAAC,eAAe,EACtB,OAAO,CAAC,IAAI,CACb;AACH,KAAC;AACH;;;;"}
1
+ {"version":3,"file":"update-usage-subscription-capped-amount.js","sources":["../../../../../../../src/server/authenticate/admin/billing/update-usage-subscription-capped-amount.ts"],"sourcesContent":["import {\n HttpResponseError,\n Session,\n UpdateCappedAmountConfirmation,\n} from '@shopify/shopify-api';\n\nimport type {BasicParams} from '../../../types';\nimport {redirectToAuthPage} from '../helpers';\nimport {invalidateAccessToken} from '../../helpers';\n\nimport {UpdateUsageCappedAmountOptions} from './types';\nimport {redirectOutOfApp} from './helpers';\n\nexport function updateUsageCappedAmountFactory(\n params: BasicParams,\n request: Request,\n session: Session,\n) {\n return async function updateUsageCappedAmount(\n options: UpdateUsageCappedAmountOptions,\n ): Promise<never> {\n const {api, logger} = params;\n\n logger.debug('Updating usage subscription capped amount', {\n shop: session.shop,\n ...options,\n });\n\n let result: UpdateCappedAmountConfirmation;\n try {\n result = await api.billing.updateUsageCappedAmount({\n session,\n subscriptionLineItemId: options.subscriptionLineItemId,\n cappedAmount: options.cappedAmount,\n });\n } catch (error) {\n if (error instanceof HttpResponseError && error.response.code === 401) {\n logger.debug('API token was invalid, redirecting to OAuth', {\n shop: session.shop,\n });\n await invalidateAccessToken(params, session);\n throw await redirectToAuthPage(params, request, session.shop);\n } else {\n throw error;\n }\n }\n\n throw redirectOutOfApp(\n params,\n request,\n result.confirmationUrl,\n session.shop,\n );\n };\n}\n"],"names":["HttpResponseError","invalidateAccessToken","redirectToAuthPage","redirectOutOfApp"],"mappings":";;;;;;;;;;SAagB,8BAA8B,CAC5C,MAAmB,EACnB,OAAgB,EAChB,OAAgB,EAAA;AAEhB,IAAA,OAAO,eAAe,uBAAuB,CAC3C,OAAuC,EAAA;AAEvC,QAAA,MAAM,EAAC,GAAG,EAAE,MAAM,EAAC,GAAG,MAAM;AAE5B,QAAA,MAAM,CAAC,KAAK,CAAC,2CAA2C,EAAE;YACxD,IAAI,EAAE,OAAO,CAAC,IAAI;AAClB,YAAA,GAAG,OAAO;AACX,SAAA,CAAC;AAEF,QAAA,IAAI,MAAsC;AAC1C,QAAA,IAAI;AACF,YAAA,MAAM,GAAG,MAAM,GAAG,CAAC,OAAO,CAAC,uBAAuB,CAAC;gBACjD,OAAO;gBACP,sBAAsB,EAAE,OAAO,CAAC,sBAAsB;gBACtD,YAAY,EAAE,OAAO,CAAC,YAAY;AACnC,aAAA,CAAC;QACJ;QAAE,OAAO,KAAK,EAAE;AACd,YAAA,IAAI,KAAK,YAAYA,4BAAiB,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,KAAK,GAAG,EAAE;AACrE,gBAAA,MAAM,CAAC,KAAK,CAAC,6CAA6C,EAAE;oBAC1D,IAAI,EAAE,OAAO,CAAC,IAAI;AACnB,iBAAA,CAAC;AACF,gBAAA,MAAMC,2CAAqB,CAAC,MAAM,EAAE,OAAO,CAAC;gBAC5C,MAAM,MAAMC,qCAAkB,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC;YAC/D;iBAAO;AACL,gBAAA,MAAM,KAAK;YACb;QACF;AAEA,QAAA,MAAMC,wBAAgB,CACpB,MAAM,EACN,OAAO,EACP,MAAM,CAAC,eAAe,EACtB,OAAO,CAAC,IAAI,CACb;AACH,IAAA,CAAC;AACH;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"begin-auth.js","sources":["../../../../../../../src/server/authenticate/admin/helpers/begin-auth.ts"],"sourcesContent":[null],"names":[],"mappings":";;AAEO,eAAe,SAAS,CAC7B,MAAmB,EACnB,OAAgB,EAChB,QAAiB,EACjB,IAAY,EAAA;AAEZ,IAAA,MAAM,EAAC,GAAG,EAAE,MAAM,EAAC,GAAG,MAAM;AAE5B,IAAA,MAAM,MAAM,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC;QACzB,IAAI;AACJ,QAAA,YAAY,EAAE,MAAM,CAAC,IAAI,CAAC,YAAY;QACtC,QAAQ;AACR,QAAA,UAAU,EAAE,OAAO;AACpB,KAAA,CAAC;AACJ;;;;"}
1
+ {"version":3,"file":"begin-auth.js","sources":["../../../../../../../src/server/authenticate/admin/helpers/begin-auth.ts"],"sourcesContent":["import type {BasicParams} from '../../../types';\n\nexport async function beginAuth(\n params: BasicParams,\n request: Request,\n isOnline: boolean,\n shop: string,\n): Promise<never> {\n const {api, config} = params;\n\n throw await api.auth.begin({\n shop,\n callbackPath: config.auth.callbackPath,\n isOnline,\n rawRequest: request,\n });\n}\n"],"names":[],"mappings":";;AAEO,eAAe,SAAS,CAC7B,MAAmB,EACnB,OAAgB,EAChB,QAAiB,EACjB,IAAY,EAAA;AAEZ,IAAA,MAAM,EAAC,GAAG,EAAE,MAAM,EAAC,GAAG,MAAM;AAE5B,IAAA,MAAM,MAAM,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC;QACzB,IAAI;AACJ,QAAA,YAAY,EAAE,MAAM,CAAC,IAAI,CAAC,YAAY;QACtC,QAAQ;AACR,QAAA,UAAU,EAAE,OAAO;AACpB,KAAA,CAAC;AACJ;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"create-admin-api-context.js","sources":["../../../../../../../src/server/authenticate/admin/helpers/create-admin-api-context.ts"],"sourcesContent":[null],"names":["adminClientFactory"],"mappings":";;;;SAUgB,qBAAqB,CAInC,OAAgB,EAChB,MAAmB,EACnB,iBAAyC,EAAA;AAEzC,IAAA,OAAOA,0BAAkB,CAAuB;QAC9C,OAAO;QACP,MAAM;QACN,iBAAiB;AAClB,KAAA,CAAC;AACJ;;;;"}
1
+ {"version":3,"file":"create-admin-api-context.js","sources":["../../../../../../../src/server/authenticate/admin/helpers/create-admin-api-context.ts"],"sourcesContent":["import {Session, ShopifyRestResources} from '@shopify/shopify-api';\n\nimport {AppConfigArg} from '../../../config-types';\nimport type {BasicParams} from '../../../types';\nimport {\n AdminApiContext,\n HandleAdminClientError,\n adminClientFactory,\n} from '../../../clients/admin';\n\nexport function createAdminApiContext<\n ConfigArg extends AppConfigArg,\n Resources extends ShopifyRestResources = ShopifyRestResources,\n>(\n session: Session,\n params: BasicParams,\n handleClientError: HandleAdminClientError,\n): AdminApiContext<ConfigArg, Resources> {\n return adminClientFactory<ConfigArg, Resources>({\n session,\n params,\n handleClientError,\n });\n}\n"],"names":["adminClientFactory"],"mappings":";;;;SAUgB,qBAAqB,CAInC,OAAgB,EAChB,MAAmB,EACnB,iBAAyC,EAAA;AAEzC,IAAA,OAAOA,0BAAkB,CAAuB;QAC9C,OAAO;QACP,MAAM;QACN,iBAAiB;AAClB,KAAA,CAAC;AACJ;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"ensure-app-is-embedded-if-required.js","sources":["../../../../../../../src/server/authenticate/admin/helpers/ensure-app-is-embedded-if-required.ts"],"sourcesContent":[null],"names":["redirectToShopifyOrAppRoot"],"mappings":";;;;AAIa,MAAA,6BAA6B,GAAG,OAC3C,MAAmB,EACnB,OAAgB,KACd;IACF,MAAM,EAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAC,GAAG,MAAM;IACpC,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC;IAEhC,MAAM,IAAI,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAE;AAE1C,IAAA,IAAI,GAAG,CAAC,MAAM,CAAC,aAAa,IAAI,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,GAAG,EAAE;QACxE,MAAM,CAAC,KAAK,CAAC,6CAA6C,EAAE,EAAC,IAAI,EAAC,CAAC;AACnE,QAAA,MAAMA,qDAA0B,CAAC,OAAO,EAAE,EAAC,GAAoB,CAAA,CAAC;;AAEpE;;;;"}
1
+ {"version":3,"file":"ensure-app-is-embedded-if-required.js","sources":["../../../../../../../src/server/authenticate/admin/helpers/ensure-app-is-embedded-if-required.ts"],"sourcesContent":["import {BasicParams} from '../../../types';\n\nimport {redirectToShopifyOrAppRoot} from './redirect-to-shopify-or-app-root';\n\nexport const ensureAppIsEmbeddedIfRequired = async (\n params: BasicParams,\n request: Request,\n) => {\n const {api, logger, config} = params;\n const url = new URL(request.url);\n\n const shop = url.searchParams.get('shop')!;\n\n if (api.config.isEmbeddedApp && url.searchParams.get('embedded') !== '1') {\n logger.debug('App is not embedded, redirecting to Shopify', {shop});\n await redirectToShopifyOrAppRoot(request, {api, logger, config});\n }\n};\n"],"names":["redirectToShopifyOrAppRoot"],"mappings":";;;;AAIO,MAAM,6BAA6B,GAAG,OAC3C,MAAmB,EACnB,OAAgB,KACd;IACF,MAAM,EAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAC,GAAG,MAAM;IACpC,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC;IAEhC,MAAM,IAAI,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAE;AAE1C,IAAA,IAAI,GAAG,CAAC,MAAM,CAAC,aAAa,IAAI,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,GAAG,EAAE;QACxE,MAAM,CAAC,KAAK,CAAC,6CAA6C,EAAE,EAAC,IAAI,EAAC,CAAC;AACnE,QAAA,MAAMA,qDAA0B,CAAC,OAAO,EAAE,EAAC,GAAmB,CAAC,CAAC;IAClE;AACF;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"ensure-session-token-search-param-if-required.js","sources":["../../../../../../../src/server/authenticate/admin/helpers/ensure-session-token-search-param-if-required.ts"],"sourcesContent":[null],"names":["redirectToBouncePage"],"mappings":";;;;AAIA,MAAM,mBAAmB,GAAG,UAAU;AAEzB,MAAA,uCAAuC,GAAG,OACrD,MAAmB,EACnB,OAAgB,KACd;AACF,IAAA,MAAM,EAAC,GAAG,EAAE,MAAM,EAAC,GAAG,MAAM;IAC5B,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC;IAEhC,MAAM,IAAI,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAE;IAC1C,MAAM,uBAAuB,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,mBAAmB,CAAC;AACzE,IAAA,MAAM,UAAU,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,GAAG;IAE3D,IAAI,GAAG,CAAC,MAAM,CAAC,aAAa,IAAI,UAAU,IAAI,CAAC,uBAAuB,EAAE;QACtE,MAAM,CAAC,KAAK,CACV,8DAA8D,EAC9D,EAAC,IAAI,EAAC,CACP;AACD,QAAAA,yCAAoB,CAAC,MAAM,EAAE,GAAG,CAAC;;AAErC;;;;"}
1
+ {"version":3,"file":"ensure-session-token-search-param-if-required.js","sources":["../../../../../../../src/server/authenticate/admin/helpers/ensure-session-token-search-param-if-required.ts"],"sourcesContent":["import {BasicParams} from '../../../types';\n\nimport {redirectToBouncePage} from './redirect-to-bounce-page';\n\nconst SESSION_TOKEN_PARAM = 'id_token';\n\nexport const ensureSessionTokenSearchParamIfRequired = async (\n params: BasicParams,\n request: Request,\n) => {\n const {api, logger} = params;\n const url = new URL(request.url);\n\n const shop = url.searchParams.get('shop')!;\n const searchParamSessionToken = url.searchParams.get(SESSION_TOKEN_PARAM);\n const isEmbedded = url.searchParams.get('embedded') === '1';\n\n if (api.config.isEmbeddedApp && isEmbedded && !searchParamSessionToken) {\n logger.debug(\n 'Missing session token in search params, going to bounce page',\n {shop},\n );\n redirectToBouncePage(params, url);\n }\n};\n"],"names":["redirectToBouncePage"],"mappings":";;;;AAIA,MAAM,mBAAmB,GAAG,UAAU;AAE/B,MAAM,uCAAuC,GAAG,OACrD,MAAmB,EACnB,OAAgB,KACd;AACF,IAAA,MAAM,EAAC,GAAG,EAAE,MAAM,EAAC,GAAG,MAAM;IAC5B,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC;IAEhC,MAAM,IAAI,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAE;IAC1C,MAAM,uBAAuB,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,mBAAmB,CAAC;AACzE,IAAA,MAAM,UAAU,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,GAAG;IAE3D,IAAI,GAAG,CAAC,MAAM,CAAC,aAAa,IAAI,UAAU,IAAI,CAAC,uBAAuB,EAAE;QACtE,MAAM,CAAC,KAAK,CACV,8DAA8D,EAC9D,EAAC,IAAI,EAAC,CACP;AACD,QAAAA,yCAAoB,CAAC,MAAM,EAAE,GAAG,CAAC;IACnC;AACF;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"handle-client-error.js","sources":["../../../../../../../src/server/authenticate/admin/helpers/handle-client-error.ts"],"sourcesContent":[null],"names":["HttpResponseError"],"mappings":";;;;SAKgB,wBAAwB,CAAC,EACvC,OAAO,EACP,OAAO,GACkB,EAAA;IACzB,OAAO,eAAe,iBAAiB,CAAC,EACtC,KAAK,EACL,MAAM,EACN,OAAO,GACR,EAAA;AACC,QAAA,IAAI,KAAK,YAAYA,4BAAiB,KAAK,IAAI,EAAE;AAC/C,YAAA,MAAM,CAAC,MAAM,CAAC,KAAK,CACjB,CAAA,mCAAA,EAAsC,KAAK,CAAC,OAAO,EAAE,EACrD,EAAC,IAAI,EAAE,OAAO,CAAC,IAAI,EAAC,CACrB;AACD,YAAA,MAAM,KAAK;;QAGb,MAAM,CAAC,MAAM,CAAC,KAAK,CACjB,4CAA4C,KAAK,CAAC,OAAO,CAAA,CAAE,EAC3D;YACE,IAAI,EAAE,OAAO,CAAC,IAAI;AAClB,YAAA,IAAI,EAAE,KAAK,CAAC,QAAQ,CAAC,IAAI;AACzB,YAAA,UAAU,EAAE,KAAK,CAAC,QAAQ,CAAC,UAAU;YACrC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC;AAC1C,SAAA,CACF;QAED,IAAI,OAAO,EAAE;YACX,MAAM,OAAO,CAAC,EAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAC,CAAC;;;AAI1C,QAAA,MAAM,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;AACtD,YAAA,MAAM,EAAE,KAAK,CAAC,QAAQ,CAAC,IAAI;AAC3B,YAAA,OAAO,EAAE;gBACP,cAAc,EAAE,KAAK,CAAC,QAAQ,CAAC,OAAQ,CAAC,cAAc,CAAW;AAClE,aAAA;AACF,SAAA,CAAC;AACJ,KAAC;AACH;;;;"}
1
+ {"version":3,"file":"handle-client-error.js","sources":["../../../../../../../src/server/authenticate/admin/helpers/handle-client-error.ts"],"sourcesContent":["import {HttpResponseError} from '@shopify/shopify-api';\n\nimport type {HandleAdminClientError} from '../../../clients/admin/types';\nimport {HandleClientErrorOptions} from '../strategies/types';\n\nexport function handleClientErrorFactory({\n request,\n onError,\n}: HandleClientErrorOptions): HandleAdminClientError {\n return async function handleClientError({\n error,\n params,\n session,\n }): Promise<never> {\n if (error instanceof HttpResponseError !== true) {\n params.logger.debug(\n `Got a response error from the API: ${error.message}`,\n {shop: session.shop},\n );\n throw error;\n }\n\n params.logger.debug(\n `Got an HTTP response error from the API: ${error.message}`,\n {\n shop: session.shop,\n code: error.response.code,\n statusText: error.response.statusText,\n body: JSON.stringify(error.response.body),\n },\n );\n\n if (onError) {\n await onError({request, session, error});\n }\n\n // forward a minimal copy of the upstream HTTP response instead of an Error:\n throw new Response(JSON.stringify(error.response.body), {\n status: error.response.code,\n headers: {\n 'Content-Type': error.response.headers!['Content-Type'] as string,\n },\n });\n };\n}\n"],"names":["HttpResponseError"],"mappings":";;;;SAKgB,wBAAwB,CAAC,EACvC,OAAO,EACP,OAAO,GACkB,EAAA;IACzB,OAAO,eAAe,iBAAiB,CAAC,EACtC,KAAK,EACL,MAAM,EACN,OAAO,GACR,EAAA;AACC,QAAA,IAAI,KAAK,YAAYA,4BAAiB,KAAK,IAAI,EAAE;AAC/C,YAAA,MAAM,CAAC,MAAM,CAAC,KAAK,CACjB,CAAA,mCAAA,EAAsC,KAAK,CAAC,OAAO,EAAE,EACrD,EAAC,IAAI,EAAE,OAAO,CAAC,IAAI,EAAC,CACrB;AACD,YAAA,MAAM,KAAK;QACb;QAEA,MAAM,CAAC,MAAM,CAAC,KAAK,CACjB,4CAA4C,KAAK,CAAC,OAAO,CAAA,CAAE,EAC3D;YACE,IAAI,EAAE,OAAO,CAAC,IAAI;AAClB,YAAA,IAAI,EAAE,KAAK,CAAC,QAAQ,CAAC,IAAI;AACzB,YAAA,UAAU,EAAE,KAAK,CAAC,QAAQ,CAAC,UAAU;YACrC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC;AAC1C,SAAA,CACF;QAED,IAAI,OAAO,EAAE;YACX,MAAM,OAAO,CAAC,EAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAC,CAAC;QAC1C;;AAGA,QAAA,MAAM,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;AACtD,YAAA,MAAM,EAAE,KAAK,CAAC,QAAQ,CAAC,IAAI;AAC3B,YAAA,OAAO,EAAE;gBACP,cAAc,EAAE,KAAK,CAAC,QAAQ,CAAC,OAAQ,CAAC,cAAc,CAAW;AAClE,aAAA;AACF,SAAA,CAAC;AACJ,IAAA,CAAC;AACH;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"redirect-to-auth-page.js","sources":["../../../../../../../src/server/authenticate/admin/helpers/redirect-to-auth-page.ts"],"sourcesContent":[null],"names":["redirectWithAppBridgeHeaders","redirectWithExitIframe","beginAuth"],"mappings":";;;;;;AAMO,eAAe,kBAAkB,CACtC,MAAmB,EACnB,OAAgB,EAChB,IAAY,EACZ,QAAQ,GAAG,KAAK,EAAA;AAEhB,IAAA,MAAM,EAAC,MAAM,EAAC,GAAG,MAAM;IAEvB,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC;AAChC,IAAA,MAAM,iBAAiB,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,GAAG;IAClE,MAAM,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC;IAEzD,IAAI,YAAY,EAAE;AAChB,QAAA,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC;QAC5D,WAAW,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC;AAC1C,QAAAA,yDAA4B,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC;;SAC/C,IAAI,iBAAiB,EAAE;AAC5B,QAAAC,6CAAsB,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC;;SACxC;QACL,MAAM,MAAMC,mBAAS,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC;;AAE1D;;;;"}
1
+ {"version":3,"file":"redirect-to-auth-page.js","sources":["../../../../../../../src/server/authenticate/admin/helpers/redirect-to-auth-page.ts"],"sourcesContent":["import type {BasicParams} from '../../../types';\n\nimport {beginAuth} from './begin-auth';\nimport {redirectWithExitIframe} from './redirect-with-exitiframe';\nimport {redirectWithAppBridgeHeaders} from './redirect-with-app-bridge-headers';\n\nexport async function redirectToAuthPage(\n params: BasicParams,\n request: Request,\n shop: string,\n isOnline = false,\n): Promise<never> {\n const {config} = params;\n\n const url = new URL(request.url);\n const isEmbeddedRequest = url.searchParams.get('embedded') === '1';\n const isXhrRequest = request.headers.get('authorization');\n\n if (isXhrRequest) {\n const redirectUri = new URL(config.auth.path, config.appUrl);\n redirectUri.searchParams.set('shop', shop);\n redirectWithAppBridgeHeaders(redirectUri.toString());\n } else if (isEmbeddedRequest) {\n redirectWithExitIframe(params, request, shop);\n } else {\n throw await beginAuth(params, request, isOnline, shop);\n }\n}\n"],"names":["redirectWithAppBridgeHeaders","redirectWithExitIframe","beginAuth"],"mappings":";;;;;;AAMO,eAAe,kBAAkB,CACtC,MAAmB,EACnB,OAAgB,EAChB,IAAY,EACZ,QAAQ,GAAG,KAAK,EAAA;AAEhB,IAAA,MAAM,EAAC,MAAM,EAAC,GAAG,MAAM;IAEvB,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC;AAChC,IAAA,MAAM,iBAAiB,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,GAAG;IAClE,MAAM,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC;IAEzD,IAAI,YAAY,EAAE;AAChB,QAAA,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC;QAC5D,WAAW,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC;AAC1C,QAAAA,yDAA4B,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC;IACtD;SAAO,IAAI,iBAAiB,EAAE;AAC5B,QAAAC,6CAAsB,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC;IAC/C;SAAO;QACL,MAAM,MAAMC,mBAAS,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC;IACxD;AACF;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"redirect-to-bounce-page.js","sources":["../../../../../../../src/server/authenticate/admin/helpers/redirect-to-bounce-page.ts"],"sourcesContent":[null],"names":["redirect"],"mappings":";;;;MAIa,oBAAoB,GAAG,CAAC,MAAmB,EAAE,GAAQ,KAAW;AAC3E,IAAA,MAAM,EAAC,MAAM,EAAC,GAAG,MAAM;;;AAIvB,IAAA,MAAM,YAAY,GAAG,GAAG,CAAC,YAAY;AACrC,IAAA,YAAY,CAAC,MAAM,CAAC,UAAU,CAAC;IAC/B,YAAY,CAAC,GAAG,CACd,gBAAgB,EAChB,CAAG,EAAA,MAAM,CAAC,MAAM,CAAA,EAAG,GAAG,CAAC,QAAQ,IAAI,YAAY,CAAC,QAAQ,EAAE,CAAA,CAAE,CAC7D;;;;AAKD,IAAA,MAAMA,sBAAQ,CACZ,CAAG,EAAA,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAA,CAAA,EAAI,YAAY,CAAC,QAAQ,EAAE,CAAA,CAAE,CAClE;AACH;;;;"}
1
+ {"version":3,"file":"redirect-to-bounce-page.js","sources":["../../../../../../../src/server/authenticate/admin/helpers/redirect-to-bounce-page.ts"],"sourcesContent":["import {redirect} from '@remix-run/server-runtime';\n\nimport {BasicParams} from '../../../types';\n\nexport const redirectToBouncePage = (params: BasicParams, url: URL): never => {\n const {config} = params;\n\n // Make sure we always point to the configured app URL so it also works behind reverse proxies (that alter the Host\n // header).\n const searchParams = url.searchParams;\n searchParams.delete('id_token');\n searchParams.set(\n 'shopify-reload',\n `${config.appUrl}${url.pathname}?${searchParams.toString()}`,\n );\n\n // eslint-disable-next-line no-warning-comments\n // TODO Make sure this works on chrome without a tunnel (weird HTTPS redirect issue)\n // https://github.com/orgs/Shopify/projects/6899/views/1?pane=issue&itemId=28376650\n throw redirect(\n `${config.auth.patchSessionTokenPath}?${searchParams.toString()}`,\n );\n};\n"],"names":["redirect"],"mappings":";;;;MAIa,oBAAoB,GAAG,CAAC,MAAmB,EAAE,GAAQ,KAAW;AAC3E,IAAA,MAAM,EAAC,MAAM,EAAC,GAAG,MAAM;;;AAIvB,IAAA,MAAM,YAAY,GAAG,GAAG,CAAC,YAAY;AACrC,IAAA,YAAY,CAAC,MAAM,CAAC,UAAU,CAAC;IAC/B,YAAY,CAAC,GAAG,CACd,gBAAgB,EAChB,CAAA,EAAG,MAAM,CAAC,MAAM,CAAA,EAAG,GAAG,CAAC,QAAQ,IAAI,YAAY,CAAC,QAAQ,EAAE,CAAA,CAAE,CAC7D;;;;AAKD,IAAA,MAAMA,sBAAQ,CACZ,CAAA,EAAG,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAA,CAAA,EAAI,YAAY,CAAC,QAAQ,EAAE,CAAA,CAAE,CAClE;AACH;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"redirect-to-install-page.js","sources":["../../../../../../../src/server/authenticate/admin/helpers/redirect-to-install-page.ts"],"sourcesContent":[null],"names":["redirectWithAppBridgeHeaders","remixRedirect"],"mappings":";;;;;AAMO,eAAe,qBAAqB,CACzC,MAAmB,EACnB,IAAY,EACZ,cAAA,GAA2B,EAAE,EAAA;IAE7B,MAAM,UAAU,GAAG,eAAe,CAAC,MAAM,EAAE,IAAI,EAAE,cAAc,CAAC;AAChE,IAAA,IAAI,MAAM,CAAC,MAAM,CAAC,aAAa,EAAE;AAC/B,QAAA,MAAMA,yDAA4B,CAAC,UAAU,CAAC;;SACzC;AACL,QAAA,MAAMC,sBAAa,CAAC,UAAU,CAAC;;AAEnC;AAEA,SAAS,eAAe,CACtB,MAAmB,EACnB,IAAY,EACZ,iBAA2B,EAAE,EAAA;IAE7B,MAAM,cAAc,GAAG,mBAAmB,CAAC,MAAM,EAAE,IAAI,CAAC;AACxD,IAAA,cAAc,CAAC,MAAM,GAAG,qBAAqB,CAC3C,MAAM,EACN,cAAc,CACf,CAAC,QAAQ,EAAE;IACZ,OAAO,cAAc,CAAC,IAAI;AAC5B;AAEA,SAAS,mBAAmB,CAAC,EAAC,GAAG,EAAc,EAAE,IAAY,EAAA;AAC3D,IAAA,MAAM,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC;AACpD,IAAA,OAAO,IAAI,GAAG,CAAC,WAAW,SAAS,CAAA,oBAAA,CAAsB,CAAC;AAC5D;AAEA,SAAS,qBAAqB,CAC5B,EAAC,MAAM,EAAc,EACrB,iBAA2B,EAAE,EAAA;IAE7B,MAAM,mBAAmB,GACvB,cAAc,IAAI,cAAc,CAAC,MAAM,GAAG;UACtC,EAAC,eAAe,EAAE,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC;UAC1C,SAAS;AAEf,IAAA,MAAM,KAAK,GAAG;QACZ,SAAS,EAAE,MAAM,CAAC,MAAM;QACxB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE;AACtC,QAAA,GAAG,mBAAmB;KACvB;AACD,IAAA,OAAO,IAAI,eAAe,CAAC,KAAK,CAAC;AACnC;;;;"}
1
+ {"version":3,"file":"redirect-to-install-page.js","sources":["../../../../../../../src/server/authenticate/admin/helpers/redirect-to-install-page.ts"],"sourcesContent":["import {redirect as remixRedirect} from '@remix-run/server-runtime';\n\nimport type {BasicParams} from '../../../types';\n\nimport {redirectWithAppBridgeHeaders} from './redirect-with-app-bridge-headers';\n\nexport async function redirectToInstallPage(\n params: BasicParams,\n shop: string,\n optionalScopes: string[] = [],\n): Promise<never> {\n const installUrl = buildInstallUrl(params, shop, optionalScopes);\n if (params.config.isEmbeddedApp) {\n throw redirectWithAppBridgeHeaders(installUrl);\n } else {\n throw remixRedirect(installUrl);\n }\n}\n\nfunction buildInstallUrl(\n params: BasicParams,\n shop: string,\n optionalScopes: string[] = [],\n) {\n const baseInstallUrl = buildBaseInstallUrl(params, shop);\n baseInstallUrl.search = buildParamsInstallUrl(\n params,\n optionalScopes,\n ).toString();\n return baseInstallUrl.href;\n}\n\nfunction buildBaseInstallUrl({api}: BasicParams, shop: string) {\n const cleanShop = api.utils.sanitizeShop(shop, true);\n return new URL(`https://${cleanShop}/admin/oauth/install`);\n}\n\nfunction buildParamsInstallUrl(\n {config}: BasicParams,\n optionalScopes: string[] = [],\n) {\n const optionalScopesParam =\n optionalScopes && optionalScopes.length > 0\n ? {optional_scopes: optionalScopes.join(',')}\n : undefined;\n\n const query = {\n client_id: config.apiKey,\n scope: config.scopes?.toString() || '',\n ...optionalScopesParam,\n };\n return new URLSearchParams(query);\n}\n"],"names":["redirectWithAppBridgeHeaders","remixRedirect"],"mappings":";;;;;AAMO,eAAe,qBAAqB,CACzC,MAAmB,EACnB,IAAY,EACZ,cAAA,GAA2B,EAAE,EAAA;IAE7B,MAAM,UAAU,GAAG,eAAe,CAAC,MAAM,EAAE,IAAI,EAAE,cAAc,CAAC;AAChE,IAAA,IAAI,MAAM,CAAC,MAAM,CAAC,aAAa,EAAE;AAC/B,QAAA,MAAMA,yDAA4B,CAAC,UAAU,CAAC;IAChD;SAAO;AACL,QAAA,MAAMC,sBAAa,CAAC,UAAU,CAAC;IACjC;AACF;AAEA,SAAS,eAAe,CACtB,MAAmB,EACnB,IAAY,EACZ,iBAA2B,EAAE,EAAA;IAE7B,MAAM,cAAc,GAAG,mBAAmB,CAAC,MAAM,EAAE,IAAI,CAAC;AACxD,IAAA,cAAc,CAAC,MAAM,GAAG,qBAAqB,CAC3C,MAAM,EACN,cAAc,CACf,CAAC,QAAQ,EAAE;IACZ,OAAO,cAAc,CAAC,IAAI;AAC5B;AAEA,SAAS,mBAAmB,CAAC,EAAC,GAAG,EAAc,EAAE,IAAY,EAAA;AAC3D,IAAA,MAAM,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC;AACpD,IAAA,OAAO,IAAI,GAAG,CAAC,WAAW,SAAS,CAAA,oBAAA,CAAsB,CAAC;AAC5D;AAEA,SAAS,qBAAqB,CAC5B,EAAC,MAAM,EAAc,EACrB,iBAA2B,EAAE,EAAA;IAE7B,MAAM,mBAAmB,GACvB,cAAc,IAAI,cAAc,CAAC,MAAM,GAAG;UACtC,EAAC,eAAe,EAAE,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC;UAC1C,SAAS;AAEf,IAAA,MAAM,KAAK,GAAG;QACZ,SAAS,EAAE,MAAM,CAAC,MAAM;QACxB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE;AACtC,QAAA,GAAG,mBAAmB;KACvB;AACD,IAAA,OAAO,IAAI,eAAe,CAAC,KAAK,CAAC;AACnC;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"redirect-to-shopify-or-app-root.js","sources":["../../../../../../../src/server/authenticate/admin/helpers/redirect-to-shopify-or-app-root.ts"],"sourcesContent":[null],"names":["redirect"],"mappings":";;;;AAIO,eAAe,0BAA0B,CAC9C,OAAgB,EAChB,MAAmB,EACnB,eAAyB,EAAA;AAEzB,IAAA,MAAM,EAAC,GAAG,EAAC,GAAG,MAAM;IACpB,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC;AAEhC,IAAA,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAE,CAAE;AACnE,IAAA,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAE,CAAE;AAEnE,IAAA,MAAM,WAAW,GAAG,GAAG,CAAC,MAAM,CAAC;AAC7B,UAAE,MAAM,GAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,EAAC,UAAU,EAAE,OAAO,EAAC;UACtD,UAAU,IAAI,CAAA,MAAA,EAAS,kBAAkB,CAAC,IAAI,CAAC,CAAA,CAAE;IAErD,MAAMA,sBAAQ,CAAC,WAAW,EAAE,EAAC,OAAO,EAAE,eAAe,EAAC,CAAC;AACzD;;;;"}
1
+ {"version":3,"file":"redirect-to-shopify-or-app-root.js","sources":["../../../../../../../src/server/authenticate/admin/helpers/redirect-to-shopify-or-app-root.ts"],"sourcesContent":["import {redirect} from '@remix-run/server-runtime';\n\nimport type {BasicParams} from '../../../types';\n\nexport async function redirectToShopifyOrAppRoot(\n request: Request,\n params: BasicParams,\n responseHeaders?: Headers,\n): Promise<never> {\n const {api} = params;\n const url = new URL(request.url);\n\n const host = api.utils.sanitizeHost(url.searchParams.get('host')!)!;\n const shop = api.utils.sanitizeShop(url.searchParams.get('shop')!)!;\n\n const redirectUrl = api.config.isEmbeddedApp\n ? await api.auth.getEmbeddedAppUrl({rawRequest: request})\n : `/?shop=${shop}&host=${encodeURIComponent(host)}`;\n\n throw redirect(redirectUrl, {headers: responseHeaders});\n}\n"],"names":["redirect"],"mappings":";;;;AAIO,eAAe,0BAA0B,CAC9C,OAAgB,EAChB,MAAmB,EACnB,eAAyB,EAAA;AAEzB,IAAA,MAAM,EAAC,GAAG,EAAC,GAAG,MAAM;IACpB,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC;AAEhC,IAAA,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAE,CAAE;AACnE,IAAA,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAE,CAAE;AAEnE,IAAA,MAAM,WAAW,GAAG,GAAG,CAAC,MAAM,CAAC;AAC7B,UAAE,MAAM,GAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,EAAC,UAAU,EAAE,OAAO,EAAC;UACtD,UAAU,IAAI,CAAA,MAAA,EAAS,kBAAkB,CAAC,IAAI,CAAC,CAAA,CAAE;IAErD,MAAMA,sBAAQ,CAAC,WAAW,EAAE,EAAC,OAAO,EAAE,eAAe,EAAC,CAAC;AACzD;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"redirect-with-app-bridge-headers.js","sources":["../../../../../../../src/server/authenticate/admin/helpers/redirect-with-app-bridge-headers.ts"],"sourcesContent":[null],"names":["REAUTH_URL_HEADER"],"mappings":";;;;AAEM,SAAU,4BAA4B,CAAC,WAAmB,EAAA;AAC9D,IAAA,MAAM,IAAI,QAAQ,CAAC,SAAS,EAAE;AAC5B,QAAA,MAAM,EAAE,GAAG;AACX,QAAA,UAAU,EAAE,cAAc;AAC1B,QAAA,OAAO,EAAE,mBAAmB,CAAC,WAAW,CAAC;AAC1C,KAAA,CAAC;AACJ;AAEM,SAAU,mBAAmB,CAAC,GAAW,EAAA;IAC7C,OAAO,IAAI,OAAO,CAAC,EAAC,CAACA,wBAAiB,GAAG,GAAG,EAAC,CAAC;AAChD;;;;;"}
1
+ {"version":3,"file":"redirect-with-app-bridge-headers.js","sources":["../../../../../../../src/server/authenticate/admin/helpers/redirect-with-app-bridge-headers.ts"],"sourcesContent":["import {REAUTH_URL_HEADER} from '../../const';\n\nexport function redirectWithAppBridgeHeaders(redirectUri: string): never {\n throw new Response(undefined, {\n status: 401,\n statusText: 'Unauthorized',\n headers: getAppBridgeHeaders(redirectUri),\n });\n}\n\nexport function getAppBridgeHeaders(url: string) {\n return new Headers({[REAUTH_URL_HEADER]: url});\n}\n"],"names":["REAUTH_URL_HEADER"],"mappings":";;;;AAEM,SAAU,4BAA4B,CAAC,WAAmB,EAAA;AAC9D,IAAA,MAAM,IAAI,QAAQ,CAAC,SAAS,EAAE;AAC5B,QAAA,MAAM,EAAE,GAAG;AACX,QAAA,UAAU,EAAE,cAAc;AAC1B,QAAA,OAAO,EAAE,mBAAmB,CAAC,WAAW,CAAC;AAC1C,KAAA,CAAC;AACJ;AAEM,SAAU,mBAAmB,CAAC,GAAW,EAAA;IAC7C,OAAO,IAAI,OAAO,CAAC,EAAC,CAACA,wBAAiB,GAAG,GAAG,EAAC,CAAC;AAChD;;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"redirect-with-exitiframe.js","sources":["../../../../../../../src/server/authenticate/admin/helpers/redirect-with-exitiframe.ts"],"sourcesContent":[null],"names":["redirect"],"mappings":";;;;SAIgB,sBAAsB,CACpC,MAAmB,EACnB,OAAgB,EAChB,IAAY,EAAA;AAEZ,IAAA,MAAM,EAAC,GAAG,EAAE,MAAM,EAAC,GAAG,MAAM;IAC5B,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC;AAEhC,IAAA,MAAM,WAAW,GAAG,GAAG,CAAC,YAAY;AAEpC,IAAA,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAE,CAAC;AAE7D,IAAA,WAAW,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC;IAE7B,IAAI,WAAW,GAAG,CAAA,EAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAA,MAAA,EAAS,IAAI,CAAA,CAAE;IAEpD,IAAI,IAAI,EAAE;AACR,QAAA,WAAW,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC;AAC7B,QAAA,WAAW,GAAG,CAAG,EAAA,WAAW,CAAS,MAAA,EAAA,IAAI,EAAE;;AAE7C,IAAA,WAAW,CAAC,GAAG,CAAC,YAAY,EAAE,WAAW,CAAC;AAE1C,IAAA,MAAMA,sBAAQ,CAAC,CAAG,EAAA,MAAM,CAAC,IAAI,CAAC,cAAc,CAAA,CAAA,EAAI,WAAW,CAAC,QAAQ,EAAE,CAAA,CAAE,CAAC;AAC3E;;;;"}
1
+ {"version":3,"file":"redirect-with-exitiframe.js","sources":["../../../../../../../src/server/authenticate/admin/helpers/redirect-with-exitiframe.ts"],"sourcesContent":["import {redirect} from '@remix-run/server-runtime';\n\nimport type {BasicParams} from '../../../types';\n\nexport function redirectWithExitIframe(\n params: BasicParams,\n request: Request,\n shop: string,\n): never {\n const {api, config} = params;\n const url = new URL(request.url);\n\n const queryParams = url.searchParams;\n\n const host = api.utils.sanitizeHost(queryParams.get('host')!);\n\n queryParams.set('shop', shop);\n\n let destination = `${config.auth.path}?shop=${shop}`;\n\n if (host) {\n queryParams.set('host', host);\n destination = `${destination}&host=${host}`;\n }\n queryParams.set('exitIframe', destination);\n\n throw redirect(`${config.auth.exitIframePath}?${queryParams.toString()}`);\n}\n"],"names":["redirect"],"mappings":";;;;SAIgB,sBAAsB,CACpC,MAAmB,EACnB,OAAgB,EAChB,IAAY,EAAA;AAEZ,IAAA,MAAM,EAAC,GAAG,EAAE,MAAM,EAAC,GAAG,MAAM;IAC5B,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC;AAEhC,IAAA,MAAM,WAAW,GAAG,GAAG,CAAC,YAAY;AAEpC,IAAA,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAE,CAAC;AAE7D,IAAA,WAAW,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC;IAE7B,IAAI,WAAW,GAAG,CAAA,EAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAA,MAAA,EAAS,IAAI,CAAA,CAAE;IAEpD,IAAI,IAAI,EAAE;AACR,QAAA,WAAW,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC;AAC7B,QAAA,WAAW,GAAG,CAAA,EAAG,WAAW,CAAA,MAAA,EAAS,IAAI,EAAE;IAC7C;AACA,IAAA,WAAW,CAAC,GAAG,CAAC,YAAY,EAAE,WAAW,CAAC;AAE1C,IAAA,MAAMA,sBAAQ,CAAC,CAAA,EAAG,MAAM,CAAC,IAAI,CAAC,cAAc,CAAA,CAAA,EAAI,WAAW,CAAC,QAAQ,EAAE,CAAA,CAAE,CAAC;AAC3E;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"redirect.js","sources":["../../../../../../../src/server/authenticate/admin/helpers/redirect.ts"],"sourcesContent":[null],"names":["renderAppBridge","remixRedirect","redirectWithAppBridgeHeaders","getSessionTokenHeader"],"mappings":"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"}
1
+ {"version":3,"file":"redirect.js","sources":["../../../../../../../src/server/authenticate/admin/helpers/redirect.ts"],"sourcesContent":["import {\n TypedResponse,\n redirect as remixRedirect,\n} from '@remix-run/server-runtime';\n\nimport {BasicParams} from '../../../types';\nimport {getSessionTokenHeader} from '../../helpers/get-session-token-header';\n\nimport {renderAppBridge} from './render-app-bridge';\nimport {redirectWithAppBridgeHeaders} from './redirect-with-app-bridge-headers';\n\nexport type RedirectTarget = '_self' | '_parent' | '_top' | '_blank';\nexport type RedirectInit = number | (ResponseInit & {target?: RedirectTarget});\nexport type RedirectFunction = (\n url: string,\n init?: RedirectInit,\n) => TypedResponse<never>;\n\ninterface ParseURLOptions {\n params: BasicParams;\n url: string;\n base: string;\n shop: string;\n init: RedirectInit;\n}\n\ninterface ParsedURL {\n url: URL;\n target: RedirectTarget;\n}\n\nexport function redirectFactory(\n params: BasicParams,\n request: Request,\n shop: string,\n): RedirectFunction {\n const {config, logger} = params;\n\n return function redirect(url, init: RedirectInit) {\n const {searchParams} = new URL(request.url);\n const {url: parsedUrl, target} = parseURL({\n params,\n url,\n base: config.appUrl,\n shop,\n init,\n });\n\n logger.debug('Redirecting', {shop, url: parsedUrl.toString()});\n\n const isSameOrigin = parsedUrl.origin === config.appUrl;\n if (isSameOrigin || url.startsWith('/')) {\n searchParams.forEach((value, key) => {\n if (!parsedUrl.searchParams.has(key)) {\n parsedUrl.searchParams.set(key, value);\n }\n });\n }\n\n if (target === '_self') {\n if (isBounceRequest(request)) {\n throw renderAppBridge(params, request, {\n url: parsedUrl.toString(),\n target,\n });\n } else {\n return remixRedirect(parsedUrl.toString(), init);\n }\n } else if (isDataRequest(request)) {\n throw redirectWithAppBridgeHeaders(parsedUrl.toString());\n } else if (isEmbeddedRequest(request)) {\n throw renderAppBridge(params, request, {\n url: parsedUrl.toString(),\n target,\n });\n }\n return remixRedirect(url, init);\n };\n}\n\nfunction isBounceRequest(request: Request) {\n return (\n Boolean(getSessionTokenHeader(request)) &&\n request.headers.has('X-Shopify-Bounce')\n );\n}\n\nfunction isDataRequest(request: Request) {\n const isGet = request.method === 'GET';\n const sessionTokenHeader = Boolean(getSessionTokenHeader(request));\n\n return (\n sessionTokenHeader &&\n !isBounceRequest(request) &&\n (!isEmbeddedRequest(request) || !isGet)\n );\n}\n\nfunction isEmbeddedRequest(request: Request) {\n const {searchParams} = new URL(request.url);\n\n return searchParams.get('embedded') === '1';\n}\n\nfunction parseURL({params, base, init, shop, url}: ParseURLOptions): ParsedURL {\n let target: RedirectTarget | undefined =\n typeof init !== 'number' && init?.target ? init.target : undefined;\n\n if (isAdminRemotePath(url)) {\n const {config} = params;\n\n const adminPath = getAdminRemotePath(url);\n const cleanShopName = shop.replace('.myshopify.com', '');\n\n if (!target) {\n target = config.isEmbeddedApp ? '_parent' : '_self';\n }\n\n return {\n url: new URL(\n `https://admin.shopify.com/store/${cleanShopName}${adminPath}`,\n ),\n target,\n };\n } else {\n return {\n url: new URL(url, base),\n target: target ?? '_self',\n };\n }\n}\n\nconst ADMIN_REGEX = /^shopify:\\/*admin\\//i;\n\nfunction isAdminRemotePath(url: string) {\n return ADMIN_REGEX.test(url);\n}\n\nfunction getAdminRemotePath(url: string | URL) {\n const parsedUrl = removeRestrictedParams(new URL(url)).href;\n return parsedUrl.replace(ADMIN_REGEX, '/');\n}\n\nconst embeddedFrameParamsToRemove = [\n 'hmac',\n 'locale',\n 'protocol',\n 'session',\n 'id_token',\n 'shop',\n 'timestamp',\n 'host',\n 'embedded',\n // sent when clicking rel=\"home\" nav item\n 'appLoadId',\n];\n\nfunction removeRestrictedParams(url: URL | string) {\n const newUrl = new URL(url);\n embeddedFrameParamsToRemove.forEach((param) =>\n newUrl.searchParams.delete(param),\n );\n return newUrl;\n}\n"],"names":["renderAppBridge","remixRedirect","redirectWithAppBridgeHeaders","getSessionTokenHeader"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"render-app-bridge.js","sources":["../../../../../../../src/server/authenticate/admin/helpers/render-app-bridge.ts"],"sourcesContent":[null],"names":["sanitizeRedirectUrl","addDocumentResponseHeaders","appBridgeUrl"],"mappings":";;;;;;AAaM,SAAU,eAAe,CAC7B,EAAC,MAAM,EAAc,EACrB,OAAgB,EAChB,UAA8B,EAAA;IAE9B,IAAI,gBAAgB,GAAG,EAAE;IACzB,IAAI,UAAU,EAAE;AACd,QAAA,MAAM,WAAW,GAAGA,uCAAmB,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,GAAG,CAAC;AAEtE,QAAA,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,IAAI,MAAM;AAE1C,QAAA,gBAAgB,GAAG,CAAuB,oBAAA,EAAA,IAAI,CAAC,SAAS,CACtD,WAAW,CAAC,QAAQ,EAAE,CACvB,CAAA,EAAA,EAAK,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,YAAY;;AAG1C,IAAA,MAAM,eAAe,GAAG,IAAI,OAAO,CAAC;AAClC,QAAA,cAAc,EAAE,yBAAyB;AAC1C,KAAA,CAAC;IACFC,6CAA0B,CACxB,eAAe,EACf,MAAM,CAAC,aAAa,EACpB,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,CAC9C;IAED,MAAM,IAAI,QAAQ,CAChB;AAC0B,4BAAA,EAAA,MAAM,CAAC,MAAM,CAAU,OAAA,EAAAC,yBAAY,EAAE,CAAA;QAC3D,gBAAgB;AACnB,IAAA,CAAA,EACD,EAAC,OAAO,EAAE,eAAe,EAAC,CAC3B;AACH;;;;"}
1
+ {"version":3,"file":"render-app-bridge.js","sources":["../../../../../../../src/server/authenticate/admin/helpers/render-app-bridge.ts"],"sourcesContent":["import {BasicParams} from '../../../types';\nimport {appBridgeUrl} from '../../helpers/app-bridge-url';\nimport {addDocumentResponseHeaders} from '../../helpers/add-response-headers';\n\nimport {sanitizeRedirectUrl} from './validate-redirect-url';\n\nimport type {RedirectTarget} from '.';\n\nexport interface RedirectToOptions {\n url: string | URL;\n target?: RedirectTarget;\n}\n\nexport function renderAppBridge(\n {config}: BasicParams,\n request: Request,\n redirectTo?: RedirectToOptions,\n): never {\n let redirectToScript = '';\n if (redirectTo) {\n const destination = sanitizeRedirectUrl(config.appUrl, redirectTo.url);\n\n const target = redirectTo.target ?? '_top';\n\n redirectToScript = `<script>window.open(${JSON.stringify(\n destination.toString(),\n )}, ${JSON.stringify(target)})</script>`;\n }\n\n const responseHeaders = new Headers({\n 'content-type': 'text/html;charset=utf-8',\n });\n addDocumentResponseHeaders(\n responseHeaders,\n config.isEmbeddedApp,\n new URL(request.url).searchParams.get('shop'),\n );\n\n throw new Response(\n `\n <script data-api-key=\"${config.apiKey}\" src=\"${appBridgeUrl()}\"></script>\n ${redirectToScript}\n `,\n {headers: responseHeaders},\n );\n}\n"],"names":["sanitizeRedirectUrl","addDocumentResponseHeaders","appBridgeUrl"],"mappings":";;;;;;AAaM,SAAU,eAAe,CAC7B,EAAC,MAAM,EAAc,EACrB,OAAgB,EAChB,UAA8B,EAAA;IAE9B,IAAI,gBAAgB,GAAG,EAAE;IACzB,IAAI,UAAU,EAAE;AACd,QAAA,MAAM,WAAW,GAAGA,uCAAmB,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,GAAG,CAAC;AAEtE,QAAA,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,IAAI,MAAM;AAE1C,QAAA,gBAAgB,GAAG,CAAA,oBAAA,EAAuB,IAAI,CAAC,SAAS,CACtD,WAAW,CAAC,QAAQ,EAAE,CACvB,CAAA,EAAA,EAAK,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,YAAY;IAC1C;AAEA,IAAA,MAAM,eAAe,GAAG,IAAI,OAAO,CAAC;AAClC,QAAA,cAAc,EAAE,yBAAyB;AAC1C,KAAA,CAAC;IACFC,6CAA0B,CACxB,eAAe,EACf,MAAM,CAAC,aAAa,EACpB,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,CAC9C;IAED,MAAM,IAAI,QAAQ,CAChB;AAC0B,4BAAA,EAAA,MAAM,CAAC,MAAM,CAAA,OAAA,EAAUC,yBAAY,EAAE,CAAA;QAC3D,gBAAgB;AACnB,IAAA,CAAA,EACD,EAAC,OAAO,EAAE,eAAe,EAAC,CAC3B;AACH;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"trigger-after-auth-hook.js","sources":["../../../../../../../src/server/authenticate/admin/helpers/trigger-after-auth-hook.ts"],"sourcesContent":[null],"names":["createAdminApiContext"],"mappings":";;;;AASO,eAAe,oBAAoB,CAIxC,MAAmB,EACnB,OAAgB,EAChB,OAAgB,EAChB,YAAmC,EAAA;AAEnC,IAAA,MAAM,EAAC,MAAM,EAAE,MAAM,EAAC,GAAG,MAAM;AAC/B,IAAA,IAAI,MAAM,CAAC,KAAK,CAAC,SAAS,EAAE;AAC1B,QAAA,MAAM,CAAC,IAAI,CAAC,wBAAwB,EAAE,EAAC,IAAI,EAAE,OAAO,CAAC,IAAI,EAAC,CAAC;AAE3D,QAAA,MAAM,KAAK,GAAGA,2CAAqB,CACjC,OAAO,EACP,MAAM,EACN,YAAY,CAAC,iBAAiB,CAAC,OAAO,CAAC,CACF;AAEvC,QAAA,MAAM,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC;YAC3B,OAAO;YACP,KAAK;AACN,SAAA,CAAC;;AAEN;;;;"}
1
+ {"version":3,"file":"trigger-after-auth-hook.js","sources":["../../../../../../../src/server/authenticate/admin/helpers/trigger-after-auth-hook.ts"],"sourcesContent":["import {Session, ShopifyRestResources} from '@shopify/shopify-api';\n\nimport type {AppConfigArg} from '../../../config-types';\nimport {AdminApiContextWithRest} from '../../../clients';\nimport type {BasicParams} from '../../../types';\nimport {AuthorizationStrategy} from '../strategies/types';\n\nimport {createAdminApiContext} from './create-admin-api-context';\n\nexport async function triggerAfterAuthHook<\n ConfigArg extends AppConfigArg,\n Resources extends ShopifyRestResources = ShopifyRestResources,\n>(\n params: BasicParams,\n session: Session,\n request: Request,\n authStrategy: AuthorizationStrategy,\n) {\n const {config, logger} = params;\n if (config.hooks.afterAuth) {\n logger.info('Running afterAuth hook', {shop: session.shop});\n\n const admin = createAdminApiContext<ConfigArg, Resources>(\n session,\n params,\n authStrategy.handleClientError(request),\n ) as AdminApiContextWithRest<Resources>;\n\n await config.hooks.afterAuth({\n session,\n admin,\n });\n }\n}\n"],"names":["createAdminApiContext"],"mappings":";;;;AASO,eAAe,oBAAoB,CAIxC,MAAmB,EACnB,OAAgB,EAChB,OAAgB,EAChB,YAAmC,EAAA;AAEnC,IAAA,MAAM,EAAC,MAAM,EAAE,MAAM,EAAC,GAAG,MAAM;AAC/B,IAAA,IAAI,MAAM,CAAC,KAAK,CAAC,SAAS,EAAE;AAC1B,QAAA,MAAM,CAAC,IAAI,CAAC,wBAAwB,EAAE,EAAC,IAAI,EAAE,OAAO,CAAC,IAAI,EAAC,CAAC;AAE3D,QAAA,MAAM,KAAK,GAAGA,2CAAqB,CACjC,OAAO,EACP,MAAM,EACN,YAAY,CAAC,iBAAiB,CAAC,OAAO,CAAC,CACF;AAEvC,QAAA,MAAM,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC;YAC3B,OAAO;YACP,KAAK;AACN,SAAA,CAAC;IACJ;AACF;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"validate-redirect-url.js","sources":["../../../../../../../src/server/authenticate/admin/helpers/validate-redirect-url.ts"],"sourcesContent":[null],"names":["ShopifyError"],"mappings":";;;;AAUA,MAAM,cAAc,GAAG,QAAQ;AAC/B,MAAM,oBAAoB,GAAG,YAAY;AACzC,MAAM,oBAAoB,GAAG,IAAI;AACjC,MAAM,eAAe,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC;AAE3C,SAAS,MAAM,CACb,MAAc,EACd,WAAoB,EACpB,aAAkC,IAAI,EAAA;AAEtC,IAAA,IAAI,OAAO,WAAW,KAAK,QAAQ,EAAE;AACnC,QAAA,OAAO,KAAK;;AAGd,IAAA,IACE,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;AAChC,QAAA,oBAAoB,CAAC,IAAI,CAAC,WAAW,CAAC,EACtC;AACA,QAAA,OAAO,KAAK;;AAGd,IAAA,IAAI,GAAQ;AAEZ,IAAA,IAAI;QACF,GAAG,GAAG,IAAI,GAAG,CAAC,WAAW,EAAE,MAAM,CAAC;;IAClC,OAAO,KAAK,EAAE;AACd,QAAA,OAAO,KAAK;;IAGd,IAAI,oBAAoB,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;AAC3C,QAAA,OAAO,KAAK;;IAGd,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;AAC3C,QAAA,OAAO,KAAK;;IAGd,IAAI,UAAU,IAAI,GAAG,CAAC,QAAQ,KAAK,QAAQ,EAAE;AAC3C,QAAA,OAAO,KAAK;;AAGd,IAAA,OAAO,IAAI;AACb;AAEM,SAAU,mBAAmB,CACjC,MAAc,EACd,WAAoB,EACpB,UAAsB,EAAgB,EAAA;IAEtC,IAAI,MAAM,CAAC,MAAM,EAAE,WAAW,EAAE,OAAO,CAAC,UAAU,CAAC,EAAE;AACnD,QAAA,OAAO,IAAI,GAAG,CAAC,WAAW,EAAE,MAAM,CAAqC;;AAClE,SAAA,IAAI,OAAO,CAAC,cAAc,KAAK,KAAK,EAAE;AAC3C,QAAA,OAAO,SAA6C;;SAC/C;AACL,QAAA,MAAM,IAAIA,uBAAY,CAAC,mCAAmC,CAAC;;AAE/D;;;;"}
1
+ {"version":3,"file":"validate-redirect-url.js","sources":["../../../../../../../src/server/authenticate/admin/helpers/validate-redirect-url.ts"],"sourcesContent":["import {ShopifyError} from '@shopify/shopify-api';\n\ninterface Options {\n requireSSL?: boolean;\n throwOnInvalid?: boolean;\n}\n\ntype SanitizedRedirectUrl<OptionsArg extends Options> =\n OptionsArg['throwOnInvalid'] extends false ? URL | undefined : URL;\n\nconst FILE_URI_MATCH = /\\/\\/\\//;\nconst INVALID_RELATIVE_URL = /[/\\\\][/\\\\]/;\nconst WHITESPACE_CHARACTER = /\\s/;\nconst VALID_PROTOCOLS = ['https:', 'http:'];\n\nfunction isSafe(\n domain: string,\n redirectUrl: unknown,\n requireSSL: boolean | undefined = true,\n): redirectUrl is string {\n if (typeof redirectUrl !== 'string') {\n return false;\n }\n\n if (\n FILE_URI_MATCH.test(redirectUrl) ||\n WHITESPACE_CHARACTER.test(redirectUrl)\n ) {\n return false;\n }\n\n let url: URL;\n\n try {\n url = new URL(redirectUrl, domain);\n } catch (error) {\n return false;\n }\n\n if (INVALID_RELATIVE_URL.test(url.pathname)) {\n return false;\n }\n\n if (!VALID_PROTOCOLS.includes(url.protocol)) {\n return false;\n }\n\n if (requireSSL && url.protocol !== 'https:') {\n return false;\n }\n\n return true;\n}\n\nexport function sanitizeRedirectUrl<OptionsArg extends Options>(\n domain: string,\n redirectUrl: unknown,\n options: OptionsArg = {} as OptionsArg,\n): SanitizedRedirectUrl<OptionsArg> {\n if (isSafe(domain, redirectUrl, options.requireSSL)) {\n return new URL(redirectUrl, domain) as SanitizedRedirectUrl<OptionsArg>;\n } else if (options.throwOnInvalid === false) {\n return undefined as SanitizedRedirectUrl<OptionsArg>;\n } else {\n throw new ShopifyError('Invalid URL. Refusing to redirect');\n }\n}\n"],"names":["ShopifyError"],"mappings":";;;;AAUA,MAAM,cAAc,GAAG,QAAQ;AAC/B,MAAM,oBAAoB,GAAG,YAAY;AACzC,MAAM,oBAAoB,GAAG,IAAI;AACjC,MAAM,eAAe,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC;AAE3C,SAAS,MAAM,CACb,MAAc,EACd,WAAoB,EACpB,aAAkC,IAAI,EAAA;AAEtC,IAAA,IAAI,OAAO,WAAW,KAAK,QAAQ,EAAE;AACnC,QAAA,OAAO,KAAK;IACd;AAEA,IAAA,IACE,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;AAChC,QAAA,oBAAoB,CAAC,IAAI,CAAC,WAAW,CAAC,EACtC;AACA,QAAA,OAAO,KAAK;IACd;AAEA,IAAA,IAAI,GAAQ;AAEZ,IAAA,IAAI;QACF,GAAG,GAAG,IAAI,GAAG,CAAC,WAAW,EAAE,MAAM,CAAC;IACpC;IAAE,OAAO,KAAK,EAAE;AACd,QAAA,OAAO,KAAK;IACd;IAEA,IAAI,oBAAoB,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;AAC3C,QAAA,OAAO,KAAK;IACd;IAEA,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;AAC3C,QAAA,OAAO,KAAK;IACd;IAEA,IAAI,UAAU,IAAI,GAAG,CAAC,QAAQ,KAAK,QAAQ,EAAE;AAC3C,QAAA,OAAO,KAAK;IACd;AAEA,IAAA,OAAO,IAAI;AACb;AAEM,SAAU,mBAAmB,CACjC,MAAc,EACd,WAAoB,EACpB,UAAsB,EAAgB,EAAA;IAEtC,IAAI,MAAM,CAAC,MAAM,EAAE,WAAW,EAAE,OAAO,CAAC,UAAU,CAAC,EAAE;AACnD,QAAA,OAAO,IAAI,GAAG,CAAC,WAAW,EAAE,MAAM,CAAqC;IACzE;AAAO,SAAA,IAAI,OAAO,CAAC,cAAc,KAAK,KAAK,EAAE;AAC3C,QAAA,OAAO,SAA6C;IACtD;SAAO;AACL,QAAA,MAAM,IAAIA,uBAAY,CAAC,mCAAmC,CAAC;IAC7D;AACF;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"validate-shop-and-host-params.js","sources":["../../../../../../../src/server/authenticate/admin/helpers/validate-shop-and-host-params.ts"],"sourcesContent":[null],"names":["redirect"],"mappings":";;;;AAIgB,SAAA,yBAAyB,CACvC,MAAmB,EACnB,OAAgB,EAAA;IAEhB,MAAM,EAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAC,GAAG,MAAM;AAEpC,IAAA,IAAI,MAAM,CAAC,aAAa,EAAE;QACxB,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC;AAChC,QAAA,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAE,CAAC;QAClE,IAAI,CAAC,IAAI,EAAE;AACT,YAAA,MAAM,CAAC,KAAK,CAAC,oDAAoD,EAAE;gBACjE,IAAI;AACL,aAAA,CAAC;AACF,YAAA,MAAM,mBAAmB,CAAC,OAAO,EAAE,MAAM,CAAC;;AAG5C,QAAA,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAE,CAAC;QAClE,IAAI,CAAC,IAAI,EAAE;AACT,YAAA,MAAM,CAAC,KAAK,CAAC,yCAAyC,EAAE;gBACtD,IAAI;gBACJ,IAAI,EAAE,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC;AACnC,aAAA,CAAC;AACF,YAAA,MAAM,mBAAmB,CAAC,OAAO,EAAE,MAAM,CAAC;;;AAGhD;AAEA,SAAS,mBAAmB,CAAC,OAAgB,EAAE,MAAmB,EAAA;AAChE,IAAA,MAAM,EAAC,MAAM,EAAE,MAAM,EAAC,GAAG,MAAM;IAE/B,MAAM,EAAC,QAAQ,EAAC,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC;IACvC,IAAI,QAAQ,KAAK,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE;QACtC,MAAM,OAAO,GACX,CAA2E,yEAAA,CAAA;AAC3E,YAAA,CAAA,EAAA,EAAK,MAAM,CAAC,IAAI,CAAC,SAAS,uEAAuE;AAEnG,QAAA,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC;QACrB,MAAM,IAAI,QAAQ,CAAC,OAAO,EAAE,EAAC,MAAM,EAAE,GAAG,EAAC,CAAC;;IAG5C,MAAMA,sBAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC;AACvC;;;;"}
1
+ {"version":3,"file":"validate-shop-and-host-params.js","sources":["../../../../../../../src/server/authenticate/admin/helpers/validate-shop-and-host-params.ts"],"sourcesContent":["import {redirect} from '@remix-run/server-runtime';\n\nimport {BasicParams} from '../../../types';\n\nexport function validateShopAndHostParams(\n params: BasicParams,\n request: Request,\n) {\n const {api, config, logger} = params;\n\n if (config.isEmbeddedApp) {\n const url = new URL(request.url);\n const shop = api.utils.sanitizeShop(url.searchParams.get('shop')!);\n if (!shop) {\n logger.debug('Missing or invalid shop, redirecting to login path', {\n shop,\n });\n throw redirectToLoginPath(request, params);\n }\n\n const host = api.utils.sanitizeHost(url.searchParams.get('host')!);\n if (!host) {\n logger.debug('Invalid host, redirecting to login path', {\n shop,\n host: url.searchParams.get('host'),\n });\n throw redirectToLoginPath(request, params);\n }\n }\n}\n\nfunction redirectToLoginPath(request: Request, params: BasicParams): never {\n const {config, logger} = params;\n\n const {pathname} = new URL(request.url);\n if (pathname === config.auth.loginPath) {\n const message =\n `Detected call to shopify.authenticate.admin() from configured login path ` +\n `('${config.auth.loginPath}'), please make sure to call shopify.login() from that route instead.`;\n\n logger.debug(message);\n throw new Response(message, {status: 500});\n }\n\n throw redirect(config.auth.loginPath);\n}\n"],"names":["redirect"],"mappings":";;;;AAIM,SAAU,yBAAyB,CACvC,MAAmB,EACnB,OAAgB,EAAA;IAEhB,MAAM,EAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAC,GAAG,MAAM;AAEpC,IAAA,IAAI,MAAM,CAAC,aAAa,EAAE;QACxB,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC;AAChC,QAAA,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAE,CAAC;QAClE,IAAI,CAAC,IAAI,EAAE;AACT,YAAA,MAAM,CAAC,KAAK,CAAC,oDAAoD,EAAE;gBACjE,IAAI;AACL,aAAA,CAAC;AACF,YAAA,MAAM,mBAAmB,CAAC,OAAO,EAAE,MAAM,CAAC;QAC5C;AAEA,QAAA,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAE,CAAC;QAClE,IAAI,CAAC,IAAI,EAAE;AACT,YAAA,MAAM,CAAC,KAAK,CAAC,yCAAyC,EAAE;gBACtD,IAAI;gBACJ,IAAI,EAAE,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC;AACnC,aAAA,CAAC;AACF,YAAA,MAAM,mBAAmB,CAAC,OAAO,EAAE,MAAM,CAAC;QAC5C;IACF;AACF;AAEA,SAAS,mBAAmB,CAAC,OAAgB,EAAE,MAAmB,EAAA;AAChE,IAAA,MAAM,EAAC,MAAM,EAAE,MAAM,EAAC,GAAG,MAAM;IAE/B,MAAM,EAAC,QAAQ,EAAC,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC;IACvC,IAAI,QAAQ,KAAK,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE;QACtC,MAAM,OAAO,GACX,CAAA,yEAAA,CAA2E;AAC3E,YAAA,CAAA,EAAA,EAAK,MAAM,CAAC,IAAI,CAAC,SAAS,uEAAuE;AAEnG,QAAA,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC;QACrB,MAAM,IAAI,QAAQ,CAAC,OAAO,EAAE,EAAC,MAAM,EAAE,GAAG,EAAC,CAAC;IAC5C;IAEA,MAAMA,sBAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC;AACvC;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"fetch-scopes-details.js","sources":["../../../../../../../../src/server/authenticate/admin/scope/client/fetch-scopes-details.ts"],"sourcesContent":[null],"names":[],"mappings":";;AAmBA,MAAM,yBAAyB,GAAG,CAAA;;;;;;;;;;;;;;;EAehC;AAEK,eAAe,gBAAgB,CACpC,KAAiC,EAAA;IAEjC,MAAM,sBAAsB,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,yBAAyB,CAAC;AAE7E,IAAA,MAAM,aAAa,GAAG,MAAM,sBAAsB,CAAC,IAAI,EAAE;IACzD,OAAO,aAAa,CAAC,IAAI;AAC3B;;;;"}
1
+ {"version":3,"file":"fetch-scopes-details.js","sources":["../../../../../../../../src/server/authenticate/admin/scope/client/fetch-scopes-details.ts"],"sourcesContent":["import {AppConfigArg} from '../../../../config-types';\nimport {AdminApiContext} from '../../../../clients';\n\nexport interface FetchScopesDetailResponse {\n app: {\n requestedAccessScopes: {\n handle: string;\n }[];\n optionalAccessScopes: {\n handle: string;\n }[];\n installation: {\n accessScopes: {\n handle: string;\n }[];\n };\n };\n}\n\nconst FETCH_SCOPES_DETAIL_QUERY = `#graphql\nquery FetchAccessScopes{\n app {\n requestedAccessScopes {\n handle\n }\n optionalAccessScopes {\n handle\n }\n installation {\n accessScopes {\n handle\n }\n }\n }\n}`;\n\nexport async function fetchScopeDetail<ConfigArg extends AppConfigArg>(\n admin: AdminApiContext<ConfigArg>,\n): Promise<FetchScopesDetailResponse> {\n const fetchScopeDetailResult = await admin.graphql(FETCH_SCOPES_DETAIL_QUERY);\n\n const resultContent = await fetchScopeDetailResult.json();\n return resultContent.data;\n}\n"],"names":[],"mappings":";;AAmBA,MAAM,yBAAyB,GAAG,CAAA;;;;;;;;;;;;;;;EAehC;AAEK,eAAe,gBAAgB,CACpC,KAAiC,EAAA;IAEjC,MAAM,sBAAsB,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,yBAAyB,CAAC;AAE7E,IAAA,MAAM,aAAa,GAAG,MAAM,sBAAsB,CAAC,IAAI,EAAE;IACzD,OAAO,aAAa,CAAC,IAAI;AAC3B;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"revoke-scopes.js","sources":["../../../../../../../../src/server/authenticate/admin/scope/client/revoke-scopes.ts"],"sourcesContent":[null],"names":[],"mappings":";;AAaA,MAAM,qBAAqB,GAAG,CAAA;;;;;;;;;;;EAW5B;AAEK,eAAe,YAAY,CAChC,KAAiC,EACjC,MAAgB,EAAA;IAEhB,MAAM,kBAAkB,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,qBAAqB,EAAE;AACpE,QAAA,SAAS,EAAE;YACT,MAAM;AACP,SAAA;AACF,KAAA,CAAC;AAEF,IAAA,MAAM,aAAa,GAAG,MAAM,kBAAkB,CAAC,IAAI,EAAE;AACrD,IAAA,OAAO,aAAa,CAAC,IAAI,CAAC,qBAAqB;AACjD;;;;"}
1
+ {"version":3,"file":"revoke-scopes.js","sources":["../../../../../../../../src/server/authenticate/admin/scope/client/revoke-scopes.ts"],"sourcesContent":["import {AppConfigArg} from '../../../../config-types';\nimport {AdminApiContext} from '../../../../clients';\n\nexport interface RevokeScopesResponse {\n revoked: {\n handle: string;\n }[];\n userErrors: {\n field: string;\n message: string;\n }[];\n}\n\nconst REVOKE_SCOPE_MUTATION = `#graphql\nmutation AppRevokeAccessScopes($scopes: [String!]!) {\n appRevokeAccessScopes(scopes: $scopes){\n revoked {\n handle\n }\n userErrors {\n field\n message\n }\n }\n}`;\n\nexport async function revokeScopes<ConfigArg extends AppConfigArg>(\n admin: AdminApiContext<ConfigArg>,\n scopes: string[],\n): Promise<RevokeScopesResponse> {\n const revokeScopesResult = await admin.graphql(REVOKE_SCOPE_MUTATION, {\n variables: {\n scopes,\n },\n });\n\n const resultContent = await revokeScopesResult.json();\n return resultContent.data.appRevokeAccessScopes;\n}\n"],"names":[],"mappings":";;AAaA,MAAM,qBAAqB,GAAG,CAAA;;;;;;;;;;;EAW5B;AAEK,eAAe,YAAY,CAChC,KAAiC,EACjC,MAAgB,EAAA;IAEhB,MAAM,kBAAkB,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,qBAAqB,EAAE;AACpE,QAAA,SAAS,EAAE;YACT,MAAM;AACP,SAAA;AACF,KAAA,CAAC;AAEF,IAAA,MAAM,aAAa,GAAG,MAAM,kBAAkB,CAAC,IAAI,EAAE;AACrD,IAAA,OAAO,aAAa,CAAC,IAAI,CAAC,qBAAqB;AACjD;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"factory.js","sources":["../../../../../../../src/server/authenticate/admin/scope/factory.ts"],"sourcesContent":[null],"names":["queryScopesFactory","requestScopesFactory","revokeScopesFactory"],"mappings":";;;;;;SAWgB,gBAAgB,CAC9B,MAAmB,EACnB,OAAgB,EAChB,KAAiC,EAAA;IAEjC,OAAO;QACL,KAAK,EAAEA,wBAAkB,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC;QACjD,OAAO,EAAEC,4BAAoB,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC;QACrD,MAAM,EAAEC,0BAAmB,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC;KACpD;AACH;;;;"}
1
+ {"version":3,"file":"factory.js","sources":["../../../../../../../src/server/authenticate/admin/scope/factory.ts"],"sourcesContent":["import {Session} from '@shopify/shopify-api';\n\nimport {AppConfigArg} from '../../../config-types';\nimport {BasicParams} from '../../../types';\nimport {AdminApiContext} from '../../../clients';\n\nimport {ScopesApiContext} from './types';\nimport {requestScopesFactory} from './request';\nimport {queryScopesFactory} from './query';\nimport {revokeScopesFactory} from './revoke';\n\nexport function scopesApiFactory<ConfigArg extends AppConfigArg>(\n params: BasicParams,\n session: Session,\n admin: AdminApiContext<ConfigArg>,\n): ScopesApiContext {\n return {\n query: queryScopesFactory(params, session, admin),\n request: requestScopesFactory(params, session, admin),\n revoke: revokeScopesFactory(params, session, admin),\n };\n}\n"],"names":["queryScopesFactory","requestScopesFactory","revokeScopesFactory"],"mappings":";;;;;;SAWgB,gBAAgB,CAC9B,MAAmB,EACnB,OAAgB,EAChB,KAAiC,EAAA;IAEjC,OAAO;QACL,KAAK,EAAEA,wBAAkB,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC;QACjD,OAAO,EAAEC,4BAAoB,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC;QACrD,MAAM,EAAEC,0BAAmB,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC;KACpD;AACH;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"query.js","sources":["../../../../../../../src/server/authenticate/admin/scope/query.ts"],"sourcesContent":[null],"names":["fetchScopeDetail","AuthScopes"],"mappings":";;;;;SAYgB,kBAAkB,CAChC,MAAmB,EACnB,OAAgB,EAChB,KAAiC,EAAA;IAEjC,OAAO,eAAe,WAAW,GAAA;AAC/B,QAAA,MAAM,EAAC,MAAM,EAAC,GAAG,MAAM;AAEvB,QAAA,MAAM,CAAC,KAAK,CAAC,2BAA2B,EAAE;YACxC,IAAI,EAAE,OAAO,CAAC,IAAI;AACnB,SAAA,CAAC;AAEF,QAAA,MAAM,YAAY,GAAG,MAAMA,mCAAgB,CAAC,KAAK,CAAC;AAClD,QAAA,OAAO,mBAAmB,CAAC,YAAY,CAAC;AAC1C,KAAC;AACH;AAEM,SAAU,mBAAmB,CACjC,oBAA+C,EAAA;AAE/C,IAAA,MAAM,cAAc,GAAG,oBAAoB,CAAC,GAAG;AAE/C,IAAA,MAAM,OAAO,GAAG,IAAIC,qBAAU,CAC5B,cAAc,CAAC,YAAY,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,MAAM,CAAC,CACtE,CAAC,OAAO,CAAC,IAAI,CAAC;IAEf,MAAM,QAAQ,GAAG,IAAIA,qBAAU,CAC7B,cAAc,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,MAAM,CAAC,CAClE,CAAC,OAAO,CAAC,IAAI,CAAC;IAEf,MAAM,QAAQ,GAAG,IAAIA,qBAAU,CAC7B,cAAc,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,MAAM,CAAC,CACjE,CAAC,OAAO,CAAC,IAAI,CAAC;IAEf,OAAO;QACL,OAAO;QACP,QAAQ;QACR,QAAQ;KACT;AACH;;;;;"}
1
+ {"version":3,"file":"query.js","sources":["../../../../../../../src/server/authenticate/admin/scope/query.ts"],"sourcesContent":["import {AuthScopes, Session} from '@shopify/shopify-api';\n\nimport {AppConfigArg} from '../../../config-types';\nimport {AdminApiContext} from '../../../clients';\nimport type {BasicParams} from '../../../types';\n\nimport {ScopesDetail} from './types';\nimport {\n FetchScopesDetailResponse,\n fetchScopeDetail,\n} from './client/fetch-scopes-details';\n\nexport function queryScopesFactory<ConfigArg extends AppConfigArg>(\n params: BasicParams,\n session: Session,\n admin: AdminApiContext<ConfigArg>,\n) {\n return async function queryScopes() {\n const {logger} = params;\n\n logger.debug('Querying scopes details: ', {\n shop: session.shop,\n });\n\n const scopesDetail = await fetchScopeDetail(admin);\n return mapFetchScopeDetail(scopesDetail);\n };\n}\n\nexport function mapFetchScopeDetail(\n scopesDetailResponse: FetchScopesDetailResponse,\n): ScopesDetail {\n const appInformation = scopesDetailResponse.app;\n\n const granted = new AuthScopes(\n appInformation.installation.accessScopes.map((scope) => scope.handle),\n ).toArray(true);\n\n const required = new AuthScopes(\n appInformation.requestedAccessScopes.map((scope) => scope.handle),\n ).toArray(true);\n\n const optional = new AuthScopes(\n appInformation.optionalAccessScopes.map((scope) => scope.handle),\n ).toArray(true);\n\n return {\n granted,\n required,\n optional,\n };\n}\n"],"names":["fetchScopeDetail","AuthScopes"],"mappings":";;;;;SAYgB,kBAAkB,CAChC,MAAmB,EACnB,OAAgB,EAChB,KAAiC,EAAA;IAEjC,OAAO,eAAe,WAAW,GAAA;AAC/B,QAAA,MAAM,EAAC,MAAM,EAAC,GAAG,MAAM;AAEvB,QAAA,MAAM,CAAC,KAAK,CAAC,2BAA2B,EAAE;YACxC,IAAI,EAAE,OAAO,CAAC,IAAI;AACnB,SAAA,CAAC;AAEF,QAAA,MAAM,YAAY,GAAG,MAAMA,mCAAgB,CAAC,KAAK,CAAC;AAClD,QAAA,OAAO,mBAAmB,CAAC,YAAY,CAAC;AAC1C,IAAA,CAAC;AACH;AAEM,SAAU,mBAAmB,CACjC,oBAA+C,EAAA;AAE/C,IAAA,MAAM,cAAc,GAAG,oBAAoB,CAAC,GAAG;AAE/C,IAAA,MAAM,OAAO,GAAG,IAAIC,qBAAU,CAC5B,cAAc,CAAC,YAAY,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,MAAM,CAAC,CACtE,CAAC,OAAO,CAAC,IAAI,CAAC;IAEf,MAAM,QAAQ,GAAG,IAAIA,qBAAU,CAC7B,cAAc,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,MAAM,CAAC,CAClE,CAAC,OAAO,CAAC,IAAI,CAAC;IAEf,MAAM,QAAQ,GAAG,IAAIA,qBAAU,CAC7B,cAAc,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,MAAM,CAAC,CACjE,CAAC,OAAO,CAAC,IAAI,CAAC;IAEf,OAAO;QACL,OAAO;QACP,QAAQ;QACR,QAAQ;KACT;AACH;;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"request.js","sources":["../../../../../../../src/server/authenticate/admin/scope/request.ts"],"sourcesContent":[null],"names":["redirectToInstallPage","fetchScopeDetail","AuthScopes"],"mappings":";;;;;;SASgB,oBAAoB,CAClC,MAAmB,EACnB,OAAgB,EAChB,KAAiC,EAAA;AAEjC,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,MAAMA,2CAAqB,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;AACjE,KAAC;AAED,IAAA,eAAe,cAAc,CAC3B,MAAgB,EAChB,KAAiC,EAAA;AAEjC,QAAA,MAAM,YAAY,GAAG,MAAMC,mCAAgB,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,IAAIC,qBAAU,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC;;AAEpD;;;;"}
1
+ {"version":3,"file":"request.js","sources":["../../../../../../../src/server/authenticate/admin/scope/request.ts"],"sourcesContent":["import {AuthScopes, Session} from '@shopify/shopify-api';\n\nimport {AppConfigArg} from '../../../config-types';\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<ConfigArg extends AppConfigArg>(\n params: BasicParams,\n session: Session,\n admin: AdminApiContext<ConfigArg>,\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(\n scopes: string[],\n admin: AdminApiContext<ConfigArg>,\n ) {\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":["redirectToInstallPage","fetchScopeDetail","AuthScopes"],"mappings":";;;;;;SASgB,oBAAoB,CAClC,MAAmB,EACnB,OAAgB,EAChB,KAAiC,EAAA;AAEjC,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,MAAMA,2CAAqB,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;AACjE,IAAA,CAAC;AAED,IAAA,eAAe,cAAc,CAC3B,MAAgB,EAChB,KAAiC,EAAA;AAEjC,QAAA,MAAM,YAAY,GAAG,MAAMC,mCAAgB,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,IAAIC,qBAAU,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC;IAClD;AACF;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"revoke.js","sources":["../../../../../../../src/server/authenticate/admin/scope/revoke.ts"],"sourcesContent":[null],"names":["revokeScopes"],"mappings":";;;;SAQgB,mBAAmB,CACjC,MAAmB,EACnB,OAAgB,EAChB,KAAiC,EAAA;AAEjC,IAAA,OAAO,eAAe,MAAM,CAAC,MAAgB,EAAA;AAC3C,QAAA,MAAM,EAAC,MAAM,EAAC,GAAG,MAAM;AAEvB,QAAA,MAAM,cAAc,CAAC,MAAM,CAAC;AAE5B,QAAA,MAAM,CAAC,KAAK,CAAC,iBAAiB,EAAE;YAC9B,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,MAAM;AACP,SAAA,CAAC;QAEF,MAAM,kBAAkB,GAAG,MAAMA,yBAAY,CAAC,KAAK,EAAE,MAAM,CAAC;QAC5D,IAAI,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,CAAC,EAAE;AAC7C,YAAA,MAAM,CAAC,KAAK,CAAC,2BAA2B,EAAE;gBACxC,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,MAAM,EAAE,kBAAkB,CAAC,UAAU;AACtC,aAAA,CAAC;YAEF,MAAM,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,kBAAkB,CAAC,UAAU,CAAC,EAAE;AAChE,gBAAA,MAAM,EAAE,GAAG;AACX,gBAAA,OAAO,EAAE;AACP,oBAAA,cAAc,EAAE,kBAAkB;AACnC,iBAAA;AACF,aAAA,CAAC;;QAGJ,OAAO;AACL,YAAA,OAAO,EAAE,kBAAkB,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,MAAM,CAAC;SACjE;AACH,KAAC;AACH;AAEA,eAAe,cAAc,CAAC,MAAgB,EAAA;IAC5C,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;QAClC,MAAM,IAAI,QAAQ,CAAC,oBAAoB,EAAE,EAAC,MAAM,EAAE,GAAG,EAAC,CAAC;;AAE3D;;;;"}
1
+ {"version":3,"file":"revoke.js","sources":["../../../../../../../src/server/authenticate/admin/scope/revoke.ts"],"sourcesContent":["import {Session} from '@shopify/shopify-api';\n\nimport {AppConfigArg} from '../../../config-types';\nimport {AdminApiContext} from '../../../clients';\nimport type {BasicParams} from '../../../types';\n\nimport {revokeScopes} from './client/revoke-scopes';\n\nexport function revokeScopesFactory<ConfigArg extends AppConfigArg>(\n params: BasicParams,\n session: Session,\n admin: AdminApiContext<ConfigArg>,\n) {\n return async function revoke(scopes: string[]) {\n const {logger} = params;\n\n await validateScopes(scopes);\n\n logger.debug('Revoke scopes: ', {\n shop: session.shop,\n scopes,\n });\n\n const revokeScopesResult = await revokeScopes(admin, scopes);\n if (revokeScopesResult.userErrors?.length > 0) {\n logger.error('Failed to revoke scopes: ', {\n shop: session.shop,\n errors: revokeScopesResult.userErrors,\n });\n\n throw new Response(JSON.stringify(revokeScopesResult.userErrors), {\n status: 422,\n headers: {\n 'Content-Type': 'application/json',\n },\n });\n }\n\n return {\n revoked: revokeScopesResult.revoked.map((scope) => scope.handle),\n };\n };\n}\n\nasync function validateScopes(scopes: string[]) {\n if (!scopes || scopes.length === 0) {\n throw new Response('No scopes provided', {status: 400});\n }\n}\n"],"names":["revokeScopes"],"mappings":";;;;SAQgB,mBAAmB,CACjC,MAAmB,EACnB,OAAgB,EAChB,KAAiC,EAAA;AAEjC,IAAA,OAAO,eAAe,MAAM,CAAC,MAAgB,EAAA;AAC3C,QAAA,MAAM,EAAC,MAAM,EAAC,GAAG,MAAM;AAEvB,QAAA,MAAM,cAAc,CAAC,MAAM,CAAC;AAE5B,QAAA,MAAM,CAAC,KAAK,CAAC,iBAAiB,EAAE;YAC9B,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,MAAM;AACP,SAAA,CAAC;QAEF,MAAM,kBAAkB,GAAG,MAAMA,yBAAY,CAAC,KAAK,EAAE,MAAM,CAAC;QAC5D,IAAI,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,CAAC,EAAE;AAC7C,YAAA,MAAM,CAAC,KAAK,CAAC,2BAA2B,EAAE;gBACxC,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,MAAM,EAAE,kBAAkB,CAAC,UAAU;AACtC,aAAA,CAAC;YAEF,MAAM,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,kBAAkB,CAAC,UAAU,CAAC,EAAE;AAChE,gBAAA,MAAM,EAAE,GAAG;AACX,gBAAA,OAAO,EAAE;AACP,oBAAA,cAAc,EAAE,kBAAkB;AACnC,iBAAA;AACF,aAAA,CAAC;QACJ;QAEA,OAAO;AACL,YAAA,OAAO,EAAE,kBAAkB,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,MAAM,CAAC;SACjE;AACH,IAAA,CAAC;AACH;AAEA,eAAe,cAAc,CAAC,MAAgB,EAAA;IAC5C,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;QAClC,MAAM,IAAI,QAAQ,CAAC,oBAAoB,EAAE,EAAC,MAAM,EAAE,GAAG,EAAC,CAAC;IACzD;AACF;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"auth-code-flow.js","sources":["../../../../../../../src/server/authenticate/admin/strategies/auth-code-flow.ts"],"sourcesContent":[null],"names":["getSessionTokenHeader","redirectToAuthPage","handleClientErrorFactory","validateShopAndHostParams","redirectWithExitIframe","beginAuth","triggerAfterAuthHook","redirectToShopifyOrAppRoot","CookieNotFound","InvalidHmacError","InvalidOAuthError","HttpResponseError","GraphqlQueryError"],"mappings":"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"}
1
+ {"version":3,"file":"auth-code-flow.js","sources":["../../../../../../../src/server/authenticate/admin/strategies/auth-code-flow.ts"],"sourcesContent":["import {\n CookieNotFound,\n GraphqlQueryError,\n HttpResponseError,\n InvalidHmacError,\n InvalidOAuthError,\n Session,\n Shopify,\n ShopifyRestResources,\n} from '@shopify/shopify-api';\n\nimport type {BasicParams} from '../../../types';\nimport {\n beginAuth,\n handleClientErrorFactory,\n redirectToAuthPage,\n redirectToShopifyOrAppRoot,\n redirectWithExitIframe,\n triggerAfterAuthHook,\n validateShopAndHostParams,\n} from '../helpers';\nimport {AppConfig, AppConfigArg} from '../../../config-types';\nimport {getSessionTokenHeader} from '../../helpers';\nimport {HandleAdminClientError} from '../../../clients';\nimport type {\n ApiConfigWithFutureFlags,\n ApiFutureFlags,\n} from '../../../future/flags';\n\nimport {AuthorizationStrategy, SessionContext, OnErrorOptions} from './types';\n\nexport class AuthCodeFlowStrategy<\n Config extends AppConfigArg,\n Resources extends ShopifyRestResources = ShopifyRestResources,\n> implements AuthorizationStrategy\n{\n protected api: Shopify<\n ApiConfigWithFutureFlags<Config['future']>,\n ShopifyRestResources,\n ApiFutureFlags<Config['future']>\n >;\n\n protected config: AppConfig;\n protected logger: Shopify['logger'];\n\n public constructor({api, config, logger}: BasicParams) {\n this.api = api;\n this.config = config;\n this.logger = logger;\n }\n\n public async respondToOAuthRequests(request: Request): Promise<void | never> {\n const {api, config} = this;\n\n const url = new URL(request.url);\n const isAuthRequest = url.pathname === config.auth.path;\n const isAuthCallbackRequest = url.pathname === config.auth.callbackPath;\n\n if (isAuthRequest || isAuthCallbackRequest) {\n const shop = api.utils.sanitizeShop(url.searchParams.get('shop')!);\n if (!shop) throw new Response('Shop param is invalid', {status: 400});\n\n if (isAuthRequest) {\n throw await this.handleAuthBeginRequest(request, shop);\n } else {\n throw await this.handleAuthCallbackRequest(request, shop);\n }\n }\n\n if (!getSessionTokenHeader(request)) {\n // This is a document request that doesn't contain a session token. We check if the app is installed.\n // If the app isn't installed, we initiate the OAuth auth code flow.\n // Requests with a header can only happen after the app is installed.\n await this.ensureInstalledOnShop(request);\n }\n }\n\n public async authenticate(\n request: Request,\n sessionContext: SessionContext,\n ): Promise<Session | never> {\n const {api, config, logger} = this;\n\n const {shop, session} = sessionContext;\n\n if (!session) {\n logger.debug('No session found, redirecting to OAuth', {shop});\n await redirectToAuthPage({config, logger, api}, request, shop);\n } else if (!session.isActive(config.scopes)) {\n logger.debug(\n 'Found a session, but it has expired, redirecting to OAuth',\n {shop},\n );\n await redirectToAuthPage({config, logger, api}, request, shop);\n }\n\n logger.debug('Found a valid session', {shop});\n\n return session!;\n }\n\n public handleClientError(request: Request): HandleAdminClientError {\n const {api, config, logger} = this;\n return handleClientErrorFactory({\n request,\n onError: async ({session, error}: OnErrorOptions) => {\n if (error.response.code === 401) {\n throw await redirectToAuthPage(\n {api, config, logger},\n request,\n session.shop,\n );\n }\n },\n });\n }\n\n private async ensureInstalledOnShop(request: Request) {\n const {api, config, logger} = this;\n\n validateShopAndHostParams({api, config, logger}, request);\n\n const url = new URL(request.url);\n let shop = url.searchParams.get('shop');\n\n // Ensure app is installed\n logger.debug('Ensuring app is installed on shop', {shop});\n\n if (!(await this.hasValidOfflineId(request))) {\n logger.info(\"Could not find a shop, can't authenticate request\");\n throw new Response(undefined, {\n status: 400,\n statusText: 'Bad Request',\n });\n }\n\n const offlineSession = await this.getOfflineSession(request);\n const isEmbedded = url.searchParams.get('embedded') === '1';\n\n if (!offlineSession) {\n logger.info(\"Shop hasn't installed app yet, redirecting to OAuth\", {\n shop,\n });\n if (isEmbedded) {\n redirectWithExitIframe({api, config, logger}, request, shop!);\n } else {\n throw await beginAuth({api, config, logger}, request, false, shop!);\n }\n }\n\n shop = shop || offlineSession.shop;\n\n if (config.isEmbeddedApp && !isEmbedded) {\n try {\n logger.debug('Ensuring offline session is valid before embedding', {\n shop,\n });\n await this.testSession(offlineSession);\n\n logger.debug('Offline session is still valid, embedding app', {shop});\n } catch (error) {\n await this.handleInvalidOfflineSession(error, request, shop);\n }\n }\n }\n\n private async handleAuthBeginRequest(\n request: Request,\n shop: string,\n ): Promise<never> {\n const {api, config, logger} = this;\n\n logger.info('Handling OAuth begin request', {shop});\n\n // If we're loading from an iframe, we need to break out of it\n if (\n config.isEmbeddedApp &&\n request.headers.get('Sec-Fetch-Dest') === 'iframe'\n ) {\n logger.debug('Auth request in iframe detected, exiting iframe', {shop});\n throw redirectWithExitIframe({api, config, logger}, request, shop);\n } else {\n throw await beginAuth({api, config, logger}, request, false, shop);\n }\n }\n\n private async handleAuthCallbackRequest(\n request: Request,\n shop: string,\n ): Promise<never> {\n const {api, config, logger} = this;\n\n logger.info('Handling OAuth callback request', {shop});\n\n try {\n const {session, headers: responseHeaders} = await api.auth.callback({\n rawRequest: request,\n });\n\n await config.sessionStorage!.storeSession(session);\n\n if (config.useOnlineTokens && !session.isOnline) {\n logger.info('Requesting online access token for offline session', {\n shop,\n });\n await beginAuth({api, config, logger}, request, true, shop);\n }\n\n logger.debug('Request is valid, loaded session from OAuth callback', {\n shop: session.shop,\n isOnline: session.isOnline,\n });\n\n await triggerAfterAuthHook<Config, Resources>(\n {api, config, logger},\n session,\n request,\n this,\n );\n\n throw await redirectToShopifyOrAppRoot(\n request,\n {api, config, logger},\n responseHeaders,\n );\n } catch (error) {\n if (error instanceof Response) throw error;\n\n throw await this.oauthCallbackError(error, request, shop);\n }\n }\n\n private async getOfflineSession(\n request: Request,\n ): Promise<Session | undefined> {\n const offlineId = await this.getOfflineSessionId(request);\n return this.config.sessionStorage!.loadSession(offlineId!);\n }\n\n private async hasValidOfflineId(request: Request) {\n return Boolean(await this.getOfflineSessionId(request));\n }\n\n private async getOfflineSessionId(\n request: Request,\n ): Promise<string | undefined> {\n const {api} = this;\n const url = new URL(request.url);\n const shop = url.searchParams.get('shop');\n\n return shop\n ? api.session.getOfflineId(shop)\n : api.session.getCurrentId({isOnline: false, rawRequest: request});\n }\n\n private async testSession(session: Session): Promise<void> {\n const {api} = this;\n\n const client = new api.clients.Graphql({\n session,\n });\n\n await client.request(`#graphql\n query shopifyAppShopName {\n shop {\n name\n }\n }\n `);\n }\n\n private async oauthCallbackError(\n error: Error,\n request: Request,\n shop: string,\n ) {\n const {logger} = this;\n logger.error('Error during OAuth callback', {shop, error: error.message});\n\n if (error instanceof CookieNotFound) {\n return this.handleAuthBeginRequest(request, shop);\n }\n\n if (\n error instanceof InvalidHmacError ||\n error instanceof InvalidOAuthError\n ) {\n return new Response(undefined, {\n status: 400,\n statusText: 'Invalid OAuth Request',\n });\n }\n\n return new Response(undefined, {\n status: 500,\n statusText: 'Internal Server Error',\n });\n }\n\n private async handleInvalidOfflineSession(\n error: Error,\n request: Request,\n shop: string,\n ) {\n const {api, logger, config} = this;\n if (error instanceof HttpResponseError) {\n if (error.response.code === 401) {\n logger.info('Shop session is no longer valid, redirecting to OAuth', {\n shop,\n });\n throw await beginAuth({api, config, logger}, request, false, shop);\n } else {\n const message = JSON.stringify(error.response.body, null, 2);\n logger.error(`Unexpected error during session validation: ${message}`, {\n shop,\n });\n\n throw new Response(undefined, {\n status: error.response.code,\n statusText: error.response.statusText,\n });\n }\n } else if (error instanceof GraphqlQueryError) {\n const context: Record<string, string> = {shop};\n if (error.response) {\n context.response = JSON.stringify(error.body);\n }\n\n logger.error(\n `Unexpected error during session validation: ${error.message}`,\n context,\n );\n\n throw new Response(undefined, {\n status: 500,\n statusText: 'Internal Server Error',\n });\n }\n }\n}\n"],"names":["getSessionTokenHeader","redirectToAuthPage","handleClientErrorFactory","validateShopAndHostParams","redirectWithExitIframe","beginAuth","triggerAfterAuthHook","redirectToShopifyOrAppRoot","CookieNotFound","InvalidHmacError","InvalidOAuthError","HttpResponseError","GraphqlQueryError"],"mappings":";;;;;;;;;;;;;;;MA+Ba,oBAAoB,CAAA;AAKrB,IAAA,GAAG;AAMH,IAAA,MAAM;AACN,IAAA,MAAM;AAEhB,IAAA,WAAA,CAAmB,EAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAc,EAAA;AACnD,QAAA,IAAI,CAAC,GAAG,GAAG,GAAG;AACd,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM;AACpB,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM;IACtB;IAEO,MAAM,sBAAsB,CAAC,OAAgB,EAAA;AAClD,QAAA,MAAM,EAAC,GAAG,EAAE,MAAM,EAAC,GAAG,IAAI;QAE1B,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC;QAChC,MAAM,aAAa,GAAG,GAAG,CAAC,QAAQ,KAAK,MAAM,CAAC,IAAI,CAAC,IAAI;QACvD,MAAM,qBAAqB,GAAG,GAAG,CAAC,QAAQ,KAAK,MAAM,CAAC,IAAI,CAAC,YAAY;AAEvE,QAAA,IAAI,aAAa,IAAI,qBAAqB,EAAE;AAC1C,YAAA,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAE,CAAC;AAClE,YAAA,IAAI,CAAC,IAAI;gBAAE,MAAM,IAAI,QAAQ,CAAC,uBAAuB,EAAE,EAAC,MAAM,EAAE,GAAG,EAAC,CAAC;YAErE,IAAI,aAAa,EAAE;gBACjB,MAAM,MAAM,IAAI,CAAC,sBAAsB,CAAC,OAAO,EAAE,IAAI,CAAC;YACxD;iBAAO;gBACL,MAAM,MAAM,IAAI,CAAC,yBAAyB,CAAC,OAAO,EAAE,IAAI,CAAC;YAC3D;QACF;AAEA,QAAA,IAAI,CAACA,2CAAqB,CAAC,OAAO,CAAC,EAAE;;;;AAInC,YAAA,MAAM,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC;QAC3C;IACF;AAEO,IAAA,MAAM,YAAY,CACvB,OAAgB,EAChB,cAA8B,EAAA;QAE9B,MAAM,EAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAC,GAAG,IAAI;AAElC,QAAA,MAAM,EAAC,IAAI,EAAE,OAAO,EAAC,GAAG,cAAc;QAEtC,IAAI,CAAC,OAAO,EAAE;YACZ,MAAM,CAAC,KAAK,CAAC,wCAAwC,EAAE,EAAC,IAAI,EAAC,CAAC;AAC9D,YAAA,MAAMC,qCAAkB,CAAC,EAAC,MAAM,EAAU,GAAG,EAAC,EAAE,OAAO,EAAE,IAAI,CAAC;QAChE;aAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE;YAC3C,MAAM,CAAC,KAAK,CACV,2DAA2D,EAC3D,EAAC,IAAI,EAAC,CACP;AACD,YAAA,MAAMA,qCAAkB,CAAC,EAAC,MAAM,EAAU,GAAG,EAAC,EAAE,OAAO,EAAE,IAAI,CAAC;QAChE;QAEA,MAAM,CAAC,KAAK,CAAC,uBAAuB,EAAE,EAAC,IAAI,EAAC,CAAC;AAE7C,QAAA,OAAO,OAAQ;IACjB;AAEO,IAAA,iBAAiB,CAAC,OAAgB,EAAA;QACvC,MAAM,EAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAC,GAAG,IAAI;AAClC,QAAA,OAAOC,0CAAwB,CAAC;YAC9B,OAAO;YACP,OAAO,EAAE,OAAO,EAAC,OAAO,EAAE,KAAK,EAAiB,KAAI;gBAClD,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,KAAK,GAAG,EAAE;AAC/B,oBAAA,MAAM,MAAMD,qCAAkB,CAC5B,EAAC,GAAG,EAAE,MAAc,CAAC,EACrB,OAAO,EACP,OAAO,CAAC,IAAI,CACb;gBACH;YACF,CAAC;AACF,SAAA,CAAC;IACJ;IAEQ,MAAM,qBAAqB,CAAC,OAAgB,EAAA;QAClD,MAAM,EAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAC,GAAG,IAAI;QAElCE,mDAAyB,CAAC,EAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAC,EAAE,OAAO,CAAC;QAEzD,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC;QAChC,IAAI,IAAI,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC;;QAGvC,MAAM,CAAC,KAAK,CAAC,mCAAmC,EAAE,EAAC,IAAI,EAAC,CAAC;QAEzD,IAAI,EAAE,MAAM,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,EAAE;AAC5C,YAAA,MAAM,CAAC,IAAI,CAAC,mDAAmD,CAAC;AAChE,YAAA,MAAM,IAAI,QAAQ,CAAC,SAAS,EAAE;AAC5B,gBAAA,MAAM,EAAE,GAAG;AACX,gBAAA,UAAU,EAAE,aAAa;AAC1B,aAAA,CAAC;QACJ;QAEA,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC;AAC5D,QAAA,MAAM,UAAU,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,GAAG;QAE3D,IAAI,CAAC,cAAc,EAAE;AACnB,YAAA,MAAM,CAAC,IAAI,CAAC,qDAAqD,EAAE;gBACjE,IAAI;AACL,aAAA,CAAC;YACF,IAAI,UAAU,EAAE;AACd,gBAAAC,6CAAsB,CAAC,EAAC,GAAG,EAAE,MAAc,CAAC,EAAE,OAAO,EAAE,IAAK,CAAC;YAC/D;iBAAO;AACL,gBAAA,MAAM,MAAMC,mBAAS,CAAC,EAAC,GAAG,EAAE,MAAc,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,IAAK,CAAC;YACrE;QACF;AAEA,QAAA,IAAI,GAAG,IAAI,IAAI,cAAc,CAAC,IAAI;AAElC,QAAA,IAAI,MAAM,CAAC,aAAa,IAAI,CAAC,UAAU,EAAE;AACvC,YAAA,IAAI;AACF,gBAAA,MAAM,CAAC,KAAK,CAAC,oDAAoD,EAAE;oBACjE,IAAI;AACL,iBAAA,CAAC;AACF,gBAAA,MAAM,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC;gBAEtC,MAAM,CAAC,KAAK,CAAC,+CAA+C,EAAE,EAAC,IAAI,EAAC,CAAC;YACvE;YAAE,OAAO,KAAK,EAAE;gBACd,MAAM,IAAI,CAAC,2BAA2B,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC;YAC9D;QACF;IACF;AAEQ,IAAA,MAAM,sBAAsB,CAClC,OAAgB,EAChB,IAAY,EAAA;QAEZ,MAAM,EAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAC,GAAG,IAAI;QAElC,MAAM,CAAC,IAAI,CAAC,8BAA8B,EAAE,EAAC,IAAI,EAAC,CAAC;;QAGnD,IACE,MAAM,CAAC,aAAa;YACpB,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,KAAK,QAAQ,EAClD;YACA,MAAM,CAAC,KAAK,CAAC,iDAAiD,EAAE,EAAC,IAAI,EAAC,CAAC;AACvE,YAAA,MAAMD,6CAAsB,CAAC,EAAC,GAAG,EAAE,MAAc,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC;QACpE;aAAO;AACL,YAAA,MAAM,MAAMC,mBAAS,CAAC,EAAC,GAAG,EAAE,MAAc,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC;QACpE;IACF;AAEQ,IAAA,MAAM,yBAAyB,CACrC,OAAgB,EAChB,IAAY,EAAA;QAEZ,MAAM,EAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAC,GAAG,IAAI;QAElC,MAAM,CAAC,IAAI,CAAC,iCAAiC,EAAE,EAAC,IAAI,EAAC,CAAC;AAEtD,QAAA,IAAI;AACF,YAAA,MAAM,EAAC,OAAO,EAAE,OAAO,EAAE,eAAe,EAAC,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC;AAClE,gBAAA,UAAU,EAAE,OAAO;AACpB,aAAA,CAAC;YAEF,MAAM,MAAM,CAAC,cAAe,CAAC,YAAY,CAAC,OAAO,CAAC;YAElD,IAAI,MAAM,CAAC,eAAe,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE;AAC/C,gBAAA,MAAM,CAAC,IAAI,CAAC,oDAAoD,EAAE;oBAChE,IAAI;AACL,iBAAA,CAAC;AACF,gBAAA,MAAMA,mBAAS,CAAC,EAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAC,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC;YAC7D;AAEA,YAAA,MAAM,CAAC,KAAK,CAAC,sDAAsD,EAAE;gBACnE,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,QAAQ,EAAE,OAAO,CAAC,QAAQ;AAC3B,aAAA,CAAC;AAEF,YAAA,MAAMC,yCAAoB,CACxB,EAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAC,EACrB,OAAO,EACP,OAAO,EACP,IAAI,CACL;AAED,YAAA,MAAM,MAAMC,qDAA0B,CACpC,OAAO,EACP,EAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAC,EACrB,eAAe,CAChB;QACH;QAAE,OAAO,KAAK,EAAE;YACd,IAAI,KAAK,YAAY,QAAQ;AAAE,gBAAA,MAAM,KAAK;YAE1C,MAAM,MAAM,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC;QAC3D;IACF;IAEQ,MAAM,iBAAiB,CAC7B,OAAgB,EAAA;QAEhB,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC;QACzD,OAAO,IAAI,CAAC,MAAM,CAAC,cAAe,CAAC,WAAW,CAAC,SAAU,CAAC;IAC5D;IAEQ,MAAM,iBAAiB,CAAC,OAAgB,EAAA;QAC9C,OAAO,OAAO,CAAC,MAAM,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC;IACzD;IAEQ,MAAM,mBAAmB,CAC/B,OAAgB,EAAA;AAEhB,QAAA,MAAM,EAAC,GAAG,EAAC,GAAG,IAAI;QAClB,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC;QAChC,MAAM,IAAI,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC;AAEzC,QAAA,OAAO;cACH,GAAG,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI;AAC/B,cAAE,GAAG,CAAC,OAAO,CAAC,YAAY,CAAC,EAAC,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,EAAC,CAAC;IACtE;IAEQ,MAAM,WAAW,CAAC,OAAgB,EAAA;AACxC,QAAA,MAAM,EAAC,GAAG,EAAC,GAAG,IAAI;QAElB,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC;YACrC,OAAO;AACR,SAAA,CAAC;QAEF,MAAM,MAAM,CAAC,OAAO,CAAC,CAAA;;;;;;AAMpB,IAAA,CAAA,CAAC;IACJ;AAEQ,IAAA,MAAM,kBAAkB,CAC9B,KAAY,EACZ,OAAgB,EAChB,IAAY,EAAA;AAEZ,QAAA,MAAM,EAAC,MAAM,EAAC,GAAG,IAAI;AACrB,QAAA,MAAM,CAAC,KAAK,CAAC,6BAA6B,EAAE,EAAC,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,OAAO,EAAC,CAAC;AAEzE,QAAA,IAAI,KAAK,YAAYC,yBAAc,EAAE;YACnC,OAAO,IAAI,CAAC,sBAAsB,CAAC,OAAO,EAAE,IAAI,CAAC;QACnD;QAEA,IACE,KAAK,YAAYC,2BAAgB;YACjC,KAAK,YAAYC,4BAAiB,EAClC;AACA,YAAA,OAAO,IAAI,QAAQ,CAAC,SAAS,EAAE;AAC7B,gBAAA,MAAM,EAAE,GAAG;AACX,gBAAA,UAAU,EAAE,uBAAuB;AACpC,aAAA,CAAC;QACJ;AAEA,QAAA,OAAO,IAAI,QAAQ,CAAC,SAAS,EAAE;AAC7B,YAAA,MAAM,EAAE,GAAG;AACX,YAAA,UAAU,EAAE,uBAAuB;AACpC,SAAA,CAAC;IACJ;AAEQ,IAAA,MAAM,2BAA2B,CACvC,KAAY,EACZ,OAAgB,EAChB,IAAY,EAAA;QAEZ,MAAM,EAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAC,GAAG,IAAI;AAClC,QAAA,IAAI,KAAK,YAAYC,4BAAiB,EAAE;YACtC,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,KAAK,GAAG,EAAE;AAC/B,gBAAA,MAAM,CAAC,IAAI,CAAC,uDAAuD,EAAE;oBACnE,IAAI;AACL,iBAAA,CAAC;AACF,gBAAA,MAAM,MAAMN,mBAAS,CAAC,EAAC,GAAG,EAAE,MAAc,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC;YACpE;iBAAO;AACL,gBAAA,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;AAC5D,gBAAA,MAAM,CAAC,KAAK,CAAC,CAAA,4CAAA,EAA+C,OAAO,EAAE,EAAE;oBACrE,IAAI;AACL,iBAAA,CAAC;AAEF,gBAAA,MAAM,IAAI,QAAQ,CAAC,SAAS,EAAE;AAC5B,oBAAA,MAAM,EAAE,KAAK,CAAC,QAAQ,CAAC,IAAI;AAC3B,oBAAA,UAAU,EAAE,KAAK,CAAC,QAAQ,CAAC,UAAU;AACtC,iBAAA,CAAC;YACJ;QACF;AAAO,aAAA,IAAI,KAAK,YAAYO,4BAAiB,EAAE;AAC7C,YAAA,MAAM,OAAO,GAA2B,EAAC,IAAI,EAAC;AAC9C,YAAA,IAAI,KAAK,CAAC,QAAQ,EAAE;gBAClB,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC;YAC/C;YAEA,MAAM,CAAC,KAAK,CACV,CAAA,4CAAA,EAA+C,KAAK,CAAC,OAAO,CAAA,CAAE,EAC9D,OAAO,CACR;AAED,YAAA,MAAM,IAAI,QAAQ,CAAC,SAAS,EAAE;AAC5B,gBAAA,MAAM,EAAE,GAAG;AACX,gBAAA,UAAU,EAAE,uBAAuB;AACpC,aAAA,CAAC;QACJ;IACF;AACD;;;;"}