@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":"merchant-custom-app.js","sources":["../../../../../../../src/server/authenticate/admin/strategies/merchant-custom-app.ts"],"sourcesContent":[null],"names":["getShopFromRequest","handleClientErrorFactory","ShopifyError"],"mappings":";;;;;;;;;MAgBa,kBAAkB,CAAA;AAGnB,IAAA,GAAG;AAMH,IAAA,MAAM;AACN,IAAA,MAAM;AAEhB,IAAA,WAAA,CAAmB,EAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAgC,EAAA;AACrE,QAAA,IAAI,CAAC,GAAG,GAAG,GAAG;AACd,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM;AACpB,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM;;IAGf,MAAM,sBAAsB,CAAC,OAAgB,EAAA;AAClD,QAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,gDAAgD,EAAE;AAClE,YAAA,IAAI,EAAEA,qCAAkB,CAAC,OAAO,CAAC;AAClC,SAAA,CAAC;;AAGG,IAAA,MAAM,YAAY,CACvB,QAAiB,EACjB,cAA8B,EAAA;AAE9B,QAAA,MAAM,EAAC,IAAI,EAAC,GAAG,cAAc;QAE7B,IAAI,CAAC,MAAM,CAAC,KAAK,CACf,uEAAuE,EACvE,EAAC,IAAI,EAAC,CACP;AACD,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,gBAAgB,CAAC,IAAI,CAAC;AAEvD,QAAA,OAAO,OAAO;;AAGT,IAAA,iBAAiB,CAAC,OAAgB,EAAA;AACvC,QAAA,OAAOC,0CAAwB,CAAC;YAC9B,OAAO;AACP,YAAA,OAAO,EAAE,OAAO,EAAC,KAAK,EAAiB,KAAI;gBACzC,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,KAAK,GAAG,EAAE;AAC/B,oBAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CACd,oPAAoP,CACrP;AACD,oBAAA,MAAM,IAAIC,uBAAY,CACpB,8CAA8C,CAC/C;;aAEJ;AACF,SAAA,CAAC;;AAEL;;;;"}
1
+ {"version":3,"file":"merchant-custom-app.js","sources":["../../../../../../../src/server/authenticate/admin/strategies/merchant-custom-app.ts"],"sourcesContent":["import {\n Session,\n Shopify,\n ShopifyError,\n ShopifyRestResources,\n} from '@shopify/shopify-api';\n\nimport {AppConfig, AppConfigArg} from '../../../config-types';\nimport {BasicParams} from '../../../types';\nimport {ApiConfigWithFutureFlags, ApiFutureFlags} from '../../../future/flags';\nimport {HandleAdminClientError} from '../../../clients';\nimport {handleClientErrorFactory} from '../helpers';\nimport {getShopFromRequest} from '../../helpers';\n\nimport {AuthorizationStrategy, OnErrorOptions, SessionContext} from './types';\n\nexport class MerchantCustomAuth<Config extends AppConfigArg>\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<Config['future']>) {\n this.api = api;\n this.config = config;\n this.logger = logger;\n }\n\n public async respondToOAuthRequests(request: Request): Promise<void> {\n this.logger.debug('Skipping OAuth request for merchant custom app', {\n shop: getShopFromRequest(request),\n });\n }\n\n public async authenticate(\n _request: Request,\n sessionContext: SessionContext,\n ): Promise<Session | never> {\n const {shop} = sessionContext;\n\n this.logger.debug(\n 'Building session from configured access token for merchant custom app',\n {shop},\n );\n const session = this.api.session.customAppSession(shop);\n\n return session;\n }\n\n public handleClientError(request: Request): HandleAdminClientError {\n return handleClientErrorFactory({\n request,\n onError: async ({error}: OnErrorOptions) => {\n if (error.response.code === 401) {\n this.logger.info(\n 'Request failed with 401. Review your API credentials or generate new tokens. https://shopify.dev/docs/apps/build/authentication-authorization/access-token-types/generate-app-access-tokens-admin#rotating-api-credentials-for-admin-created-apps ',\n );\n throw new ShopifyError(\n 'Unauthorized: Access token has been revoked.',\n );\n }\n },\n });\n }\n}\n"],"names":["getShopFromRequest","handleClientErrorFactory","ShopifyError"],"mappings":";;;;;;;;;MAgBa,kBAAkB,CAAA;AAGnB,IAAA,GAAG;AAMH,IAAA,MAAM;AACN,IAAA,MAAM;AAEhB,IAAA,WAAA,CAAmB,EAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAgC,EAAA;AACrE,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,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,gDAAgD,EAAE;AAClE,YAAA,IAAI,EAAEA,qCAAkB,CAAC,OAAO,CAAC;AAClC,SAAA,CAAC;IACJ;AAEO,IAAA,MAAM,YAAY,CACvB,QAAiB,EACjB,cAA8B,EAAA;AAE9B,QAAA,MAAM,EAAC,IAAI,EAAC,GAAG,cAAc;QAE7B,IAAI,CAAC,MAAM,CAAC,KAAK,CACf,uEAAuE,EACvE,EAAC,IAAI,EAAC,CACP;AACD,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,gBAAgB,CAAC,IAAI,CAAC;AAEvD,QAAA,OAAO,OAAO;IAChB;AAEO,IAAA,iBAAiB,CAAC,OAAgB,EAAA;AACvC,QAAA,OAAOC,0CAAwB,CAAC;YAC9B,OAAO;AACP,YAAA,OAAO,EAAE,OAAO,EAAC,KAAK,EAAiB,KAAI;gBACzC,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,KAAK,GAAG,EAAE;AAC/B,oBAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CACd,oPAAoP,CACrP;AACD,oBAAA,MAAM,IAAIC,uBAAY,CACpB,8CAA8C,CAC/C;gBACH;YACF,CAAC;AACF,SAAA,CAAC;IACJ;AACD;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"token-exchange.js","sources":["../../../../../../../src/server/authenticate/admin/strategies/token-exchange.ts"],"sourcesContent":[null],"names":["InvalidJwtError","RequestedTokenType","handleClientErrorFactory","getShopFromRequest","invalidateAccessToken","respondToInvalidSessionToken","HttpResponseError","triggerAfterAuthHook"],"mappings":"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"}
1
+ {"version":3,"file":"token-exchange.js","sources":["../../../../../../../src/server/authenticate/admin/strategies/token-exchange.ts"],"sourcesContent":["import {\n HttpResponseError,\n InvalidJwtError,\n RequestedTokenType,\n Session,\n Shopify,\n ShopifyRestResources,\n} from '@shopify/shopify-api';\n\nimport {AppConfig, AppConfigArg} from '../../../config-types';\nimport {BasicParams} from '../../../types';\nimport {\n respondToInvalidSessionToken,\n invalidateAccessToken,\n getShopFromRequest,\n} from '../../helpers';\nimport {handleClientErrorFactory, triggerAfterAuthHook} 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 TokenExchangeStrategy<Config extends AppConfigArg>\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<Config['future']>) {\n this.api = api;\n this.config = config;\n this.logger = logger;\n }\n\n public async respondToOAuthRequests(_request: Request): Promise<void> {}\n\n public async authenticate(\n request: Request,\n sessionContext: SessionContext,\n ): Promise<Session> {\n const {api, config, logger} = this;\n const {shop, session, sessionToken} = sessionContext;\n\n if (!sessionToken) throw new InvalidJwtError();\n\n if (!session || !session.isActive(undefined)) {\n logger.info('No valid session found', {shop});\n logger.info('Requesting offline access token', {shop});\n const {session: offlineSession} = await this.exchangeToken({\n request,\n sessionToken,\n shop,\n requestedTokenType: RequestedTokenType.OfflineAccessToken,\n });\n\n await config.sessionStorage!.storeSession(offlineSession);\n\n let newSession = offlineSession;\n\n if (config.useOnlineTokens) {\n logger.info('Requesting online access token', {shop});\n const {session: onlineSession} = await this.exchangeToken({\n request,\n sessionToken,\n shop,\n requestedTokenType: RequestedTokenType.OnlineAccessToken,\n });\n\n await config.sessionStorage!.storeSession(onlineSession);\n newSession = onlineSession;\n }\n\n logger.debug('Request is valid, loaded session from session token', {\n shop: newSession.shop,\n isOnline: newSession.isOnline,\n });\n\n try {\n await this.handleAfterAuthHook(\n {api, config, logger},\n newSession,\n request,\n sessionToken,\n );\n } catch (errorOrResponse) {\n if (errorOrResponse instanceof Response) {\n throw errorOrResponse;\n }\n\n throw new Response(undefined, {\n status: 500,\n statusText: 'Internal Server Error',\n });\n }\n\n return newSession;\n }\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 logger.debug('Responding to invalid access token', {\n shop: getShopFromRequest(request),\n });\n await invalidateAccessToken({config, api, logger}, session);\n\n respondToInvalidSessionToken({\n params: {config, api, logger},\n request,\n });\n }\n },\n });\n }\n\n private async exchangeToken({\n request,\n shop,\n sessionToken,\n requestedTokenType,\n }: {\n request: Request;\n shop: string;\n sessionToken: string;\n requestedTokenType: RequestedTokenType;\n }): Promise<{session: Session}> {\n const {api, config, logger} = this;\n\n try {\n return await api.auth.tokenExchange({\n sessionToken,\n shop,\n requestedTokenType,\n });\n } catch (error) {\n if (\n error instanceof InvalidJwtError ||\n (error instanceof HttpResponseError &&\n error.response.code === 400 &&\n error.response.body?.error === 'invalid_subject_token')\n ) {\n throw respondToInvalidSessionToken({\n params: {api, config, logger},\n request,\n retryRequest: true,\n });\n }\n\n throw new Response(undefined, {\n status: 500,\n statusText: 'Internal Server Error',\n });\n }\n }\n\n private async handleAfterAuthHook(\n params: BasicParams,\n session: Session,\n request: Request,\n sessionToken: string,\n ) {\n const {config} = params;\n await config.idempotentPromiseHandler.handlePromise({\n promiseFunction: () => {\n return triggerAfterAuthHook(params, session, request, this);\n },\n identifier: sessionToken,\n });\n }\n}\n"],"names":["InvalidJwtError","RequestedTokenType","handleClientErrorFactory","getShopFromRequest","invalidateAccessToken","respondToInvalidSessionToken","HttpResponseError","triggerAfterAuthHook"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"const.js","sources":["../../../../../src/server/authenticate/const.ts"],"sourcesContent":[null],"names":[],"mappings":";;AAAO,MAAM,cAAc,GACzB;AAEK,MAAM,iBAAiB,GAC5B;AAEW,MAAA,4BAA4B,GAAG;AAC1C,IAAA,yCAAyC,EAAE,GAAG;;;;;;;"}
1
+ {"version":3,"file":"const.js","sources":["../../../../../src/server/authenticate/const.ts"],"sourcesContent":["export const APP_BRIDGE_URL =\n 'https://cdn.shopify.com/shopifycloud/app-bridge.js';\n\nexport const REAUTH_URL_HEADER =\n 'X-Shopify-API-Request-Failure-Reauthorize-Url';\n\nexport const RETRY_INVALID_SESSION_HEADER = {\n 'X-Shopify-Retry-Invalid-Session-Request': '1',\n};\n\nexport const CORS_HEADERS = {\n 'Access-Control-Allow-Origin': '*',\n 'Access-Control-Allow-Headers': 'Authorization',\n 'Access-Control-Expose-Headers': REAUTH_URL_HEADER,\n};\n"],"names":[],"mappings":";;AAAO,MAAM,cAAc,GACzB;AAEK,MAAM,iBAAiB,GAC5B;AAEK,MAAM,4BAA4B,GAAG;AAC1C,IAAA,yCAAyC,EAAE,GAAG;;;;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"authenticate.js","sources":["../../../../../../src/server/authenticate/flow/authenticate.ts"],"sourcesContent":[null],"names":["adminClientFactory"],"mappings":";;;;AAQM,SAAU,uBAAuB,CAGrC,MAAmB,EAAA;IACnB,MAAM,EAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAC,GAAG,MAAM;AAEpC,IAAA,OAAO,eAAe,YAAY,CAChC,OAAgB,EAAA;AAEhB,QAAA,MAAM,CAAC,IAAI,CAAC,6BAA6B,CAAC;AAE1C,QAAA,IAAI,OAAO,CAAC,MAAM,KAAK,MAAM,EAAE;AAC7B,YAAA,MAAM,CAAC,KAAK,CACV,uEAAuE,EACvE,EAAC,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAC,CAC3C;AACD,YAAA,MAAM,IAAI,QAAQ,CAAC,SAAS,EAAE;AAC5B,gBAAA,MAAM,EAAE,GAAG;AACX,gBAAA,UAAU,EAAE,oBAAoB;AACjC,aAAA,CAAC;;AAGJ,QAAA,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,IAAI,EAAE;QACpC,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC;YACrC,OAAO;AACP,YAAA,UAAU,EAAE,OAAO;AACpB,SAAA,CAAC;AAEF,QAAA,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;AACjB,YAAA,MAAM,CAAC,KAAK,CAAC,kCAAkC,EAAE,EAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAC,CAAC;AAEzE,YAAA,MAAM,IAAI,QAAQ,CAAC,SAAS,EAAE;AAC5B,gBAAA,MAAM,EAAE,GAAG;AACX,gBAAA,UAAU,EAAE,aAAa;AAC1B,aAAA,CAAC;;QAGJ,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;AAEnC,QAAA,MAAM,CAAC,KAAK,CAAC,uDAAuD,EAAE;YACpE,IAAI,EAAE,OAAO,CAAC,cAAc;AAC7B,SAAA,CAAC;AAEF,QAAA,MAAM,SAAS,GAAG,GAAG,CAAC,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,cAAc,CAAC;QAClE,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,cAAe,CAAC,WAAW,CAAC,SAAS,CAAC;QAEnE,IAAI,CAAC,OAAO,EAAE;AACZ,YAAA,MAAM,CAAC,IAAI,CAAC,qCAAqC,EAAE;gBACjD,IAAI,EAAE,OAAO,CAAC,cAAc;AAC7B,aAAA,CAAC;AACF,YAAA,MAAM,IAAI,QAAQ,CAAC,SAAS,EAAE;AAC5B,gBAAA,MAAM,EAAE,GAAG;AACX,gBAAA,UAAU,EAAE,aAAa;AAC1B,aAAA,CAAC;;AAGJ,QAAA,MAAM,CAAC,KAAK,CAAC,sCAAsC,EAAE,EAAC,IAAI,EAAE,OAAO,CAAC,IAAI,EAAC,CAAC;QAE1E,OAAO;YACL,OAAO;YACP,OAAO;YACP,KAAK,EAAEA,0BAAkB,CAAuB,EAAC,MAAM,EAAE,OAAO,EAAC,CAAC;SACnE;AACH,KAAC;AACH;;;;"}
1
+ {"version":3,"file":"authenticate.js","sources":["../../../../../../src/server/authenticate/flow/authenticate.ts"],"sourcesContent":["import {ShopifyRestResources} from '@shopify/shopify-api';\n\nimport {AppConfigArg} from '../../config-types';\nimport {adminClientFactory} from '../../clients/admin';\nimport {BasicParams} from '../../types';\n\nimport type {AuthenticateFlow, FlowContext} from './types';\n\nexport function authenticateFlowFactory<\n ConfigArg extends AppConfigArg,\n Resources extends ShopifyRestResources = ShopifyRestResources,\n>(params: BasicParams): AuthenticateFlow<ConfigArg, Resources> {\n const {api, config, logger} = params;\n\n return async function authenticate(\n request: Request,\n ): Promise<FlowContext<ConfigArg, Resources>> {\n logger.info('Authenticating flow request');\n\n if (request.method !== 'POST') {\n logger.debug(\n 'Received a non-POST request for flow. Only POST requests are allowed.',\n {url: request.url, method: request.method},\n );\n throw new Response(undefined, {\n status: 405,\n statusText: 'Method not allowed',\n });\n }\n\n const rawBody = await request.text();\n const result = await api.flow.validate({\n rawBody,\n rawRequest: request,\n });\n\n if (!result.valid) {\n logger.error('Received an invalid flow request', {reason: result.reason});\n\n throw new Response(undefined, {\n status: 400,\n statusText: 'Bad Request',\n });\n }\n\n const payload = JSON.parse(rawBody);\n\n logger.debug('Flow request is valid, looking for an offline session', {\n shop: payload.shopify_domain,\n });\n\n const sessionId = api.session.getOfflineId(payload.shopify_domain);\n const session = await config.sessionStorage!.loadSession(sessionId);\n\n if (!session) {\n logger.info('Flow request could not find session', {\n shop: payload.shopify_domain,\n });\n throw new Response(undefined, {\n status: 400,\n statusText: 'Bad Request',\n });\n }\n\n logger.debug('Found a session for the flow request', {shop: session.shop});\n\n return {\n session,\n payload,\n admin: adminClientFactory<ConfigArg, Resources>({params, session}),\n };\n };\n}\n"],"names":["adminClientFactory"],"mappings":";;;;AAQM,SAAU,uBAAuB,CAGrC,MAAmB,EAAA;IACnB,MAAM,EAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAC,GAAG,MAAM;AAEpC,IAAA,OAAO,eAAe,YAAY,CAChC,OAAgB,EAAA;AAEhB,QAAA,MAAM,CAAC,IAAI,CAAC,6BAA6B,CAAC;AAE1C,QAAA,IAAI,OAAO,CAAC,MAAM,KAAK,MAAM,EAAE;AAC7B,YAAA,MAAM,CAAC,KAAK,CACV,uEAAuE,EACvE,EAAC,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAC,CAC3C;AACD,YAAA,MAAM,IAAI,QAAQ,CAAC,SAAS,EAAE;AAC5B,gBAAA,MAAM,EAAE,GAAG;AACX,gBAAA,UAAU,EAAE,oBAAoB;AACjC,aAAA,CAAC;QACJ;AAEA,QAAA,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,IAAI,EAAE;QACpC,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC;YACrC,OAAO;AACP,YAAA,UAAU,EAAE,OAAO;AACpB,SAAA,CAAC;AAEF,QAAA,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;AACjB,YAAA,MAAM,CAAC,KAAK,CAAC,kCAAkC,EAAE,EAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAC,CAAC;AAEzE,YAAA,MAAM,IAAI,QAAQ,CAAC,SAAS,EAAE;AAC5B,gBAAA,MAAM,EAAE,GAAG;AACX,gBAAA,UAAU,EAAE,aAAa;AAC1B,aAAA,CAAC;QACJ;QAEA,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;AAEnC,QAAA,MAAM,CAAC,KAAK,CAAC,uDAAuD,EAAE;YACpE,IAAI,EAAE,OAAO,CAAC,cAAc;AAC7B,SAAA,CAAC;AAEF,QAAA,MAAM,SAAS,GAAG,GAAG,CAAC,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,cAAc,CAAC;QAClE,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,cAAe,CAAC,WAAW,CAAC,SAAS,CAAC;QAEnE,IAAI,CAAC,OAAO,EAAE;AACZ,YAAA,MAAM,CAAC,IAAI,CAAC,qCAAqC,EAAE;gBACjD,IAAI,EAAE,OAAO,CAAC,cAAc;AAC7B,aAAA,CAAC;AACF,YAAA,MAAM,IAAI,QAAQ,CAAC,SAAS,EAAE;AAC5B,gBAAA,MAAM,EAAE,GAAG;AACX,gBAAA,UAAU,EAAE,aAAa;AAC1B,aAAA,CAAC;QACJ;AAEA,QAAA,MAAM,CAAC,KAAK,CAAC,sCAAsC,EAAE,EAAC,IAAI,EAAE,OAAO,CAAC,IAAI,EAAC,CAAC;QAE1E,OAAO;YACL,OAAO;YACP,OAAO;YACP,KAAK,EAAEA,0BAAkB,CAAuB,EAAC,MAAM,EAAE,OAAO,EAAC,CAAC;SACnE;AACH,IAAA,CAAC;AACH;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"authenticate.js","sources":["../../../../../../src/server/authenticate/fulfillment-service/authenticate.ts"],"sourcesContent":[null],"names":["ShopifyHeader","createOrLoadOfflineSession","adminClientFactory"],"mappings":";;;;;;;;AAYM,SAAU,qCAAqC,CAGnD,MAAmB,EAAA;AACnB,IAAA,MAAM,EAAC,GAAG,EAAE,MAAM,EAAC,GAAG,MAAM;AAE5B,IAAA,OAAO,eAAe,YAAY,CAChC,OAAgB,EAAA;AAEhB,QAAA,MAAM,CAAC,IAAI,CAAC,4CAA4C,CAAC;AAEzD,QAAA,IAAI,OAAO,CAAC,MAAM,KAAK,MAAM,EAAE;AAC7B,YAAA,MAAM,CAAC,KAAK,CACV,sFAAsF,EACtF,EAAC,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAC,CAC3C;AACD,YAAA,MAAM,IAAI,QAAQ,CAAC,SAAS,EAAE;AAC5B,gBAAA,MAAM,EAAE,GAAG;AACX,gBAAA,UAAU,EAAE,oBAAoB;AACjC,aAAA,CAAC;;AAGJ,QAAA,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,IAAI,EAAE;QACpC,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,kBAAkB,CAAC,QAAQ,CAAC;YACnD,OAAO;AACP,YAAA,UAAU,EAAE,OAAO;AACpB,SAAA,CAAC;AAEF,QAAA,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;AACjB,YAAA,MAAM,CAAC,KAAK,CAAC,iDAAiD,EAAE;gBAC9D,MAAM,EAAE,MAAM,CAAC,MAAM;AACtB,aAAA,CAAC;AAEF,YAAA,MAAM,IAAI,QAAQ,CAAC,SAAS,EAAE;AAC5B,gBAAA,MAAM,EAAE,GAAG;AACX,gBAAA,UAAU,EAAE,aAAa;AAC1B,aAAA,CAAC;;QAGJ,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;AACnC,QAAA,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAACA,wBAAa,CAAC,MAAM,CAAC,IAAI,EAAE;AAE5D,QAAA,MAAM,CAAC,KAAK,CACV,sEAAsE,EACtE;YACE,IAAI;AACL,SAAA,CACF;QAED,MAAM,OAAO,GAAG,MAAMC,qDAA0B,CAAC,IAAI,EAAE,MAAM,CAAC;QAE9D,IAAI,CAAC,OAAO,EAAE;AACZ,YAAA,MAAM,CAAC,IAAI,CAAC,oDAAoD,EAAE;gBAChE,IAAI;AACL,aAAA,CAAC;AACF,YAAA,MAAM,IAAI,QAAQ,CAAC,SAAS,EAAE;AAC5B,gBAAA,MAAM,EAAE,GAAG;AACX,gBAAA,UAAU,EAAE,aAAa;AAC1B,aAAA,CAAC;;AAGJ,QAAA,MAAM,CAAC,KAAK,CAAC,qDAAqD,EAAE;YAClE,IAAI;AACL,SAAA,CAAC;QAEF,OAAO;YACL,OAAO;YACP,OAAO;YACP,KAAK,EAAEC,0BAAkB,CAAuB,EAAC,MAAM,EAAE,OAAO,EAAC,CAAC;SACnE;AACH,KAAC;AACH;;;;"}
1
+ {"version":3,"file":"authenticate.js","sources":["../../../../../../src/server/authenticate/fulfillment-service/authenticate.ts"],"sourcesContent":["import {ShopifyRestResources, ShopifyHeader} from '@shopify/shopify-api';\n\nimport {AppConfigArg} from '../../config-types';\nimport {adminClientFactory} from '../../clients/admin';\nimport {BasicParams} from '../../types';\nimport {createOrLoadOfflineSession} from '../helpers';\n\nimport type {\n AuthenticateFulfillmentService,\n FulfillmentServiceContext,\n} from './types';\n\nexport function authenticateFulfillmentServiceFactory<\n ConfigArg extends AppConfigArg,\n Resources extends ShopifyRestResources = ShopifyRestResources,\n>(params: BasicParams): AuthenticateFulfillmentService<ConfigArg, Resources> {\n const {api, logger} = params;\n\n return async function authenticate(\n request: Request,\n ): Promise<FulfillmentServiceContext<ConfigArg, Resources>> {\n logger.info('Authenticating fulfillment service request');\n\n if (request.method !== 'POST') {\n logger.debug(\n 'Received a non-POST request for fulfillment service. Only POST requests are allowed.',\n {url: request.url, method: request.method},\n );\n throw new Response(undefined, {\n status: 405,\n statusText: 'Method not allowed',\n });\n }\n\n const rawBody = await request.text();\n const result = await api.fulfillmentService.validate({\n rawBody,\n rawRequest: request,\n });\n\n if (!result.valid) {\n logger.error('Received an invalid fulfillment service request', {\n reason: result.reason,\n });\n\n throw new Response(undefined, {\n status: 400,\n statusText: 'Bad Request',\n });\n }\n\n const payload = JSON.parse(rawBody);\n const shop = request.headers.get(ShopifyHeader.Domain) || '';\n\n logger.debug(\n 'Fulfillment service request is valid, looking for an offline session',\n {\n shop,\n },\n );\n\n const session = await createOrLoadOfflineSession(shop, params);\n\n if (!session) {\n logger.info('Fulfillment service request could not find session', {\n shop,\n });\n throw new Response(undefined, {\n status: 400,\n statusText: 'Bad Request',\n });\n }\n\n logger.debug('Found a session for the fulfillment service request', {\n shop,\n });\n\n return {\n session,\n payload,\n admin: adminClientFactory<ConfigArg, Resources>({params, session}),\n };\n };\n}\n"],"names":["ShopifyHeader","createOrLoadOfflineSession","adminClientFactory"],"mappings":";;;;;;;;AAYM,SAAU,qCAAqC,CAGnD,MAAmB,EAAA;AACnB,IAAA,MAAM,EAAC,GAAG,EAAE,MAAM,EAAC,GAAG,MAAM;AAE5B,IAAA,OAAO,eAAe,YAAY,CAChC,OAAgB,EAAA;AAEhB,QAAA,MAAM,CAAC,IAAI,CAAC,4CAA4C,CAAC;AAEzD,QAAA,IAAI,OAAO,CAAC,MAAM,KAAK,MAAM,EAAE;AAC7B,YAAA,MAAM,CAAC,KAAK,CACV,sFAAsF,EACtF,EAAC,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAC,CAC3C;AACD,YAAA,MAAM,IAAI,QAAQ,CAAC,SAAS,EAAE;AAC5B,gBAAA,MAAM,EAAE,GAAG;AACX,gBAAA,UAAU,EAAE,oBAAoB;AACjC,aAAA,CAAC;QACJ;AAEA,QAAA,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,IAAI,EAAE;QACpC,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,kBAAkB,CAAC,QAAQ,CAAC;YACnD,OAAO;AACP,YAAA,UAAU,EAAE,OAAO;AACpB,SAAA,CAAC;AAEF,QAAA,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;AACjB,YAAA,MAAM,CAAC,KAAK,CAAC,iDAAiD,EAAE;gBAC9D,MAAM,EAAE,MAAM,CAAC,MAAM;AACtB,aAAA,CAAC;AAEF,YAAA,MAAM,IAAI,QAAQ,CAAC,SAAS,EAAE;AAC5B,gBAAA,MAAM,EAAE,GAAG;AACX,gBAAA,UAAU,EAAE,aAAa;AAC1B,aAAA,CAAC;QACJ;QAEA,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;AACnC,QAAA,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAACA,wBAAa,CAAC,MAAM,CAAC,IAAI,EAAE;AAE5D,QAAA,MAAM,CAAC,KAAK,CACV,sEAAsE,EACtE;YACE,IAAI;AACL,SAAA,CACF;QAED,MAAM,OAAO,GAAG,MAAMC,qDAA0B,CAAC,IAAI,EAAE,MAAM,CAAC;QAE9D,IAAI,CAAC,OAAO,EAAE;AACZ,YAAA,MAAM,CAAC,IAAI,CAAC,oDAAoD,EAAE;gBAChE,IAAI;AACL,aAAA,CAAC;AACF,YAAA,MAAM,IAAI,QAAQ,CAAC,SAAS,EAAE;AAC5B,gBAAA,MAAM,EAAE,GAAG;AACX,gBAAA,UAAU,EAAE,aAAa;AAC1B,aAAA,CAAC;QACJ;AAEA,QAAA,MAAM,CAAC,KAAK,CAAC,qDAAqD,EAAE;YAClE,IAAI;AACL,SAAA,CAAC;QAEF,OAAO;YACL,OAAO;YACP,OAAO;YACP,KAAK,EAAEC,0BAAkB,CAAuB,EAAC,MAAM,EAAE,OAAO,EAAC,CAAC;SACnE;AACH,IAAA,CAAC;AACH;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"add-response-headers.js","sources":["../../../../../../src/server/authenticate/helpers/add-response-headers.ts"],"sourcesContent":[null],"names":[],"mappings":";;AAOM,SAAU,iCAAiC,CAC/C,MAAmB,EAAA;AAEnB,IAAA,MAAM,EAAC,GAAG,EAAE,MAAM,EAAC,GAAG,MAAM;IAE5B,OAAO,UAAU,OAAgB,EAAE,OAAgB,EAAA;QACjD,MAAM,EAAC,YAAY,EAAC,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC;AAC3C,QAAA,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAE,CAAC;QAE9D,0BAA0B,CAAC,OAAO,EAAE,MAAM,CAAC,aAAa,EAAE,IAAI,CAAC;AACjE,KAAC;AACH;SAEgB,0BAA0B,CACxC,OAAgB,EAChB,aAAsB,EACtB,IAA+B,EAAA;IAE/B,IAAI,IAAI,EAAE;AACR,QAAA,OAAO,CAAC,GAAG,CACT,MAAM,EACN,mFAAmF,CACpF;;IAGH,IAAI,aAAa,EAAE;QACjB,IAAI,IAAI,EAAE;YACR,OAAO,CAAC,GAAG,CACT,yBAAyB,EACzB,CAA2B,wBAAA,EAAA,IAAI,CAAkG,gGAAA,CAAA,CAClI;;;SAEE;AACL,QAAA,OAAO,CAAC,GAAG,CAAC,yBAAyB,EAAE,CAAA,uBAAA,CAAyB,CAAC;;AAErE;;;;;"}
1
+ {"version":3,"file":"add-response-headers.js","sources":["../../../../../../src/server/authenticate/helpers/add-response-headers.ts"],"sourcesContent":["import type {BasicParams} from '../../types';\n\nexport type AddDocumentResponseHeadersFunction = (\n request: Request,\n headers: Headers,\n) => void;\n\nexport function addDocumentResponseHeadersFactory(\n params: BasicParams,\n): AddDocumentResponseHeadersFunction {\n const {api, config} = params;\n\n return function (request: Request, headers: Headers) {\n const {searchParams} = new URL(request.url);\n const shop = api.utils.sanitizeShop(searchParams.get('shop')!);\n\n addDocumentResponseHeaders(headers, config.isEmbeddedApp, shop);\n };\n}\n\nexport function addDocumentResponseHeaders(\n headers: Headers,\n isEmbeddedApp: boolean,\n shop: string | null | undefined,\n) {\n if (shop) {\n headers.set(\n 'Link',\n '<https://cdn.shopify.com/shopifycloud/app-bridge.js>; rel=\"preload\"; as=\"script\";',\n );\n }\n\n if (isEmbeddedApp) {\n if (shop) {\n headers.set(\n 'Content-Security-Policy',\n `frame-ancestors https://${shop} https://admin.shopify.com https://*.spin.dev https://admin.myshopify.io https://admin.shop.dev;`,\n );\n }\n } else {\n headers.set('Content-Security-Policy', `frame-ancestors 'none';`);\n }\n}\n"],"names":[],"mappings":";;AAOM,SAAU,iCAAiC,CAC/C,MAAmB,EAAA;AAEnB,IAAA,MAAM,EAAC,GAAG,EAAE,MAAM,EAAC,GAAG,MAAM;IAE5B,OAAO,UAAU,OAAgB,EAAE,OAAgB,EAAA;QACjD,MAAM,EAAC,YAAY,EAAC,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC;AAC3C,QAAA,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAE,CAAC;QAE9D,0BAA0B,CAAC,OAAO,EAAE,MAAM,CAAC,aAAa,EAAE,IAAI,CAAC;AACjE,IAAA,CAAC;AACH;SAEgB,0BAA0B,CACxC,OAAgB,EAChB,aAAsB,EACtB,IAA+B,EAAA;IAE/B,IAAI,IAAI,EAAE;AACR,QAAA,OAAO,CAAC,GAAG,CACT,MAAM,EACN,mFAAmF,CACpF;IACH;IAEA,IAAI,aAAa,EAAE;QACjB,IAAI,IAAI,EAAE;YACR,OAAO,CAAC,GAAG,CACT,yBAAyB,EACzB,CAAA,wBAAA,EAA2B,IAAI,CAAA,gGAAA,CAAkG,CAClI;QACH;IACF;SAAO;AACL,QAAA,OAAO,CAAC,GAAG,CAAC,yBAAyB,EAAE,CAAA,uBAAA,CAAyB,CAAC;IACnE;AACF;;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"app-bridge-url.js","sources":["../../../../../../src/server/authenticate/helpers/app-bridge-url.ts"],"sourcesContent":[null],"names":["APP_BRIDGE_URL"],"mappings":";;;;AAEA,IAAI,oBAAwC;AACtC,SAAU,uBAAuB,CAAC,GAAW,EAAA;IACjD,oBAAoB,GAAG,GAAG;AAC5B;SAEgB,YAAY,GAAA;IAC1B,OAAO,oBAAoB,IAAIA,qBAAc;AAC/C;;;;;"}
1
+ {"version":3,"file":"app-bridge-url.js","sources":["../../../../../../src/server/authenticate/helpers/app-bridge-url.ts"],"sourcesContent":["import {APP_BRIDGE_URL} from '../const';\n\nlet appBridgeUrlOverride: string | undefined;\nexport function setAppBridgeUrlOverride(url: string) {\n appBridgeUrlOverride = url;\n}\n\nexport function appBridgeUrl() {\n return appBridgeUrlOverride || APP_BRIDGE_URL;\n}\n"],"names":["APP_BRIDGE_URL"],"mappings":";;;;AAEA,IAAI,oBAAwC;AACtC,SAAU,uBAAuB,CAAC,GAAW,EAAA;IACjD,oBAAoB,GAAG,GAAG;AAC5B;SAEgB,YAAY,GAAA;IAC1B,OAAO,oBAAoB,IAAIA,qBAAc;AAC/C;;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"create-or-load-offline-session.js","sources":["../../../../../../src/server/authenticate/helpers/create-or-load-offline-session.ts"],"sourcesContent":[null],"names":["AppDistribution"],"mappings":";;;;AAEO,eAAe,0BAA0B,CAC9C,IAAY,EACZ,EAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAc,EAAA;IAElC,IAAI,MAAM,CAAC,YAAY,KAAKA,qBAAe,CAAC,YAAY,EAAE;AACxD,QAAA,MAAM,CAAC,KAAK,CAAC,0DAA0D,EAAE;YACvE,IAAI;AACL,SAAA,CAAC;QACF,OAAO,GAAG,CAAC,OAAO,CAAC,gBAAgB,CAAC,IAAI,CAAC;;SACpC;QACL,MAAM,CAAC,KAAK,CAAC,8CAA8C,EAAE,EAAC,IAAI,EAAC,CAAC;QACpE,MAAM,gBAAgB,GAAG,GAAG,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC;QACvD,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,cAAe,CAAC,WAAW,CAAC,gBAAgB,CAAC;AAE1E,QAAA,OAAO,OAAO;;AAElB;;;;"}
1
+ {"version":3,"file":"create-or-load-offline-session.js","sources":["../../../../../../src/server/authenticate/helpers/create-or-load-offline-session.ts"],"sourcesContent":["import {AppDistribution, BasicParams} from '../../types';\n\nexport async function createOrLoadOfflineSession(\n shop: string,\n {api, config, logger}: BasicParams,\n) {\n if (config.distribution === AppDistribution.ShopifyAdmin) {\n logger.debug('Creating custom app session from configured access token', {\n shop,\n });\n return api.session.customAppSession(shop);\n } else {\n logger.debug('Loading offline session from session storage', {shop});\n const offlineSessionId = api.session.getOfflineId(shop);\n const session = await config.sessionStorage!.loadSession(offlineSessionId);\n\n return session;\n }\n}\n"],"names":["AppDistribution"],"mappings":";;;;AAEO,eAAe,0BAA0B,CAC9C,IAAY,EACZ,EAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAc,EAAA;IAElC,IAAI,MAAM,CAAC,YAAY,KAAKA,qBAAe,CAAC,YAAY,EAAE;AACxD,QAAA,MAAM,CAAC,KAAK,CAAC,0DAA0D,EAAE;YACvE,IAAI;AACL,SAAA,CAAC;QACF,OAAO,GAAG,CAAC,OAAO,CAAC,gBAAgB,CAAC,IAAI,CAAC;IAC3C;SAAO;QACL,MAAM,CAAC,KAAK,CAAC,8CAA8C,EAAE,EAAC,IAAI,EAAC,CAAC;QACpE,MAAM,gBAAgB,GAAG,GAAG,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC;QACvD,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,cAAe,CAAC,WAAW,CAAC,gBAAgB,CAAC;AAE1E,QAAA,OAAO,OAAO;IAChB;AACF;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"ensure-cors-headers.js","sources":["../../../../../../src/server/authenticate/helpers/ensure-cors-headers.ts"],"sourcesContent":[null],"names":["REAUTH_URL_HEADER"],"mappings":";;;;AAOM,SAAU,wBAAwB,CACtC,MAAmB,EACnB,OAAgB,EAChB,cAAwB,EAAE,EAAA;AAE1B,IAAA,MAAM,EAAC,MAAM,EAAE,MAAM,EAAC,GAAG,MAAM;IAE/B,OAAO,SAAS,iBAAiB,CAAC,QAAQ,EAAA;QACxC,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC;QAC5C,IAAI,MAAM,IAAI,MAAM,KAAK,MAAM,CAAC,MAAM,EAAE;AACtC,YAAA,MAAM,CAAC,KAAK,CACV,4DAA4D,CAC7D;AAED,YAAA,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC;gBAC7B,eAAe;gBACf,cAAc;AACd,gBAAA,GAAG,WAAW;AACf,aAAA,CAAC;YAEF,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,6BAA6B,EAAE,GAAG,CAAC;AACxD,YAAA,QAAQ,CAAC,OAAO,CAAC,GAAG,CAClB,8BAA8B,EAC9B,CAAC,GAAG,cAAc,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAC/B;YACD,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,+BAA+B,EAAEA,wBAAiB,CAAC;;AAG1E,QAAA,OAAO,QAAQ;AACjB,KAAC;AACH;;;;"}
1
+ {"version":3,"file":"ensure-cors-headers.js","sources":["../../../../../../src/server/authenticate/helpers/ensure-cors-headers.ts"],"sourcesContent":["import {BasicParams} from '../../types';\nimport {REAUTH_URL_HEADER} from '../const';\n\nexport interface EnsureCORSFunction {\n (response: Response): Response;\n}\n\nexport function ensureCORSHeadersFactory(\n params: BasicParams,\n request: Request,\n corsHeaders: string[] = [],\n): EnsureCORSFunction {\n const {logger, config} = params;\n\n return function ensureCORSHeaders(response) {\n const origin = request.headers.get('Origin');\n if (origin && origin !== config.appUrl) {\n logger.debug(\n 'Request comes from a different origin, adding CORS headers',\n );\n\n const corsHeadersSet = new Set([\n 'Authorization',\n 'Content-Type',\n ...corsHeaders,\n ]);\n\n response.headers.set('Access-Control-Allow-Origin', '*');\n response.headers.set(\n 'Access-Control-Allow-Headers',\n [...corsHeadersSet].join(', '),\n );\n response.headers.set('Access-Control-Expose-Headers', REAUTH_URL_HEADER);\n }\n\n return response;\n };\n}\n"],"names":["REAUTH_URL_HEADER"],"mappings":";;;;AAOM,SAAU,wBAAwB,CACtC,MAAmB,EACnB,OAAgB,EAChB,cAAwB,EAAE,EAAA;AAE1B,IAAA,MAAM,EAAC,MAAM,EAAE,MAAM,EAAC,GAAG,MAAM;IAE/B,OAAO,SAAS,iBAAiB,CAAC,QAAQ,EAAA;QACxC,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC;QAC5C,IAAI,MAAM,IAAI,MAAM,KAAK,MAAM,CAAC,MAAM,EAAE;AACtC,YAAA,MAAM,CAAC,KAAK,CACV,4DAA4D,CAC7D;AAED,YAAA,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC;gBAC7B,eAAe;gBACf,cAAc;AACd,gBAAA,GAAG,WAAW;AACf,aAAA,CAAC;YAEF,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,6BAA6B,EAAE,GAAG,CAAC;AACxD,YAAA,QAAQ,CAAC,OAAO,CAAC,GAAG,CAClB,8BAA8B,EAC9B,CAAC,GAAG,cAAc,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAC/B;YACD,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,+BAA+B,EAAEA,wBAAiB,CAAC;QAC1E;AAEA,QAAA,OAAO,QAAQ;AACjB,IAAA,CAAC;AACH;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"get-session-token-header.js","sources":["../../../../../../src/server/authenticate/helpers/get-session-token-header.ts"],"sourcesContent":[null],"names":[],"mappings":";;AAAA,MAAM,mBAAmB,GAAG,UAAU;AAEhC,SAAU,qBAAqB,CAAC,OAAgB,EAAA;AACpD,IAAA,OAAO,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,EAAE,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC;AACrE;AAEM,SAAU,2BAA2B,CAAC,OAAgB,EAAA;IAC1D,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC;IAEhC,OAAO,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,mBAAmB,CAAC;AAClD;;;;;"}
1
+ {"version":3,"file":"get-session-token-header.js","sources":["../../../../../../src/server/authenticate/helpers/get-session-token-header.ts"],"sourcesContent":["const SESSION_TOKEN_PARAM = 'id_token';\n\nexport function getSessionTokenHeader(request: Request): string | undefined {\n return request.headers.get('authorization')?.replace('Bearer ', '');\n}\n\nexport function getSessionTokenFromUrlParam(request: Request): string | null {\n const url = new URL(request.url);\n\n return url.searchParams.get(SESSION_TOKEN_PARAM);\n}\n"],"names":[],"mappings":";;AAAA,MAAM,mBAAmB,GAAG,UAAU;AAEhC,SAAU,qBAAqB,CAAC,OAAgB,EAAA;AACpD,IAAA,OAAO,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,EAAE,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC;AACrE;AAEM,SAAU,2BAA2B,CAAC,OAAgB,EAAA;IAC1D,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC;IAEhC,OAAO,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,mBAAmB,CAAC;AAClD;;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"get-shop-from-request.js","sources":["../../../../../../src/server/authenticate/helpers/get-shop-from-request.ts"],"sourcesContent":[null],"names":[],"mappings":";;AAAM,SAAU,kBAAkB,CAAC,OAAgB,EAAA;IACjD,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC;IAChC,OAAO,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAE;AACtC;;;;"}
1
+ {"version":3,"file":"get-shop-from-request.js","sources":["../../../../../../src/server/authenticate/helpers/get-shop-from-request.ts"],"sourcesContent":["export function getShopFromRequest(request: Request) {\n const url = new URL(request.url);\n return url.searchParams.get('shop')!;\n}\n"],"names":[],"mappings":";;AAAM,SAAU,kBAAkB,CAAC,OAAgB,EAAA;IACjD,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC;IAChC,OAAO,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAE;AACtC;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"idempotent-promise-handler.js","sources":["../../../../../../src/server/authenticate/helpers/idempotent-promise-handler.ts"],"sourcesContent":[null],"names":[],"mappings":";;AAKA,MAAM,iBAAiB,GAAG,KAAK;MAElB,wBAAwB,CAAA;AACzB,IAAA,WAAW;AAErB,IAAA,WAAA,GAAA;AACE,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,GAAG,EAAkB;;AAG9C,IAAA,MAAM,aAAa,CAAC,EAClB,eAAe,EACf,UAAU,GACoB,EAAA;AAC9B,QAAA,IAAI;AACF,YAAA,IAAI,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,EAAE;gBACtC,MAAM,eAAe,EAAE;;;gBAEjB;YACR,IAAI,CAAC,qBAAqB,EAAE;;AAG9B,QAAA,OAAO,OAAO,CAAC,OAAO,EAAE;;AAGlB,IAAA,iBAAiB,CAAC,UAAkB,EAAA;QAC1C,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE;AACrC,YAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;AAC5C,YAAA,OAAO,IAAI;;AAEb,QAAA,OAAO,KAAK;;AAGN,IAAA,MAAM,qBAAqB,GAAA;AACjC,QAAA,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,KAAI;YACjD,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,GAAG,iBAAiB,EAAE;AACzC,gBAAA,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC;;AAE1B,SAAC,CAAC;;AAEL;;;;"}
1
+ {"version":3,"file":"idempotent-promise-handler.js","sources":["../../../../../../src/server/authenticate/helpers/idempotent-promise-handler.ts"],"sourcesContent":["export interface IdempotentHandlePromiseParams {\n promiseFunction: () => Promise<any>;\n identifier: string;\n}\n\nconst IDENTIFIER_TTL_MS = 60000;\n\nexport class IdempotentPromiseHandler {\n protected identifiers: Map<string, number>;\n\n constructor() {\n this.identifiers = new Map<string, number>();\n }\n\n async handlePromise({\n promiseFunction,\n identifier,\n }: IdempotentHandlePromiseParams): Promise<any> {\n try {\n if (this.isPromiseRunnable(identifier)) {\n await promiseFunction();\n }\n } finally {\n this.clearStaleIdentifiers();\n }\n\n return Promise.resolve();\n }\n\n private isPromiseRunnable(identifier: string) {\n if (!this.identifiers.has(identifier)) {\n this.identifiers.set(identifier, Date.now());\n return true;\n }\n return false;\n }\n\n private async clearStaleIdentifiers() {\n this.identifiers.forEach((date, identifier, map) => {\n if (Date.now() - date > IDENTIFIER_TTL_MS) {\n map.delete(identifier);\n }\n });\n }\n}\n"],"names":[],"mappings":";;AAKA,MAAM,iBAAiB,GAAG,KAAK;MAElB,wBAAwB,CAAA;AACzB,IAAA,WAAW;AAErB,IAAA,WAAA,GAAA;AACE,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,GAAG,EAAkB;IAC9C;AAEA,IAAA,MAAM,aAAa,CAAC,EAClB,eAAe,EACf,UAAU,GACoB,EAAA;AAC9B,QAAA,IAAI;AACF,YAAA,IAAI,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,EAAE;gBACtC,MAAM,eAAe,EAAE;YACzB;QACF;gBAAU;YACR,IAAI,CAAC,qBAAqB,EAAE;QAC9B;AAEA,QAAA,OAAO,OAAO,CAAC,OAAO,EAAE;IAC1B;AAEQ,IAAA,iBAAiB,CAAC,UAAkB,EAAA;QAC1C,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE;AACrC,YAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;AAC5C,YAAA,OAAO,IAAI;QACb;AACA,QAAA,OAAO,KAAK;IACd;AAEQ,IAAA,MAAM,qBAAqB,GAAA;AACjC,QAAA,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,KAAI;YACjD,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,GAAG,iBAAiB,EAAE;AACzC,gBAAA,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC;YACxB;AACF,QAAA,CAAC,CAAC;IACJ;AACD;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"invalidate-access-token.js","sources":["../../../../../../src/server/authenticate/helpers/invalidate-access-token.ts"],"sourcesContent":[null],"names":[],"mappings":";;AAIO,eAAe,qBAAqB,CACzC,MAAmB,EACnB,OAAgB,EAAA;AAEhB,IAAA,MAAM,EAAC,MAAM,EAAE,MAAM,EAAC,GAAG,MAAM;IAE/B,MAAM,CAAC,KAAK,CAAC,CAAA,wCAAA,EAA2C,OAAO,CAAC,EAAE,EAAE,EAAE;QACpE,IAAI,EAAE,OAAO,CAAC,IAAI;AACnB,KAAA,CAAC;AAEF,IAAA,OAAO,CAAC,WAAW,GAAG,SAAS;IAC/B,MAAM,MAAM,CAAC,cAAe,CAAC,YAAY,CAAC,OAAO,CAAC;AACpD;;;;"}
1
+ {"version":3,"file":"invalidate-access-token.js","sources":["../../../../../../src/server/authenticate/helpers/invalidate-access-token.ts"],"sourcesContent":["import {Session} from '@shopify/shopify-api';\n\nimport type {BasicParams} from '../../types';\n\nexport async function invalidateAccessToken(\n params: BasicParams,\n session: Session,\n): Promise<void> {\n const {logger, config} = params;\n\n logger.debug(`Invalidating access token for session - ${session.id}`, {\n shop: session.shop,\n });\n\n session.accessToken = undefined;\n await config.sessionStorage!.storeSession(session);\n}\n"],"names":[],"mappings":";;AAIO,eAAe,qBAAqB,CACzC,MAAmB,EACnB,OAAgB,EAAA;AAEhB,IAAA,MAAM,EAAC,MAAM,EAAE,MAAM,EAAC,GAAG,MAAM;IAE/B,MAAM,CAAC,KAAK,CAAC,CAAA,wCAAA,EAA2C,OAAO,CAAC,EAAE,EAAE,EAAE;QACpE,IAAI,EAAE,OAAO,CAAC,IAAI;AACnB,KAAA,CAAC;AAEF,IAAA,OAAO,CAAC,WAAW,GAAG,SAAS;IAC/B,MAAM,MAAM,CAAC,cAAe,CAAC,YAAY,CAAC,OAAO,CAAC;AACpD;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"reject-bot-request.js","sources":["../../../../../../src/server/authenticate/helpers/reject-bot-request.ts"],"sourcesContent":[null],"names":["isbot"],"mappings":";;;;AAIA,MAAM,sBAAsB,GAAG,eAAe;AAC9C,MAAM,yBAAyB,GAAG,kBAAkB;AAEpD,MAAM,mBAAmB,GAAG,CAAC,sBAAsB,EAAE,yBAAyB,CAAC;SAE/D,mBAAmB,CACjC,EAAC,MAAM,EAAc,EACrB,OAAgB,EAAA;AAEhB,IAAA,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,EAAE;;;AAIzD,IAAA,IAAI,mBAAmB,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE;AAC9D,QAAA,MAAM,CAAC,KAAK,CAAC,wCAAwC,CAAC;QACtD;;AAGF,IAAA,IAAIA,WAAK,CAAC,SAAS,CAAC,EAAE;AACpB,QAAA,MAAM,CAAC,KAAK,CAAC,sCAAsC,CAAC;AACpD,QAAA,MAAM,IAAI,QAAQ,CAAC,SAAS,EAAE,EAAC,MAAM,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,EAAC,CAAC;;AAEpE;;;;"}
1
+ {"version":3,"file":"reject-bot-request.js","sources":["../../../../../../src/server/authenticate/helpers/reject-bot-request.ts"],"sourcesContent":["import {isbot} from 'isbot';\n\nimport type {BasicParams} from '../../types';\n\nconst SHOPIFY_POS_USER_AGENT = /Shopify POS\\//;\nconst SHOPIFY_MOBILE_USER_AGENT = /Shopify Mobile\\//;\n\nconst SHOPIFY_USER_AGENTS = [SHOPIFY_POS_USER_AGENT, SHOPIFY_MOBILE_USER_AGENT];\n\nexport function respondToBotRequest(\n {logger}: BasicParams,\n request: Request,\n): void | never {\n const userAgent = request.headers.get('User-Agent') ?? '';\n\n // We call isbot below to prevent good (self-identifying) bots from triggering auth requests, but there are some\n // Shopify-specific cases we want to allow that are identified as bots by isbot.\n if (SHOPIFY_USER_AGENTS.some((agent) => agent.test(userAgent))) {\n logger.debug('Request is from a Shopify agent, allow');\n return;\n }\n\n if (isbot(userAgent)) {\n logger.debug('Request is from a bot, skipping auth');\n throw new Response(undefined, {status: 410, statusText: 'Gone'});\n }\n}\n"],"names":["isbot"],"mappings":";;;;AAIA,MAAM,sBAAsB,GAAG,eAAe;AAC9C,MAAM,yBAAyB,GAAG,kBAAkB;AAEpD,MAAM,mBAAmB,GAAG,CAAC,sBAAsB,EAAE,yBAAyB,CAAC;SAE/D,mBAAmB,CACjC,EAAC,MAAM,EAAc,EACrB,OAAgB,EAAA;AAEhB,IAAA,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,EAAE;;;AAIzD,IAAA,IAAI,mBAAmB,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE;AAC9D,QAAA,MAAM,CAAC,KAAK,CAAC,wCAAwC,CAAC;QACtD;IACF;AAEA,IAAA,IAAIA,WAAK,CAAC,SAAS,CAAC,EAAE;AACpB,QAAA,MAAM,CAAC,KAAK,CAAC,sCAAsC,CAAC;AACpD,QAAA,MAAM,IAAI,QAAQ,CAAC,SAAS,EAAE,EAAC,MAAM,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,EAAC,CAAC;IAClE;AACF;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"respond-to-invalid-session-token.js","sources":["../../../../../../src/server/authenticate/helpers/respond-to-invalid-session-token.ts"],"sourcesContent":[null],"names":["redirectToBouncePage","RETRY_INVALID_SESSION_HEADER"],"mappings":";;;;;AAUM,SAAU,4BAA4B,CAAC,EAC3C,MAAM,EACN,OAAO,EACP,YAAY,GAAG,KAAK,GACe,EAAA;IACnC,MAAM,EAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAC,GAAG,MAAM;IAEpC,MAAM,iBAAiB,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC;IAC/D,IAAI,iBAAiB,EAAE;AACrB,QAAA,OAAOA,yCAAoB,CAAC,EAAc,MAAM,EAAC,EAAE,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;;AAG1E,IAAA,MAAM,IAAI,QAAQ,CAAC,SAAS,EAAE;AAC5B,QAAA,MAAM,EAAE,GAAG;AACX,QAAA,UAAU,EAAE,cAAc;QAC1B,OAAO,EAAE,YAAY,GAAGC,mCAA4B,GAAG,EAAE;AAC1D,KAAA,CAAC;AACJ;;;;"}
1
+ {"version":3,"file":"respond-to-invalid-session-token.js","sources":["../../../../../../src/server/authenticate/helpers/respond-to-invalid-session-token.ts"],"sourcesContent":["import {redirectToBouncePage} from '../admin/helpers/redirect-to-bounce-page';\nimport {RETRY_INVALID_SESSION_HEADER} from '../const';\nimport {BasicParams} from '../../types';\n\ninterface RespondToInvalidSessionTokenParams {\n params: BasicParams;\n request: Request;\n retryRequest?: boolean;\n}\n\nexport function respondToInvalidSessionToken({\n params,\n request,\n retryRequest = false,\n}: RespondToInvalidSessionTokenParams) {\n const {api, logger, config} = params;\n\n const isDocumentRequest = !request.headers.get('authorization');\n if (isDocumentRequest) {\n return redirectToBouncePage({api, logger, config}, new URL(request.url));\n }\n\n throw new Response(undefined, {\n status: 401,\n statusText: 'Unauthorized',\n headers: retryRequest ? RETRY_INVALID_SESSION_HEADER : {},\n });\n}\n"],"names":["redirectToBouncePage","RETRY_INVALID_SESSION_HEADER"],"mappings":";;;;;AAUM,SAAU,4BAA4B,CAAC,EAC3C,MAAM,EACN,OAAO,EACP,YAAY,GAAG,KAAK,GACe,EAAA;IACnC,MAAM,EAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAC,GAAG,MAAM;IAEpC,MAAM,iBAAiB,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC;IAC/D,IAAI,iBAAiB,EAAE;AACrB,QAAA,OAAOA,yCAAoB,CAAC,EAAc,MAAM,EAAC,EAAE,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC1E;AAEA,IAAA,MAAM,IAAI,QAAQ,CAAC,SAAS,EAAE;AAC5B,QAAA,MAAM,EAAE,GAAG;AACX,QAAA,UAAU,EAAE,cAAc;QAC1B,OAAO,EAAE,YAAY,GAAGC,mCAA4B,GAAG,EAAE;AAC1D,KAAA,CAAC;AACJ;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"respond-to-options-request.js","sources":["../../../../../../src/server/authenticate/helpers/respond-to-options-request.ts"],"sourcesContent":[null],"names":["ensureCORSHeadersFactory"],"mappings":";;;;SAIgB,uBAAuB,CACrC,MAAmB,EACnB,OAAgB,EAChB,WAAsB,EAAA;AAEtB,IAAA,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,EAAE;QAChC,MAAM,iBAAiB,GAAGA,0CAAwB,CAChD,MAAM,EACN,OAAO,EACP,WAAW,CACZ;AAED,QAAA,MAAM,iBAAiB,CACrB,IAAI,QAAQ,CAAC,IAAI,EAAE;AACjB,YAAA,MAAM,EAAE,GAAG;AACX,YAAA,OAAO,EAAE;AACP,gBAAA,wBAAwB,EAAE,MAAM;AACjC,aAAA;AACF,SAAA,CAAC,CACH;;AAEL;;;;"}
1
+ {"version":3,"file":"respond-to-options-request.js","sources":["../../../../../../src/server/authenticate/helpers/respond-to-options-request.ts"],"sourcesContent":["import {BasicParams} from '../../types';\n\nimport {ensureCORSHeadersFactory} from './ensure-cors-headers';\n\nexport function respondToOptionsRequest(\n params: BasicParams,\n request: Request,\n corsHeaders?: string[],\n) {\n if (request.method === 'OPTIONS') {\n const ensureCORSHeaders = ensureCORSHeadersFactory(\n params,\n request,\n corsHeaders,\n );\n\n throw ensureCORSHeaders(\n new Response(null, {\n status: 204,\n headers: {\n 'Access-Control-Max-Age': '7200',\n },\n }),\n );\n }\n}\n"],"names":["ensureCORSHeadersFactory"],"mappings":";;;;SAIgB,uBAAuB,CACrC,MAAmB,EACnB,OAAgB,EAChB,WAAsB,EAAA;AAEtB,IAAA,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,EAAE;QAChC,MAAM,iBAAiB,GAAGA,0CAAwB,CAChD,MAAM,EACN,OAAO,EACP,WAAW,CACZ;AAED,QAAA,MAAM,iBAAiB,CACrB,IAAI,QAAQ,CAAC,IAAI,EAAE;AACjB,YAAA,MAAM,EAAE,GAAG;AACX,YAAA,OAAO,EAAE;AACP,gBAAA,wBAAwB,EAAE,MAAM;AACjC,aAAA;AACF,SAAA,CAAC,CACH;IACH;AACF;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"validate-session-token.js","sources":["../../../../../../src/server/authenticate/helpers/validate-session-token.ts"],"sourcesContent":[null],"names":["getShopFromRequest","respondToInvalidSessionToken"],"mappings":";;;;;AAYO,eAAe,oBAAoB,CACxC,MAAmB,EACnB,OAAgB,EAChB,KAAa,EACb,EAAC,aAAa,GAAG,IAAI,EAAE,YAAY,GAAG,IAAI,KAAiC,EAAE,EAAA;AAE7E,IAAA,MAAM,EAAC,GAAG,EAAE,MAAM,EAAC,GAAG,MAAM;AAC5B,IAAA,MAAM,IAAI,GAAGA,qCAAkB,CAAC,OAAO,CAAC;IACxC,MAAM,CAAC,KAAK,CAAC,0BAA0B,EAAE,EAAC,IAAI,EAAC,CAAC;AAEhD,IAAA,IAAI;QACF,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,OAAO,CAAC,kBAAkB,CAAC,KAAK,EAAE;YAC1D,aAAa;AACd,SAAA,CAAC;AACF,QAAA,MAAM,CAAC,KAAK,CAAC,oCAAoC,EAAE;YACjD,IAAI;AACJ,YAAA,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;AACjC,SAAA,CAAC;AAEF,QAAA,OAAO,OAAO;;IACd,OAAO,KAAK,EAAE;QACd,MAAM,CAAC,KAAK,CAAC,CAAA,kCAAA,EAAqC,KAAK,CAAC,OAAO,EAAE,EAAE;YACjE,IAAI;AACL,SAAA,CAAC;QAEF,MAAMC,yDAA4B,CAAC,EAAC,MAAM,EAAE,OAAO,EAAE,YAAY,EAAC,CAAC;;AAEvE;;;;"}
1
+ {"version":3,"file":"validate-session-token.js","sources":["../../../../../../src/server/authenticate/helpers/validate-session-token.ts"],"sourcesContent":["import {JwtPayload} from '@shopify/shopify-api';\n\nimport type {BasicParams} from '../../types';\n\nimport {respondToInvalidSessionToken} from './respond-to-invalid-session-token';\nimport {getShopFromRequest} from './get-shop-from-request';\n\ninterface ValidateSessionTokenOptions {\n checkAudience?: boolean;\n retryRequest?: boolean;\n}\n\nexport async function validateSessionToken(\n params: BasicParams,\n request: Request,\n token: string,\n {checkAudience = true, retryRequest = true}: ValidateSessionTokenOptions = {},\n): Promise<JwtPayload> {\n const {api, logger} = params;\n const shop = getShopFromRequest(request);\n logger.debug('Validating session token', {shop});\n\n try {\n const payload = await api.session.decodeSessionToken(token, {\n checkAudience,\n });\n logger.debug('Session token is valid - validated', {\n shop,\n payload: JSON.stringify(payload),\n });\n\n return payload;\n } catch (error) {\n logger.debug(`Failed to validate session token: ${error.message}`, {\n shop,\n });\n\n throw respondToInvalidSessionToken({params, request, retryRequest});\n }\n}\n"],"names":["getShopFromRequest","respondToInvalidSessionToken"],"mappings":";;;;;AAYO,eAAe,oBAAoB,CACxC,MAAmB,EACnB,OAAgB,EAChB,KAAa,EACb,EAAC,aAAa,GAAG,IAAI,EAAE,YAAY,GAAG,IAAI,KAAiC,EAAE,EAAA;AAE7E,IAAA,MAAM,EAAC,GAAG,EAAE,MAAM,EAAC,GAAG,MAAM;AAC5B,IAAA,MAAM,IAAI,GAAGA,qCAAkB,CAAC,OAAO,CAAC;IACxC,MAAM,CAAC,KAAK,CAAC,0BAA0B,EAAE,EAAC,IAAI,EAAC,CAAC;AAEhD,IAAA,IAAI;QACF,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,OAAO,CAAC,kBAAkB,CAAC,KAAK,EAAE;YAC1D,aAAa;AACd,SAAA,CAAC;AACF,QAAA,MAAM,CAAC,KAAK,CAAC,oCAAoC,EAAE;YACjD,IAAI;AACJ,YAAA,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;AACjC,SAAA,CAAC;AAEF,QAAA,OAAO,OAAO;IAChB;IAAE,OAAO,KAAK,EAAE;QACd,MAAM,CAAC,KAAK,CAAC,CAAA,kCAAA,EAAqC,KAAK,CAAC,OAAO,EAAE,EAAE;YACjE,IAAI;AACL,SAAA,CAAC;QAEF,MAAMC,yDAA4B,CAAC,EAAC,MAAM,EAAE,OAAO,EAAE,YAAY,EAAC,CAAC;IACrE;AACF;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"login.js","sources":["../../../../../../src/server/authenticate/login/login.ts"],"sourcesContent":[null],"names":["LoginErrorType","redirect"],"mappings":";;;;;AAIM,SAAU,YAAY,CAAC,MAAmB,EAAA;IAC9C,MAAM,EAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAC,GAAG,MAAM;AAEpC,IAAA,OAAO,eAAe,KAAK,CAAC,OAAgB,EAAA;QAC1C,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC;QAChC,MAAM,SAAS,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC;QAE9C,IAAI,OAAO,CAAC,MAAM,KAAK,KAAK,IAAI,CAAC,SAAS,EAAE;AAC1C,YAAA,OAAO,EAAE;;AAGX,QAAA,MAAM,IAAI,GACR,SAAS,IAAK,CAAC,MAAM,OAAO,CAAC,QAAQ,EAAE,EAAE,GAAG,CAAC,MAAM,CAAY;QAEjE,IAAI,CAAC,IAAI,EAAE;YACT,MAAM,CAAC,KAAK,CAAC,wBAAwB,EAAE,EAAC,IAAI,EAAC,CAAC;AAC9C,YAAA,OAAO,EAAC,IAAI,EAAEA,oBAAc,CAAC,WAAW,EAAC;;QAG3C,MAAM,mBAAmB,GAAG;AACzB,aAAA,OAAO,CAAC,cAAc,EAAE,EAAE;AAC1B,aAAA,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;QACrB,MAAM,cAAc,GAClB,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,KAAK;cACnB,CAAG,EAAA,mBAAmB,CAAgB,cAAA;cACtC,mBAAmB;QACzB,MAAM,aAAa,GAAG,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,cAAc,CAAC;QAE5D,IAAI,CAAC,aAAa,EAAE;YAClB,MAAM,CAAC,KAAK,CAAC,wBAAwB,EAAE,EAAC,IAAI,EAAC,CAAC;AAC9C,YAAA,OAAO,EAAC,IAAI,EAAEA,oBAAc,CAAC,WAAW,EAAC;;AAG3C,QAAA,MAAM,QAAQ,GAAG,CAAG,EAAA,MAAM,CAAC,MAAM,CAAA,EAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAS,MAAA,EAAA,aAAa,EAAE;QAE5E,MAAM,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC,uBAAuB,CAAC,aAAa,CAAC;QAClE,MAAM,WAAW,GAAG,CAAW,QAAA,EAAA,SAAS,4BAA4B,MAAM,CAAC,MAAM,CAAA,CAAE;QAEnF,MAAM,aAAa,GACjB,MAAM,CAAC,aAAa,IAAI,MAAM,CAAC,MAAM,CAAC,gCAAgC;QACxE,MAAM,WAAW,GAAG,aAAa,GAAG,WAAW,GAAG,QAAQ;AAE1D,QAAA,MAAM,CAAC,IAAI,CAAC,CAAgC,6BAAA,EAAA,WAAW,EAAE,EAAE;AACzD,YAAA,IAAI,EAAE,aAAa;AACpB,SAAA,CAAC;AAEF,QAAA,MAAMC,sBAAQ,CAAC,WAAW,CAAC;AAC7B,KAAC;AACH;;;;"}
1
+ {"version":3,"file":"login.js","sources":["../../../../../../src/server/authenticate/login/login.ts"],"sourcesContent":["import {redirect} from '@remix-run/server-runtime';\n\nimport {BasicParams, LoginError, LoginErrorType} from '../../types';\n\nexport function loginFactory(params: BasicParams) {\n const {api, config, logger} = params;\n\n return async function login(request: Request): Promise<LoginError | never> {\n const url = new URL(request.url);\n const shopParam = url.searchParams.get('shop');\n\n if (request.method === 'GET' && !shopParam) {\n return {};\n }\n\n const shop: string | null =\n shopParam || ((await request.formData()).get('shop') as string);\n\n if (!shop) {\n logger.debug('Missing shop parameter', {shop});\n return {shop: LoginErrorType.MissingShop};\n }\n\n const shopWithoutProtocol = shop\n .replace(/^https?:\\/\\//, '')\n .replace(/\\/$/, '');\n const shopWithDomain =\n shop?.indexOf('.') === -1\n ? `${shopWithoutProtocol}.myshopify.com`\n : shopWithoutProtocol;\n const sanitizedShop = api.utils.sanitizeShop(shopWithDomain);\n\n if (!sanitizedShop) {\n logger.debug('Invalid shop parameter', {shop});\n return {shop: LoginErrorType.InvalidShop};\n }\n\n const authPath = `${config.appUrl}${config.auth.path}?shop=${sanitizedShop}`;\n\n const adminPath = api.utils.legacyUrlToShopAdminUrl(sanitizedShop);\n const installPath = `https://${adminPath}/oauth/install?client_id=${config.apiKey}`;\n\n const shouldInstall =\n config.isEmbeddedApp && config.future.unstable_newEmbeddedAuthStrategy;\n const redirectUrl = shouldInstall ? installPath : authPath;\n\n logger.info(`Redirecting login request to ${redirectUrl}`, {\n shop: sanitizedShop,\n });\n\n throw redirect(redirectUrl);\n };\n}\n"],"names":["LoginErrorType","redirect"],"mappings":";;;;;AAIM,SAAU,YAAY,CAAC,MAAmB,EAAA;IAC9C,MAAM,EAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAC,GAAG,MAAM;AAEpC,IAAA,OAAO,eAAe,KAAK,CAAC,OAAgB,EAAA;QAC1C,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC;QAChC,MAAM,SAAS,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC;QAE9C,IAAI,OAAO,CAAC,MAAM,KAAK,KAAK,IAAI,CAAC,SAAS,EAAE;AAC1C,YAAA,OAAO,EAAE;QACX;AAEA,QAAA,MAAM,IAAI,GACR,SAAS,IAAK,CAAC,MAAM,OAAO,CAAC,QAAQ,EAAE,EAAE,GAAG,CAAC,MAAM,CAAY;QAEjE,IAAI,CAAC,IAAI,EAAE;YACT,MAAM,CAAC,KAAK,CAAC,wBAAwB,EAAE,EAAC,IAAI,EAAC,CAAC;AAC9C,YAAA,OAAO,EAAC,IAAI,EAAEA,oBAAc,CAAC,WAAW,EAAC;QAC3C;QAEA,MAAM,mBAAmB,GAAG;AACzB,aAAA,OAAO,CAAC,cAAc,EAAE,EAAE;AAC1B,aAAA,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;QACrB,MAAM,cAAc,GAClB,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,KAAK;cACnB,CAAA,EAAG,mBAAmB,CAAA,cAAA;cACtB,mBAAmB;QACzB,MAAM,aAAa,GAAG,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,cAAc,CAAC;QAE5D,IAAI,CAAC,aAAa,EAAE;YAClB,MAAM,CAAC,KAAK,CAAC,wBAAwB,EAAE,EAAC,IAAI,EAAC,CAAC;AAC9C,YAAA,OAAO,EAAC,IAAI,EAAEA,oBAAc,CAAC,WAAW,EAAC;QAC3C;AAEA,QAAA,MAAM,QAAQ,GAAG,CAAA,EAAG,MAAM,CAAC,MAAM,CAAA,EAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAA,MAAA,EAAS,aAAa,EAAE;QAE5E,MAAM,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC,uBAAuB,CAAC,aAAa,CAAC;QAClE,MAAM,WAAW,GAAG,CAAA,QAAA,EAAW,SAAS,4BAA4B,MAAM,CAAC,MAAM,CAAA,CAAE;QAEnF,MAAM,aAAa,GACjB,MAAM,CAAC,aAAa,IAAI,MAAM,CAAC,MAAM,CAAC,gCAAgC;QACxE,MAAM,WAAW,GAAG,aAAa,GAAG,WAAW,GAAG,QAAQ;AAE1D,QAAA,MAAM,CAAC,IAAI,CAAC,CAAA,6BAAA,EAAgC,WAAW,EAAE,EAAE;AACzD,YAAA,IAAI,EAAE,aAAa;AACpB,SAAA,CAAC;AAEF,QAAA,MAAMC,sBAAQ,CAAC,WAAW,CAAC;AAC7B,IAAA,CAAC;AACH;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"authenticate.js","sources":["../../../../../../../src/server/authenticate/public/appProxy/authenticate.ts"],"sourcesContent":[null],"names":["adminClientFactory","storefrontClientFactory"],"mappings":"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"}
1
+ {"version":3,"file":"authenticate.js","sources":["../../../../../../../src/server/authenticate/public/appProxy/authenticate.ts"],"sourcesContent":["import {ShopifyRestResources} from '@shopify/shopify-api';\n\nimport {AppConfigArg} from '../../../config-types';\nimport {adminClientFactory, storefrontClientFactory} from '../../../clients';\nimport {BasicParams} from '../../../types';\n\nimport {\n AppProxyContext,\n AppProxyContextWithSession,\n AuthenticateAppProxy,\n LiquidResponseFunction,\n} from './types';\n\nexport function authenticateAppProxyFactory<\n ConfigArg extends AppConfigArg,\n Resources extends ShopifyRestResources,\n>(params: BasicParams): AuthenticateAppProxy<ConfigArg, Resources> {\n const {api, config, logger} = params;\n\n return async function authenticate(\n request,\n ): Promise<\n AppProxyContext | AppProxyContextWithSession<ConfigArg, Resources>\n > {\n const url = new URL(request.url);\n const shop = url.searchParams.get('shop')!;\n logger.info('Authenticating app proxy request', {shop});\n\n if (!(await validateAppProxyHmac(params, url))) {\n logger.info('App proxy request has invalid signature', {shop});\n throw new Response(undefined, {\n status: 400,\n statusText: 'Bad Request',\n });\n }\n\n const sessionId = api.session.getOfflineId(shop);\n const session = await config.sessionStorage!.loadSession(sessionId);\n\n if (!session) {\n logger.debug('Could not find offline session, returning empty context', {\n shop,\n ...Object.fromEntries(url.searchParams.entries()),\n });\n\n const context: AppProxyContext = {\n liquid,\n session: undefined,\n admin: undefined,\n storefront: undefined,\n };\n\n return context;\n }\n\n const context: AppProxyContextWithSession<ConfigArg, Resources> = {\n liquid,\n session,\n admin: adminClientFactory<ConfigArg, Resources>({params, session}),\n storefront: storefrontClientFactory({params, session}),\n };\n\n return context;\n };\n}\n\nconst liquid: LiquidResponseFunction = (body, initAndOptions) => {\n const processedBody = processLiquidBody(body);\n\n if (typeof initAndOptions !== 'object') {\n return new Response(processedBody, {\n status: initAndOptions || 200,\n headers: {\n 'Content-Type': 'application/liquid',\n },\n });\n }\n\n const {layout, ...responseInit} = initAndOptions || {};\n const responseBody =\n layout === false ? `{% layout none %} ${processedBody}` : processedBody;\n\n const headers = new Headers(responseInit.headers);\n headers.set('Content-Type', 'application/liquid');\n\n return new Response(responseBody, {\n ...responseInit,\n headers,\n });\n};\n\nasync function validateAppProxyHmac(\n params: BasicParams,\n url: URL,\n): Promise<boolean> {\n const {api, logger} = params;\n\n try {\n let searchParams = new URLSearchParams(url.search);\n if (!searchParams.get('index')) {\n searchParams.delete('index');\n }\n\n let isValid = await api.utils.validateHmac(\n Object.fromEntries(searchParams.entries()),\n {signator: 'appProxy'},\n );\n\n if (!isValid) {\n const cleanPath = url.pathname\n .replace(/^\\//, '')\n .replace(/\\/$/, '')\n .replaceAll('/', '.');\n const data = `routes%2F${cleanPath}`;\n\n searchParams = new URLSearchParams(\n `?_data=${data}&${searchParams.toString().replace(/^\\?/, '')}`,\n );\n\n isValid = await api.utils.validateHmac(\n Object.fromEntries(searchParams.entries()),\n {signator: 'appProxy'},\n );\n\n if (!isValid) {\n const searchParams = new URLSearchParams(\n `?_data=${data}._index&${url.search.replace(/^\\?/, '')}`,\n );\n\n isValid = await api.utils.validateHmac(\n Object.fromEntries(searchParams.entries()),\n {signator: 'appProxy'},\n );\n }\n }\n\n return isValid;\n } catch (error) {\n const shop = url.searchParams.get('shop')!;\n logger.info(error.message, {shop});\n throw new Response(undefined, {status: 400, statusText: 'Bad Request'});\n }\n}\n\nfunction processLiquidBody(body: string) {\n return (\n body\n // Add trailing slashes to relative form action URLs\n .replaceAll(\n /<(form[^>]+)action=\"(\\/[^\"?]+)(\\?[^\"]+)?\">/g,\n '<$1action=\"$2/$3\">',\n )\n // Add trailing slashes to relative link href URLs\n .replaceAll(/<(a[^>]+)href=\"(\\/[^\"?]+)(\\?[^\"]+)?\">/g, '<$1href=\"$2/$3\">')\n );\n}\n"],"names":["adminClientFactory","storefrontClientFactory"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"authenticate.js","sources":["../../../../../../../src/server/authenticate/public/checkout/authenticate.ts"],"sourcesContent":[null],"names":["authenticateExtensionFactory"],"mappings":";;;;AAKM,SAAU,2BAA2B,CACzC,MAAmB,EAAA;AAEnB,IAAA,OAAOA,yCAA4B,CACjC,MAAM,EACN,UAAU,CACa;AAC3B;;;;"}
1
+ {"version":3,"file":"authenticate.js","sources":["../../../../../../../src/server/authenticate/public/checkout/authenticate.ts"],"sourcesContent":["import type {BasicParams} from '../../../types';\nimport {authenticateExtensionFactory} from '../extension/authenticate';\n\nimport type {AuthenticateCheckout} from './types';\n\nexport function authenticateCheckoutFactory(\n params: BasicParams,\n): AuthenticateCheckout {\n return authenticateExtensionFactory(\n params,\n 'checkout',\n ) as AuthenticateCheckout;\n}\n"],"names":["authenticateExtensionFactory"],"mappings":";;;;AAKM,SAAU,2BAA2B,CACzC,MAAmB,EAAA;AAEnB,IAAA,OAAOA,yCAA4B,CACjC,MAAM,EACN,UAAU,CACa;AAC3B;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"authenticate.js","sources":["../../../../../../../src/server/authenticate/public/customer-account/authenticate.ts"],"sourcesContent":[null],"names":["authenticateExtensionFactory"],"mappings":";;;;AAKM,SAAU,kCAAkC,CAChD,MAAmB,EAAA;AAEnB,IAAA,OAAOA,yCAA4B,CACjC,MAAM,EACN,kBAAkB,CACY;AAClC;;;;"}
1
+ {"version":3,"file":"authenticate.js","sources":["../../../../../../../src/server/authenticate/public/customer-account/authenticate.ts"],"sourcesContent":["import {BasicParams} from '../../../types';\nimport {authenticateExtensionFactory} from '../extension/authenticate';\n\nimport {AuthenticateCustomerAccount} from './types';\n\nexport function authenticateCustomerAccountFactory(\n params: BasicParams,\n): AuthenticateCustomerAccount {\n return authenticateExtensionFactory(\n params,\n 'customer account',\n ) as AuthenticateCustomerAccount;\n}\n"],"names":["authenticateExtensionFactory"],"mappings":";;;;AAKM,SAAU,kCAAkC,CAChD,MAAmB,EAAA;AAEnB,IAAA,OAAOA,yCAA4B,CACjC,MAAM,EACN,kBAAkB,CACY;AAClC;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"authenticate.js","sources":["../../../../../../../src/server/authenticate/public/extension/authenticate.ts"],"sourcesContent":[null],"names":["respondToBotRequest","respondToOptionsRequest","getSessionTokenHeader","getShopFromRequest","validateSessionToken","ensureCORSHeadersFactory"],"mappings":";;;;;;;;;;;AAYgB,SAAA,4BAA4B,CAC1C,MAAmB,EACnB,WAAmB,EAAA;IAEnB,OAAO,eAAe,qBAAqB,CACzC,OAAO,EACP,OAAO,GAAG,EAAE,EAAA;AAEZ,QAAA,MAAM,EAAC,MAAM,EAAC,GAAG,MAAM;AAEvB,QAAA,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,EAAE;AAE7C,QAAAA,oCAAmB,CAAC,MAAM,EAAE,OAAO,CAAC;AACpC,QAAAC,+CAAuB,CAAC,MAAM,EAAE,OAAO,EAAE,WAAW,CAAC;AAErD,QAAA,MAAM,kBAAkB,GAAGC,2CAAqB,CAAC,OAAO,CAAC;AAEzD,QAAA,MAAM,CAAC,IAAI,CAAC,CAAkB,eAAA,EAAA,WAAW,UAAU,EAAE;AACnD,YAAA,IAAI,EAAEC,qCAAkB,CAAC,OAAO,CAAC;AAClC,SAAA,CAAC;QAEF,IAAI,CAAC,kBAAkB,EAAE;AACvB,YAAA,MAAM,CAAC,KAAK,CAAC,yCAAyC,EAAE;AACtD,gBAAA,IAAI,EAAEA,qCAAkB,CAAC,OAAO,CAAC;AAClC,aAAA,CAAC;AACF,YAAA,MAAM,IAAI,QAAQ,CAAC,SAAS,EAAE;AAC5B,gBAAA,MAAM,EAAE,GAAG;AACX,gBAAA,UAAU,EAAE,cAAc;AAC3B,aAAA,CAAC;;QAGJ,OAAO;AACL,YAAA,YAAY,EAAE,MAAMC,yCAAoB,CACtC,MAAM,EACN,OAAO,EACP,kBAAkB,EAClB,EAAC,aAAa,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAC,CAC5C;YACD,IAAI,EAAEC,0CAAwB,CAAC,MAAM,EAAE,OAAO,EAAE,WAAW,CAAC;SAC7D;AACH,KAAC;AACH;;;;"}
1
+ {"version":3,"file":"authenticate.js","sources":["../../../../../../../src/server/authenticate/public/extension/authenticate.ts"],"sourcesContent":["import {BasicParams} from '../../../types';\nimport {\n respondToBotRequest,\n respondToOptionsRequest,\n getSessionTokenHeader,\n validateSessionToken,\n ensureCORSHeadersFactory,\n getShopFromRequest,\n} from '../../helpers';\n\nimport {AuthenticateExtension, ExtensionContext} from './types';\n\nexport function authenticateExtensionFactory(\n params: BasicParams,\n requestType: string,\n): AuthenticateExtension {\n return async function authenticateExtension(\n request,\n options = {},\n ): Promise<ExtensionContext> {\n const {logger} = params;\n\n const corsHeaders = options.corsHeaders ?? [];\n\n respondToBotRequest(params, request);\n respondToOptionsRequest(params, request, corsHeaders);\n\n const sessionTokenHeader = getSessionTokenHeader(request);\n\n logger.info(`Authenticating ${requestType} request`, {\n shop: getShopFromRequest(request),\n });\n\n if (!sessionTokenHeader) {\n logger.debug('Request did not contain a session token', {\n shop: getShopFromRequest(request),\n });\n throw new Response(undefined, {\n status: 401,\n statusText: 'Unauthorized',\n });\n }\n\n return {\n sessionToken: await validateSessionToken(\n params,\n request,\n sessionTokenHeader,\n {checkAudience: false, retryRequest: false},\n ),\n cors: ensureCORSHeadersFactory(params, request, corsHeaders),\n };\n };\n}\n"],"names":["respondToBotRequest","respondToOptionsRequest","getSessionTokenHeader","getShopFromRequest","validateSessionToken","ensureCORSHeadersFactory"],"mappings":";;;;;;;;;;;AAYM,SAAU,4BAA4B,CAC1C,MAAmB,EACnB,WAAmB,EAAA;IAEnB,OAAO,eAAe,qBAAqB,CACzC,OAAO,EACP,OAAO,GAAG,EAAE,EAAA;AAEZ,QAAA,MAAM,EAAC,MAAM,EAAC,GAAG,MAAM;AAEvB,QAAA,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,EAAE;AAE7C,QAAAA,oCAAmB,CAAC,MAAM,EAAE,OAAO,CAAC;AACpC,QAAAC,+CAAuB,CAAC,MAAM,EAAE,OAAO,EAAE,WAAW,CAAC;AAErD,QAAA,MAAM,kBAAkB,GAAGC,2CAAqB,CAAC,OAAO,CAAC;AAEzD,QAAA,MAAM,CAAC,IAAI,CAAC,CAAA,eAAA,EAAkB,WAAW,UAAU,EAAE;AACnD,YAAA,IAAI,EAAEC,qCAAkB,CAAC,OAAO,CAAC;AAClC,SAAA,CAAC;QAEF,IAAI,CAAC,kBAAkB,EAAE;AACvB,YAAA,MAAM,CAAC,KAAK,CAAC,yCAAyC,EAAE;AACtD,gBAAA,IAAI,EAAEA,qCAAkB,CAAC,OAAO,CAAC;AAClC,aAAA,CAAC;AACF,YAAA,MAAM,IAAI,QAAQ,CAAC,SAAS,EAAE;AAC5B,gBAAA,MAAM,EAAE,GAAG;AACX,gBAAA,UAAU,EAAE,cAAc;AAC3B,aAAA,CAAC;QACJ;QAEA,OAAO;AACL,YAAA,YAAY,EAAE,MAAMC,yCAAoB,CACtC,MAAM,EACN,OAAO,EACP,kBAAkB,EAClB,EAAC,aAAa,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAC,CAC5C;YACD,IAAI,EAAEC,0CAAwB,CAAC,MAAM,EAAE,OAAO,EAAE,WAAW,CAAC;SAC7D;AACH,IAAA,CAAC;AACH;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"factory.js","sources":["../../../../../../src/server/authenticate/public/factory.ts"],"sourcesContent":[null],"names":["authenticateCheckoutFactory","authenticateAppProxyFactory","authenticateCustomerAccountFactory","authenticatePOSFactory"],"mappings":";;;;;;;AAWM,SAAU,yBAAyB,CAGvC,MAAmB,EAAA;AACnB,IAAA,MAAM,oBAAoB,GAAGA,0CAA2B,CAAC,MAAM,CAAC;AAChE,IAAA,MAAM,oBAAoB,GAAGC,wCAA2B,CAGtD,MAAM,CAAC;AACT,IAAA,MAAM,2BAA2B,GAC/BC,iDAAkC,CAAC,MAAM,CAAC;AAC5C,IAAA,MAAM,eAAe,GAAGC,qCAAsB,CAAC,MAAM,CAAC;AAEtD,IAAA,MAAM,OAAO,GAAkC;AAC7C,QAAA,QAAQ,EAAE,oBAAoB;AAC9B,QAAA,QAAQ,EAAE,oBAAoB;AAC9B,QAAA,eAAe,EAAE,2BAA2B;AAC5C,QAAA,GAAG,EAAE,eAAe;KACrB;AAED,IAAA,OAAO,OAAO;AAChB;;;;"}
1
+ {"version":3,"file":"factory.js","sources":["../../../../../../src/server/authenticate/public/factory.ts"],"sourcesContent":["import {ShopifyRestResources} from '@shopify/shopify-api';\n\nimport {AppConfigArg} from '../../config-types';\nimport {BasicParams} from '../../types';\n\nimport {authenticateCheckoutFactory} from './checkout/authenticate';\nimport {authenticateAppProxyFactory} from './appProxy/authenticate';\nimport {authenticateCustomerAccountFactory} from './customer-account/authenticate';\nimport {AuthenticatePublic} from './types';\nimport {authenticatePOSFactory} from './pos/authenticate';\n\nexport function authenticatePublicFactory<\n ConfigArg extends AppConfigArg,\n Resources extends ShopifyRestResources,\n>(params: BasicParams) {\n const authenticateCheckout = authenticateCheckoutFactory(params);\n const authenticateAppProxy = authenticateAppProxyFactory<\n ConfigArg,\n Resources\n >(params);\n const authenticateCustomerAccount =\n authenticateCustomerAccountFactory(params);\n const authenticatePOS = authenticatePOSFactory(params);\n\n const context: AuthenticatePublic<ConfigArg> = {\n checkout: authenticateCheckout,\n appProxy: authenticateAppProxy,\n customerAccount: authenticateCustomerAccount,\n pos: authenticatePOS,\n };\n\n return context;\n}\n"],"names":["authenticateCheckoutFactory","authenticateAppProxyFactory","authenticateCustomerAccountFactory","authenticatePOSFactory"],"mappings":";;;;;;;AAWM,SAAU,yBAAyB,CAGvC,MAAmB,EAAA;AACnB,IAAA,MAAM,oBAAoB,GAAGA,0CAA2B,CAAC,MAAM,CAAC;AAChE,IAAA,MAAM,oBAAoB,GAAGC,wCAA2B,CAGtD,MAAM,CAAC;AACT,IAAA,MAAM,2BAA2B,GAC/BC,iDAAkC,CAAC,MAAM,CAAC;AAC5C,IAAA,MAAM,eAAe,GAAGC,qCAAsB,CAAC,MAAM,CAAC;AAEtD,IAAA,MAAM,OAAO,GAAkC;AAC7C,QAAA,QAAQ,EAAE,oBAAoB;AAC9B,QAAA,QAAQ,EAAE,oBAAoB;AAC9B,QAAA,eAAe,EAAE,2BAA2B;AAC5C,QAAA,GAAG,EAAE,eAAe;KACrB;AAED,IAAA,OAAO,OAAO;AAChB;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"authenticate.js","sources":["../../../../../../../src/server/authenticate/public/pos/authenticate.ts"],"sourcesContent":[null],"names":["authenticateExtensionFactory"],"mappings":";;;;AAKM,SAAU,sBAAsB,CAAC,MAAmB,EAAA;AACxD,IAAA,OAAOA,yCAA4B,CAAC,MAAM,EAAE,KAAK,CAAoB;AACvE;;;;"}
1
+ {"version":3,"file":"authenticate.js","sources":["../../../../../../../src/server/authenticate/public/pos/authenticate.ts"],"sourcesContent":["import {BasicParams} from '../../../types';\nimport {authenticateExtensionFactory} from '../extension/authenticate';\n\nimport type {AuthenticatePOS} from './types';\n\nexport function authenticatePOSFactory(params: BasicParams): AuthenticatePOS {\n return authenticateExtensionFactory(params, 'pos') as AuthenticatePOS;\n}\n"],"names":["authenticateExtensionFactory"],"mappings":";;;;AAKM,SAAU,sBAAsB,CAAC,MAAmB,EAAA;AACxD,IAAA,OAAOA,yCAA4B,CAAC,MAAM,EAAE,KAAK,CAAoB;AACvE;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"authenticate.js","sources":["../../../../../../src/server/authenticate/webhooks/authenticate.ts"],"sourcesContent":[null],"names":["WebhookValidationErrorReason","createOrLoadOfflineSession","adminClientFactory","handleClientErrorFactory"],"mappings":";;;;;;;;;AAiBM,SAAU,0BAA0B,CAIxC,MAAmB,EAAA;AACnB,IAAA,MAAM,EAAC,GAAG,EAAE,MAAM,EAAC,GAAG,MAAM;AAE5B,IAAA,OAAO,eAAe,YAAY,CAChC,OAAgB,EAAA;AAEhB,QAAA,IAAI,OAAO,CAAC,MAAM,KAAK,MAAM,EAAE;AAC7B,YAAA,MAAM,CAAC,KAAK,CACV,4EAA4E,EAC5E,EAAC,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAC,CAC3C;AACD,YAAA,MAAM,IAAI,QAAQ,CAAC,SAAS,EAAE;AAC5B,gBAAA,MAAM,EAAE,GAAG;AACX,gBAAA,UAAU,EAAE,oBAAoB;AACjC,aAAA,CAAC;;AAGJ,QAAA,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,IAAI,EAAE;QAEpC,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC;YACxC,OAAO;AACP,YAAA,UAAU,EAAE,OAAO;AACpB,SAAA,CAAC;AAEF,QAAA,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE;YAChB,IAAI,KAAK,CAAC,MAAM,KAAKA,uCAA4B,CAAC,WAAW,EAAE;AAC7D,gBAAA,MAAM,CAAC,KAAK,CAAC,gCAAgC,EAAE,KAAK,CAAC;AACrD,gBAAA,MAAM,IAAI,QAAQ,CAAC,SAAS,EAAE;AAC5B,oBAAA,MAAM,EAAE,GAAG;AACX,oBAAA,UAAU,EAAE,cAAc;AAC3B,iBAAA,CAAC;;iBACG;AACL,gBAAA,MAAM,CAAC,KAAK,CAAC,2BAA2B,EAAE,KAAK,CAAC;AAChD,gBAAA,MAAM,IAAI,QAAQ,CAAC,SAAS,EAAE,EAAC,MAAM,EAAE,GAAG,EAAE,UAAU,EAAE,aAAa,EAAC,CAAC;;;QAG3E,MAAM,OAAO,GAAG,MAAMC,qDAA0B,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC;AACtE,QAAA,MAAM,cAAc,GAAyC;YAC3D,UAAU,EAAE,KAAK,CAAC,UAAU;YAC5B,IAAI,EAAE,KAAK,CAAC,MAAM;YAClB,KAAK,EAAE,KAAK,CAAC,KAAe;YAC5B,SAAS,EAAE,KAAK,CAAC,SAAS;AAC1B,YAAA,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;AAC5B,YAAA,QAAQ,EAAE,KAAK,CAAC,QAAQ,IAAI,SAAS;AACrC,YAAA,OAAO,EAAE,SAAS;AAClB,YAAA,KAAK,EAAE,SAAS;SACjB;QAED,IAAI,CAAC,OAAO,EAAE;AACZ,YAAA,OAAO,cAAc;;QAGvB,MAAM,KAAK,GAAGC,0BAAkB,CAAuB;YACrD,MAAM;YACN,OAAO;AACP,YAAA,iBAAiB,EAAEC,0CAAwB,CAAC,EAAC,OAAO,EAAC,CAAC;AACvD,SAAA,CAAC;QAEF,OAAO;AACL,YAAA,GAAG,cAAc;YACjB,OAAO;YACP,KAAK;SACN;AACH,KAAC;AACH;;;;"}
1
+ {"version":3,"file":"authenticate.js","sources":["../../../../../../src/server/authenticate/webhooks/authenticate.ts"],"sourcesContent":["import {\n ShopifyRestResources,\n WebhookValidationErrorReason,\n} from '@shopify/shopify-api';\n\nimport {AppConfigArg} from '../../config-types';\nimport type {BasicParams} from '../../types';\nimport {adminClientFactory} from '../../clients';\nimport {handleClientErrorFactory} from '../admin/helpers';\nimport {createOrLoadOfflineSession} from '../helpers';\n\nimport type {\n AuthenticateWebhook,\n WebhookContext,\n WebhookContextWithoutSession,\n} from './types';\n\nexport function authenticateWebhookFactory<\n ConfigArg extends AppConfigArg,\n Resources extends ShopifyRestResources,\n Topics extends string,\n>(params: BasicParams): AuthenticateWebhook<ConfigArg, Resources, Topics> {\n const {api, logger} = params;\n\n return async function authenticate(\n request: Request,\n ): Promise<WebhookContext<ConfigArg, Resources, Topics>> {\n if (request.method !== 'POST') {\n logger.debug(\n 'Received a non-POST request for a webhook. Only POST requests are allowed.',\n {url: request.url, method: request.method},\n );\n throw new Response(undefined, {\n status: 405,\n statusText: 'Method not allowed',\n });\n }\n\n const rawBody = await request.text();\n\n const check = await api.webhooks.validate({\n rawBody,\n rawRequest: request,\n });\n\n if (!check.valid) {\n if (check.reason === WebhookValidationErrorReason.InvalidHmac) {\n logger.debug('Webhook HMAC validation failed', check);\n throw new Response(undefined, {\n status: 401,\n statusText: 'Unauthorized',\n });\n } else {\n logger.debug('Webhook validation failed', check);\n throw new Response(undefined, {status: 400, statusText: 'Bad Request'});\n }\n }\n const session = await createOrLoadOfflineSession(check.domain, params);\n const webhookContext: WebhookContextWithoutSession<Topics> = {\n apiVersion: check.apiVersion,\n shop: check.domain,\n topic: check.topic as Topics,\n webhookId: check.webhookId,\n payload: JSON.parse(rawBody),\n subTopic: check.subTopic || undefined,\n session: undefined,\n admin: undefined,\n };\n\n if (!session) {\n return webhookContext;\n }\n\n const admin = adminClientFactory<ConfigArg, Resources>({\n params,\n session,\n handleClientError: handleClientErrorFactory({request}),\n });\n\n return {\n ...webhookContext,\n session,\n admin,\n };\n };\n}\n"],"names":["WebhookValidationErrorReason","createOrLoadOfflineSession","adminClientFactory","handleClientErrorFactory"],"mappings":";;;;;;;;;AAiBM,SAAU,0BAA0B,CAIxC,MAAmB,EAAA;AACnB,IAAA,MAAM,EAAC,GAAG,EAAE,MAAM,EAAC,GAAG,MAAM;AAE5B,IAAA,OAAO,eAAe,YAAY,CAChC,OAAgB,EAAA;AAEhB,QAAA,IAAI,OAAO,CAAC,MAAM,KAAK,MAAM,EAAE;AAC7B,YAAA,MAAM,CAAC,KAAK,CACV,4EAA4E,EAC5E,EAAC,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAC,CAC3C;AACD,YAAA,MAAM,IAAI,QAAQ,CAAC,SAAS,EAAE;AAC5B,gBAAA,MAAM,EAAE,GAAG;AACX,gBAAA,UAAU,EAAE,oBAAoB;AACjC,aAAA,CAAC;QACJ;AAEA,QAAA,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,IAAI,EAAE;QAEpC,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC;YACxC,OAAO;AACP,YAAA,UAAU,EAAE,OAAO;AACpB,SAAA,CAAC;AAEF,QAAA,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE;YAChB,IAAI,KAAK,CAAC,MAAM,KAAKA,uCAA4B,CAAC,WAAW,EAAE;AAC7D,gBAAA,MAAM,CAAC,KAAK,CAAC,gCAAgC,EAAE,KAAK,CAAC;AACrD,gBAAA,MAAM,IAAI,QAAQ,CAAC,SAAS,EAAE;AAC5B,oBAAA,MAAM,EAAE,GAAG;AACX,oBAAA,UAAU,EAAE,cAAc;AAC3B,iBAAA,CAAC;YACJ;iBAAO;AACL,gBAAA,MAAM,CAAC,KAAK,CAAC,2BAA2B,EAAE,KAAK,CAAC;AAChD,gBAAA,MAAM,IAAI,QAAQ,CAAC,SAAS,EAAE,EAAC,MAAM,EAAE,GAAG,EAAE,UAAU,EAAE,aAAa,EAAC,CAAC;YACzE;QACF;QACA,MAAM,OAAO,GAAG,MAAMC,qDAA0B,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC;AACtE,QAAA,MAAM,cAAc,GAAyC;YAC3D,UAAU,EAAE,KAAK,CAAC,UAAU;YAC5B,IAAI,EAAE,KAAK,CAAC,MAAM;YAClB,KAAK,EAAE,KAAK,CAAC,KAAe;YAC5B,SAAS,EAAE,KAAK,CAAC,SAAS;AAC1B,YAAA,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;AAC5B,YAAA,QAAQ,EAAE,KAAK,CAAC,QAAQ,IAAI,SAAS;AACrC,YAAA,OAAO,EAAE,SAAS;AAClB,YAAA,KAAK,EAAE,SAAS;SACjB;QAED,IAAI,CAAC,OAAO,EAAE;AACZ,YAAA,OAAO,cAAc;QACvB;QAEA,MAAM,KAAK,GAAGC,0BAAkB,CAAuB;YACrD,MAAM;YACN,OAAO;AACP,YAAA,iBAAiB,EAAEC,0CAAwB,CAAC,EAAC,OAAO,EAAC,CAAC;AACvD,SAAA,CAAC;QAEF,OAAO;AACL,YAAA,GAAG,cAAc;YACjB,OAAO;YACP,KAAK;SACN;AACH,IAAA,CAAC;AACH;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"register.js","sources":["../../../../../../src/server/authenticate/webhooks/register.ts"],"sourcesContent":[null],"names":[],"mappings":";;SAIgB,uBAAuB,CAAC,EAAC,GAAG,EAAE,MAAM,EAAc,EAAA;AAChE,IAAA,OAAO,eAAe,gBAAgB,CAAC,EAAC,OAAO,EAA0B,EAAA;QACvE,OAAO,GAAG,CAAC;AACR,aAAA,QAAQ,CAAC,EAAC,OAAO,EAAC;AAClB,aAAA,IAAI,CAAC,CAAC,QAAQ,KAAI;AACjB,YAAA,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,EAAE,YAAY,CAAC,KAAI;gBACzD,YAAY,CAAC,OAAO,CAAC,CAAC,EAAC,OAAO,EAAE,GAAG,IAAI,EAAC,KAAI;oBAC1C,IAAI,OAAO,EAAE;AACX,wBAAA,MAAM,CAAC,KAAK,CAAC,oBAAoB,EAAE;4BACjC,KAAK;4BACL,IAAI,EAAE,OAAO,CAAC,IAAI;4BAClB,SAAS,EAAE,IAAI,CAAC,SAAS;AAC1B,yBAAA,CAAC;;yBACG;AACL,wBAAA,MAAM,CAAC,KAAK,CAAC,4BAA4B,EAAE;4BACzC,KAAK;4BACL,IAAI,EAAE,OAAO,CAAC,IAAI;4BAClB,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC;AACpC,yBAAA,CAAC;;AAEN,iBAAC,CAAC;AACJ,aAAC,CAAC;AAEF,YAAA,OAAO,QAAQ;AACjB,SAAC;AACA,aAAA,KAAK,CAAC,CAAC,KAAK,KAAI;YACf,MAAM,aAAa,GACjB,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,aAAa,IAAI,EAAE;YAEzC,MAAM,SAAS,GAAG,aAAa,CAAC,IAAI,CAClC,CAAC,EAAC,UAAU,EAAE,EAAC,IAAI,EAAC,EAAC,KAAK,IAAI,KAAK,WAAW,CAC/C;YAED,IAAI,SAAS,EAAE;AACb,gBAAA,MAAM,CAAC,KAAK,CAAC,6BAA6B,EAAE;oBAC1C,IAAI,EAAE,OAAO,CAAC,IAAI;AAClB,oBAAA,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;AAC7B,iBAAA,CAAC;;iBACG;AACL,gBAAA,MAAM,KAAK;;AAEf,SAAC,CAAC;AACN,KAAC;AACH;;;;"}
1
+ {"version":3,"file":"register.js","sources":["../../../../../../src/server/authenticate/webhooks/register.ts"],"sourcesContent":["import type {BasicParams} from '../../types';\n\nimport type {RegisterWebhooksOptions} from './types';\n\nexport function registerWebhooksFactory({api, logger}: BasicParams) {\n return async function registerWebhooks({session}: RegisterWebhooksOptions) {\n return api.webhooks\n .register({session})\n .then((response) => {\n Object.entries(response).forEach(([topic, topicResults]) => {\n topicResults.forEach(({success, ...rest}) => {\n if (success) {\n logger.debug('Registered webhook', {\n topic,\n shop: session.shop,\n operation: rest.operation,\n });\n } else {\n logger.error('Failed to register webhook', {\n topic,\n shop: session.shop,\n result: JSON.stringify(rest.result),\n });\n }\n });\n });\n\n return response;\n })\n .catch((error) => {\n const graphQLErrors: {extensions: {code?: string}}[] =\n error.body?.errors?.graphQLErrors || [];\n\n const throttled = graphQLErrors.find(\n ({extensions: {code}}) => code === 'THROTTLED',\n );\n\n if (throttled) {\n logger.error('Failed to register webhooks', {\n shop: session.shop,\n error: JSON.stringify(error),\n });\n } else {\n throw error;\n }\n });\n };\n}\n"],"names":[],"mappings":";;SAIgB,uBAAuB,CAAC,EAAC,GAAG,EAAE,MAAM,EAAc,EAAA;AAChE,IAAA,OAAO,eAAe,gBAAgB,CAAC,EAAC,OAAO,EAA0B,EAAA;QACvE,OAAO,GAAG,CAAC;AACR,aAAA,QAAQ,CAAC,EAAC,OAAO,EAAC;AAClB,aAAA,IAAI,CAAC,CAAC,QAAQ,KAAI;AACjB,YAAA,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,EAAE,YAAY,CAAC,KAAI;gBACzD,YAAY,CAAC,OAAO,CAAC,CAAC,EAAC,OAAO,EAAE,GAAG,IAAI,EAAC,KAAI;oBAC1C,IAAI,OAAO,EAAE;AACX,wBAAA,MAAM,CAAC,KAAK,CAAC,oBAAoB,EAAE;4BACjC,KAAK;4BACL,IAAI,EAAE,OAAO,CAAC,IAAI;4BAClB,SAAS,EAAE,IAAI,CAAC,SAAS;AAC1B,yBAAA,CAAC;oBACJ;yBAAO;AACL,wBAAA,MAAM,CAAC,KAAK,CAAC,4BAA4B,EAAE;4BACzC,KAAK;4BACL,IAAI,EAAE,OAAO,CAAC,IAAI;4BAClB,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC;AACpC,yBAAA,CAAC;oBACJ;AACF,gBAAA,CAAC,CAAC;AACJ,YAAA,CAAC,CAAC;AAEF,YAAA,OAAO,QAAQ;AACjB,QAAA,CAAC;AACA,aAAA,KAAK,CAAC,CAAC,KAAK,KAAI;YACf,MAAM,aAAa,GACjB,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,aAAa,IAAI,EAAE;YAEzC,MAAM,SAAS,GAAG,aAAa,CAAC,IAAI,CAClC,CAAC,EAAC,UAAU,EAAE,EAAC,IAAI,EAAC,EAAC,KAAK,IAAI,KAAK,WAAW,CAC/C;YAED,IAAI,SAAS,EAAE;AACb,gBAAA,MAAM,CAAC,KAAK,CAAC,6BAA6B,EAAE;oBAC1C,IAAI,EAAE,OAAO,CAAC,IAAI;AAClB,oBAAA,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;AAC7B,iBAAA,CAAC;YACJ;iBAAO;AACL,gBAAA,MAAM,KAAK;YACb;AACF,QAAA,CAAC,CAAC;AACN,IAAA,CAAC;AACH;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"error.js","sources":["../../../../../src/server/boundary/error.tsx"],"sourcesContent":[null],"names":["_jsx"],"mappings":";;;;AAAM,SAAU,aAAa,CAAC,KAAU,EAAA;AACtC,IAAA,IACE,KAAK,CAAC,WAAW,CAAC,IAAI,KAAK,eAAe;AAC1C,QAAA,KAAK,CAAC,WAAW,CAAC,IAAI,KAAK,mBAAmB,EAC9C;AACA,QAAA,QACEA,cAAA,CAAA,KAAA,EAAA,EACE,uBAAuB,EAAE,EAAC,MAAM,EAAE,KAAK,CAAC,IAAI,IAAI,mBAAmB,EAAC,EAAA,CACpE;;AAIN,IAAA,MAAM,KAAK;AACb;;;;"}
1
+ {"version":3,"file":"error.js","sources":["../../../../../src/server/boundary/error.tsx"],"sourcesContent":["export function errorBoundary(error: any) {\n if (\n error.constructor.name === 'ErrorResponse' ||\n error.constructor.name === 'ErrorResponseImpl'\n ) {\n return (\n <div\n dangerouslySetInnerHTML={{__html: error.data || 'Handling response'}}\n />\n );\n }\n\n throw error;\n}\n"],"names":["_jsx"],"mappings":";;;;AAAM,SAAU,aAAa,CAAC,KAAU,EAAA;AACtC,IAAA,IACE,KAAK,CAAC,WAAW,CAAC,IAAI,KAAK,eAAe;AAC1C,QAAA,KAAK,CAAC,WAAW,CAAC,IAAI,KAAK,mBAAmB,EAC9C;AACA,QAAA,QACEA,cAAA,CAAA,KAAA,EAAA,EACE,uBAAuB,EAAE,EAAC,MAAM,EAAE,KAAK,CAAC,IAAI,IAAI,mBAAmB,EAAC,EAAA,CACpE;IAEN;AAEA,IAAA,MAAM,KAAK;AACb;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"headers.js","sources":["../../../../../src/server/boundary/headers.ts"],"sourcesContent":[null],"names":[],"mappings":";;AAEM,SAAU,eAAe,CAAC,OAAoB,EAAA;IAClD,MAAM,EAAC,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,YAAY,EAAC,GAAG,OAAO;AAE3E,IAAA,IAAI,YAAY,IAAI,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;AACjE,QAAA,OAAO,YAAY;;IAGrB,OAAO,IAAI,OAAO,CAAC;AACjB,QAAA,IAAI,aAAa,GAAG,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,CAAC;AAC7D,QAAA,IAAI,aAAa,GAAG,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,CAAC;AAC7D,QAAA,IAAI,aAAa,GAAG,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,CAAC;AAC9D,KAAA,CAAC;AACJ;;;;"}
1
+ {"version":3,"file":"headers.js","sources":["../../../../../src/server/boundary/headers.ts"],"sourcesContent":["import {HeadersArgs} from '@remix-run/server-runtime';\n\nexport function headersBoundary(headers: HeadersArgs): Headers {\n const {parentHeaders, loaderHeaders, actionHeaders, errorHeaders} = headers;\n\n if (errorHeaders && Array.from(errorHeaders.entries()).length > 0) {\n return errorHeaders;\n }\n\n return new Headers([\n ...(parentHeaders ? Array.from(parentHeaders.entries()) : []),\n ...(loaderHeaders ? Array.from(loaderHeaders.entries()) : []),\n ...(actionHeaders ? Array.from(actionHeaders.entries()) : []),\n ]);\n}\n"],"names":[],"mappings":";;AAEM,SAAU,eAAe,CAAC,OAAoB,EAAA;IAClD,MAAM,EAAC,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,YAAY,EAAC,GAAG,OAAO;AAE3E,IAAA,IAAI,YAAY,IAAI,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;AACjE,QAAA,OAAO,YAAY;IACrB;IAEA,OAAO,IAAI,OAAO,CAAC;AACjB,QAAA,IAAI,aAAa,GAAG,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,CAAC;AAC7D,QAAA,IAAI,aAAa,GAAG,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,CAAC;AAC7D,QAAA,IAAI,aAAa,GAAG,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,CAAC;AAC9D,KAAA,CAAC;AACJ;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../../src/server/boundary/index.ts"],"sourcesContent":[null],"names":["errorBoundary","headersBoundary"],"mappings":";;;;;AAGA;;AAEG;AACU,MAAA,QAAQ,GAAG;AACtB;;;;;;;;;;;;;AAaG;AACH,IAAA,KAAK,EAAEA,mBAAa;AAEpB;;;;;;;;;;;;;AAaG;AACH,IAAA,OAAO,EAAEC,uBAAe;;;;;"}
1
+ {"version":3,"file":"index.js","sources":["../../../../../src/server/boundary/index.ts"],"sourcesContent":["import {headersBoundary} from './headers';\nimport {errorBoundary} from './error';\n\n/**\n * A collection of functions that handle the necessary code for error boundaries in routes using authenticate.admin.\n */\nexport const boundary = {\n /**\n * A function that handles errors or thrown responses.\n *\n * @example\n * <caption>Catching errors in a route</caption>\n * ```ts\n * // /app/routes/admin/widgets.ts\n * import { boundary } from \"@shopify/shopify-app-remix/server\";\n *\n * export function ErrorBoundary() {\n * return boundary.error(useRouteError());\n * }\n * ```\n */\n error: errorBoundary,\n\n /**\n * A function that sets the appropriate document response headers.\n *\n * @example\n * <caption>Catching errors in a route</caption>\n * ```ts\n * // /app/routes/admin/widgets.ts\n * import { boundary } from \"@shopify/shopify-app-remix/server\";\n *\n * export const headers = (headersArgs) => {\n * return boundary.headers(headersArgs);\n * };\n * ```\n */\n headers: headersBoundary,\n};\n"],"names":["errorBoundary","headersBoundary"],"mappings":";;;;;AAGA;;AAEG;AACI,MAAM,QAAQ,GAAG;AACtB;;;;;;;;;;;;;AAaG;AACH,IAAA,KAAK,EAAEA,mBAAa;AAEpB;;;;;;;;;;;;;AAaG;AACH,IAAA,OAAO,EAAEC,uBAAe;;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"factory.js","sources":["../../../../../../src/server/clients/admin/factory.ts"],"sourcesContent":[null],"names":["graphqlClientFactory","restClientFactory"],"mappings":";;;;;AAeM,SAAU,kBAAkB,CAGhC,EACA,MAAM,EACN,iBAAiB,EACjB,OAAO,GACW,EAAA;IAClB,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE;QACnC,OAAO;YACL,OAAO,EAAEA,4BAAoB,CAAC,EAAC,MAAM,EAAE,OAAO,EAAE,iBAAiB,EAAC,CAAC;SAC3B;;IAG5C,OAAO;QACL,IAAI,EAAEC,sBAAiB,CAAY;YACjC,MAAM;YACN,OAAO;YACP,iBAAiB;SAClB,CAAC;QACF,OAAO,EAAED,4BAAoB,CAAC,EAAC,MAAM,EAAE,OAAO,EAAE,iBAAiB,EAAC,CAAC;KAC3B;AAC5C;;;;"}
1
+ {"version":3,"file":"factory.js","sources":["../../../../../../src/server/clients/admin/factory.ts"],"sourcesContent":["import {Session, ShopifyRestResources} from '@shopify/shopify-api';\n\nimport type {AppConfigArg} from '../../config-types';\nimport {BasicParams} from '../../types';\n\nimport {graphqlClientFactory} from './graphql';\nimport {restClientFactory} from './rest';\nimport type {AdminApiContext} from './types';\n\ninterface RestClientOptions {\n params: BasicParams;\n session: Session;\n handleClientError?: (error: any) => Promise<void>;\n}\n\nexport function adminClientFactory<\n ConfigArg extends AppConfigArg,\n Resources extends ShopifyRestResources = ShopifyRestResources,\n>({\n params,\n handleClientError,\n session,\n}: RestClientOptions): AdminApiContext<ConfigArg, Resources> {\n if (params.config.future.removeRest) {\n return {\n graphql: graphqlClientFactory({params, session, handleClientError}),\n } as AdminApiContext<ConfigArg, Resources>;\n }\n\n return {\n rest: restClientFactory<Resources>({\n params,\n session,\n handleClientError,\n }),\n graphql: graphqlClientFactory({params, session, handleClientError}),\n } as AdminApiContext<ConfigArg, Resources>;\n}\n"],"names":["graphqlClientFactory","restClientFactory"],"mappings":";;;;;AAeM,SAAU,kBAAkB,CAGhC,EACA,MAAM,EACN,iBAAiB,EACjB,OAAO,GACW,EAAA;IAClB,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE;QACnC,OAAO;YACL,OAAO,EAAEA,4BAAoB,CAAC,EAAC,MAAM,EAAE,OAAO,EAAE,iBAAiB,EAAC,CAAC;SAC3B;IAC5C;IAEA,OAAO;QACL,IAAI,EAAEC,sBAAiB,CAAY;YACjC,MAAM;YACN,OAAO;YACP,iBAAiB;SAClB,CAAC;QACF,OAAO,EAAED,4BAAoB,CAAC,EAAC,MAAM,EAAE,OAAO,EAAE,iBAAiB,EAAC,CAAC;KAC3B;AAC5C;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"graphql.js","sources":["../../../../../../src/server/clients/admin/graphql.ts"],"sourcesContent":[null],"names":[],"mappings":";;AAMA;AACA;AACA;AACA;AACM,SAAU,oBAAoB,CAAC,EACnC,MAAM,EACN,iBAAiB,EACjB,OAAO,GACY,EAAA;AACnB,IAAA,OAAO,eAAe,KAAK,CAAC,SAAS,EAAE,OAAO,EAAA;QAC5C,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC;YAC5C,OAAO;YACP,UAAU,EAAE,OAAO,EAAE,UAAU;AAChC,SAAA,CAAC;AAEF,QAAA,IAAI;;YAEF,MAAM,WAAW,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE;gBAClD,SAAS,EAAE,OAAO,EAAE,SAAS;AAC7B,gBAAA,OAAO,EAAE,OAAO,EAAE,KAAK,GAAG,OAAO,CAAC,KAAK,GAAG,CAAC,GAAG,CAAC;gBAC/C,OAAO,EAAE,OAAO,EAAE,OAAO;gBACzB,MAAM,EAAE,OAAO,EAAE,MAAM;AACxB,aAAA,CAAC;YAEF,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;;QAChD,OAAO,KAAK,EAAE;YACd,IAAI,iBAAiB,EAAE;gBACrB,MAAM,MAAM,iBAAiB,CAAC,EAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAC,CAAC;;AAGzD,YAAA,MAAM,KAAK;;AAEf,KAAC;AACH;;;;"}
1
+ {"version":3,"file":"graphql.js","sources":["../../../../../../src/server/clients/admin/graphql.ts"],"sourcesContent":["import {AdminOperations} from '@shopify/admin-api-client';\n\nimport {GraphQLClient} from '../types';\n\nimport {AdminClientOptions} from './types';\n\n// eslint-disable-next-line no-warning-comments\n// TODO: This is actually just a call through to the Shopify API client, but with a different API. We should eventually\n// move this over to the library layer. While doing that, we should also allow the apiVersion to be passed into the REST\n// client request calls.\nexport function graphqlClientFactory({\n params,\n handleClientError,\n session,\n}: AdminClientOptions): GraphQLClient<AdminOperations> {\n return async function query(operation, options) {\n const client = new params.api.clients.Graphql({\n session,\n apiVersion: options?.apiVersion,\n });\n\n try {\n // We convert the incoming response to a Response object to bring this client closer to the Remix client.\n const apiResponse = await client.request(operation, {\n variables: options?.variables,\n retries: options?.tries ? options.tries - 1 : 0,\n headers: options?.headers,\n signal: options?.signal,\n });\n\n return new Response(JSON.stringify(apiResponse));\n } catch (error) {\n if (handleClientError) {\n throw await handleClientError({error, params, session});\n }\n\n throw error;\n }\n };\n}\n"],"names":[],"mappings":";;AAMA;AACA;AACA;AACA;AACM,SAAU,oBAAoB,CAAC,EACnC,MAAM,EACN,iBAAiB,EACjB,OAAO,GACY,EAAA;AACnB,IAAA,OAAO,eAAe,KAAK,CAAC,SAAS,EAAE,OAAO,EAAA;QAC5C,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC;YAC5C,OAAO;YACP,UAAU,EAAE,OAAO,EAAE,UAAU;AAChC,SAAA,CAAC;AAEF,QAAA,IAAI;;YAEF,MAAM,WAAW,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE;gBAClD,SAAS,EAAE,OAAO,EAAE,SAAS;AAC7B,gBAAA,OAAO,EAAE,OAAO,EAAE,KAAK,GAAG,OAAO,CAAC,KAAK,GAAG,CAAC,GAAG,CAAC;gBAC/C,OAAO,EAAE,OAAO,EAAE,OAAO;gBACzB,MAAM,EAAE,OAAO,EAAE,MAAM;AACxB,aAAA,CAAC;YAEF,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;QAClD;QAAE,OAAO,KAAK,EAAE;YACd,IAAI,iBAAiB,EAAE;gBACrB,MAAM,MAAM,iBAAiB,CAAC,EAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAC,CAAC;YACzD;AAEA,YAAA,MAAM,KAAK;QACb;AACF,IAAA,CAAC;AACH;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"rest.js","sources":["../../../../../../src/server/clients/admin/rest.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"rest.js","sources":["../../../../../../src/server/clients/admin/rest.ts"],"sourcesContent":["import {\n DeleteRequestParams,\n GetRequestParams,\n PostRequestParams,\n PutRequestParams,\n RequestParams,\n Session,\n Shopify,\n ShopifyRestResources,\n} from '@shopify/shopify-api';\n\nimport type {AdminClientOptions} from './types';\n\nexport type RestClientWithResources<Resources extends ShopifyRestResources> =\n RemixRestClient & {resources: Resources};\n\nexport function restClientFactory<\n Resources extends ShopifyRestResources = ShopifyRestResources,\n>({\n params,\n handleClientError,\n session,\n}: AdminClientOptions): RestClientWithResources<Resources> {\n const {api} = params;\n const client = new RemixRestClient({\n params,\n handleClientError,\n session,\n }) as RestClientWithResources<Resources>;\n\n if (api.rest) {\n client.resources = {} as Resources;\n\n const RestResourceClient = restResourceClientFactory({\n params,\n handleClientError,\n session,\n });\n\n Object.entries(api.rest).forEach(([name, resource]) => {\n class RemixResource extends resource {\n public static Client = RestResourceClient;\n }\n\n Reflect.defineProperty(RemixResource, 'name', {\n value: name,\n });\n\n Reflect.set(client.resources, name, RemixResource);\n });\n }\n\n return client;\n}\n\nclass RemixRestClient {\n public session: Session;\n private params: AdminClientOptions['params'];\n private handleClientError: AdminClientOptions['handleClientError'];\n\n constructor({params, session, handleClientError}: AdminClientOptions) {\n this.params = params;\n this.handleClientError = handleClientError;\n this.session = session;\n }\n\n /**\n * Performs a GET request on the given path.\n *\n * @deprecated In a future major release REST will be removed from this package. Please see [all-in on graphql](https://www.shopify.com/ca/partners/blog/all-in-on-graphql).\n */\n public async get(params: GetRequestParams) {\n return this.makeRequest({\n method: 'GET' as RequestParams['method'],\n ...params,\n });\n }\n\n /**\n * Performs a POST request on the given path.\n *\n * @deprecated In a future major release REST will be removed from this package. Please see [all-in on graphql](https://www.shopify.com/ca/partners/blog/all-in-on-graphql).\n */\n public async post(params: PostRequestParams) {\n return this.makeRequest({\n method: 'POST' as RequestParams['method'],\n ...params,\n });\n }\n\n /**\n * Performs a PUT request on the given path.\n *\n * @deprecated In a future major release REST will be removed from this package. Please see [all-in on graphql](https://www.shopify.com/ca/partners/blog/all-in-on-graphql).\n */\n public async put(params: PutRequestParams) {\n return this.makeRequest({\n method: 'PUT' as RequestParams['method'],\n ...params,\n });\n }\n\n /**\n * Performs a DELETE request on the given path.\n *\n * @deprecated In a future major release REST will be removed from this package. Please see [all-in on graphql](https://www.shopify.com/ca/partners/blog/all-in-on-graphql).\n */\n public async delete(params: DeleteRequestParams) {\n return this.makeRequest({\n method: 'DELETE' as RequestParams['method'],\n ...params,\n });\n }\n\n protected async makeRequest(params: RequestParams): Promise<Response> {\n const originalClient = new this.params.api.clients.Rest({\n session: this.session,\n });\n const originalRequest = Reflect.get(originalClient, 'request');\n\n try {\n const apiResponse = await originalRequest.call(originalClient, params);\n\n // We use a separate client for REST requests and REST resources because we want to override the API library\n // client class to return a Response object instead.\n return new Response(JSON.stringify(apiResponse.body), {\n headers: apiResponse.headers,\n });\n } catch (error) {\n if (this.handleClientError) {\n throw await this.handleClientError({\n error,\n session: this.session,\n params: this.params,\n });\n } else throw new Error(error);\n }\n }\n}\n\nfunction restResourceClientFactory({\n params,\n handleClientError,\n session,\n}: AdminClientOptions): Shopify['clients']['Rest'] {\n const {api} = params;\n\n const ApiClient = api.clients.Rest;\n return class RestResourceClient extends ApiClient {\n protected async request(requestParams: RequestParams) {\n const originalClient = new api.clients.Rest({session});\n const originalRequest = Reflect.get(originalClient, 'request');\n\n try {\n // We just call through to the API library client, and handle the error response here, so that data parsing\n // behaves the same way.\n return await originalRequest.call(originalClient, requestParams);\n } catch (error) {\n if (handleClientError) {\n throw await handleClientError({error, params, session});\n } else throw new Error(error);\n }\n }\n };\n}\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"factory.js","sources":["../../../../../../src/server/clients/storefront/factory.ts"],"sourcesContent":[null],"names":[],"mappings":";;SAMgB,uBAAuB,CAAC,EACtC,MAAM,EACN,OAAO,GAIR,EAAA;AACC,IAAA,MAAM,EAAC,GAAG,EAAC,GAAG,MAAM;IAEpB,OAAO;QACL,OAAO,EAAE,OAAO,KAAK,EAAE,OAAO,GAAG,EAAE,KAAI;YACrC,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC;gBACxC,OAAO;gBACP,UAAU,EAAE,OAAO,CAAC,UAAU;AAC/B,aAAA,CAAC;YAEF,MAAM,WAAW,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE;gBAC9C,SAAS,EAAE,OAAO,EAAE,SAAS;AAC7B,gBAAA,OAAO,EAAE,OAAO,EAAE,KAAK,GAAG,OAAO,CAAC,KAAK,GAAG,CAAC,GAAG,CAAC;gBAC/C,OAAO,EAAE,OAAO,EAAE,OAAO;AAC1B,aAAA,CAAC;YAEF,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;SACjD;KACF;AACH;;;;"}
1
+ {"version":3,"file":"factory.js","sources":["../../../../../../src/server/clients/storefront/factory.ts"],"sourcesContent":["import {Session} from '@shopify/shopify-api';\n\nimport {BasicParams} from '../../types';\n\nimport type {StorefrontContext} from '.';\n\nexport function storefrontClientFactory({\n params,\n session,\n}: {\n params: BasicParams;\n session: Session;\n}): StorefrontContext {\n const {api} = params;\n\n return {\n graphql: async (query, options = {}) => {\n const client = new api.clients.Storefront({\n session,\n apiVersion: options.apiVersion,\n });\n\n const apiResponse = await client.request(query, {\n variables: options?.variables,\n retries: options?.tries ? options.tries - 1 : 0,\n headers: options?.headers,\n });\n\n return new Response(JSON.stringify(apiResponse));\n },\n };\n}\n"],"names":[],"mappings":";;SAMgB,uBAAuB,CAAC,EACtC,MAAM,EACN,OAAO,GAIR,EAAA;AACC,IAAA,MAAM,EAAC,GAAG,EAAC,GAAG,MAAM;IAEpB,OAAO;QACL,OAAO,EAAE,OAAO,KAAK,EAAE,OAAO,GAAG,EAAE,KAAI;YACrC,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC;gBACxC,OAAO;gBACP,UAAU,EAAE,OAAO,CAAC,UAAU;AAC/B,aAAA,CAAC;YAEF,MAAM,WAAW,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE;gBAC9C,SAAS,EAAE,OAAO,EAAE,SAAS;AAC7B,gBAAA,OAAO,EAAE,OAAO,EAAE,KAAK,GAAG,OAAO,CAAC,KAAK,GAAG,CAAC,GAAG,CAAC;gBAC/C,OAAO,EAAE,OAAO,EAAE,OAAO;AAC1B,aAAA,CAAC;YAEF,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;QAClD,CAAC;KACF;AACH;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"errors.js","sources":["../../../../src/server/errors.ts"],"sourcesContent":[null],"names":["ShopifyError"],"mappings":";;;;AAEM,MAAO,oBAAqB,SAAQA,uBAAY,CAAA;AAAG;;;;"}
1
+ {"version":3,"file":"errors.js","sources":["../../../../src/server/errors.ts"],"sourcesContent":["import {ShopifyError} from '@shopify/shopify-api';\n\nexport class SessionNotFoundError extends ShopifyError {}\n"],"names":["ShopifyError"],"mappings":";;;;AAEM,MAAO,oBAAqB,SAAQA,uBAAY,CAAA;AAAG;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"flags.js","sources":["../../../../../src/server/future/flags.ts"],"sourcesContent":[null],"names":[],"mappings":";;AAgEgB,SAAA,sBAAsB,CACpC,MAAiB,EACjB,MAAyB,EAAA;AAEzB,IAAA,MAAM,OAAO,GAAG,CAAC,IAAY,EAAE,OAAe,KAC5C,MAAM,CAAC,IAAI,CAAC,CAAe,YAAA,EAAA,IAAI,sBAAsB,OAAO,CAAA,EAAA,CAAI,CAAC;AAEnE,IAAA,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,gCAAgC,EAAE;QACnD,OAAO,CACL,kCAAkC,EAClC,6FAA6F;AAC3F,YAAA,qGAAqG,CACxG;;AAEL;;;;"}
1
+ {"version":3,"file":"flags.js","sources":["../../../../../src/server/future/flags.ts"],"sourcesContent":["import type {\n ConfigParams,\n Shopify,\n ShopifyRestResources,\n} from '@shopify/shopify-api';\n\nimport {AppConfig} from '../config-types';\n\n// When adding new flags, you should also add them to the `TEST_FUTURE_FLAGS` object in `test-config.ts` to ensure that\n// it doesn't cause regressions.\nexport interface FutureFlags {\n /**\n * When enabled, embedded apps will fetch access tokens via [token exchange](https://shopify.dev/docs/apps/auth/get-access-tokens/token-exchange).\n * This assumes the app has scopes declared for [Shopify managing installation](https://shopify.dev/docs/apps/auth/installation#shopify-managed-installation).\n *\n * Learn more about this [new embedded app auth strategy](https://shopify.dev/docs/api/shopify-app-remix#embedded-auth-strategy).\n *\n * @default false\n */\n unstable_newEmbeddedAuthStrategy?: boolean;\n\n /**\n * When enabled, methods for interacting with the admin REST API will not be returned.\n *\n * This affects:\n *\n * * `authenticate.admin(request)`\n * * `authenticate.webhook(request)`\n * * `authenticate.flow(request)`\n * * `authenticate.appProxy(request)`\n * * `authenticate.fulfillmentService(request)`\n * * `unauthenticated.admin(shop)`\n *\n * In a future release we will remove REST from the package completely.\n *\n * Please see: [https://www.shopify.com/ca/partners/blog/all-in-on-graphql](https://www.shopify.com/ca/partners/blog/all-in-on-graphql)\n *\n * @default false\n */\n removeRest?: boolean;\n}\n\n// When adding new flags, use this format:\n// apiFutureFlag: Future extends FutureFlags ? Future['remixFutureFlag'] : false;\nexport interface ApiFutureFlags<_Future extends FutureFlagOptions> {\n // We're currently hardcoding this flag to true in our settings, so we should propagate it here\n lineItemBilling: true;\n unstable_managedPricingSupport: true;\n}\n\nexport type ApiConfigWithFutureFlags<Future extends FutureFlagOptions> =\n ConfigParams<ShopifyRestResources, ApiFutureFlags<Future>>;\n\nexport type FutureFlagOptions = FutureFlags | undefined;\n\nexport type FeatureEnabled<\n Future extends FutureFlagOptions,\n Flag extends keyof FutureFlags,\n> = Future extends FutureFlags\n ? Future[Flag] extends true\n ? true\n : false\n : false;\n\nexport function logDisabledFutureFlags(\n config: AppConfig,\n logger: Shopify['logger'],\n) {\n const logFlag = (flag: string, message: string) =>\n logger.info(`Future flag ${flag} is disabled.\\n\\n ${message}\\n`);\n\n if (!config.future.unstable_newEmbeddedAuthStrategy) {\n logFlag(\n 'unstable_newEmbeddedAuthStrategy',\n 'Enable this to use OAuth token exchange instead of auth code to generate API access tokens.' +\n '\\n Your app must be using Shopify managed install: https://shopify.dev/docs/apps/auth/installation',\n );\n }\n}\n"],"names":[],"mappings":";;AAgEM,SAAU,sBAAsB,CACpC,MAAiB,EACjB,MAAyB,EAAA;AAEzB,IAAA,MAAM,OAAO,GAAG,CAAC,IAAY,EAAE,OAAe,KAC5C,MAAM,CAAC,IAAI,CAAC,CAAA,YAAA,EAAe,IAAI,sBAAsB,OAAO,CAAA,EAAA,CAAI,CAAC;AAEnE,IAAA,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,gCAAgC,EAAE;QACnD,OAAO,CACL,kCAAkC,EAClC,6FAA6F;AAC3F,YAAA,qGAAqG,CACxG;IACH;AACF;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../src/server/index.ts"],"sourcesContent":[null],"names":["setAbstractRuntimeString"],"mappings":";;;;;;;;;;AAGAA,gCAAwB,CAAC,MAAK;AAC5B,IAAA,OAAO,OAAO;AAChB,CAAC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.js","sources":["../../../../src/server/index.ts"],"sourcesContent":["import '@shopify/shopify-api/adapters/web-api';\nimport {setAbstractRuntimeString} from '@shopify/shopify-api/runtime';\n\nsetAbstractRuntimeString(() => {\n return `Remix`;\n});\n\nexport {\n LATEST_API_VERSION,\n RELEASE_CANDIDATE_API_VERSION,\n LogSeverity,\n DeliveryMethod,\n BillingInterval,\n BillingReplacementBehavior,\n ApiVersion,\n Session,\n} from '@shopify/shopify-api';\n\nexport type {JwtPayload} from '@shopify/shopify-api';\n\nexport type * from './types-contexts';\nexport type {ShopifyApp, LoginError} from './types';\nexport {LoginErrorType, AppDistribution} from './types';\nexport {boundary} from './boundary';\nexport {shopifyApp} from './shopify-app';\nexport * from './errors';\n"],"names":["setAbstractRuntimeString"],"mappings":";;;;;;;;;;AAGAA,gCAAwB,CAAC,MAAK;AAC5B,IAAA,OAAO,OAAO;AAChB,CAAC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"override-logger.js","sources":["../../../../src/server/override-logger.ts"],"sourcesContent":[null],"names":["version","SHOPIFY_REMIX_LIBRARY_VERSION","FeatureDeprecatedError"],"mappings":";;;;;;AAKA;AACA;AACA;AACM,SAAU,cAAc,CAAC,MAAyB,EAAA;AACtD,IAAA,MAAM,WAAW,GAAG,EAAC,OAAO,EAAE,aAAa,EAAC;IAE5C,MAAM,eAAe,GAAiC,CACpD,OAAO,EACP,OAAO,GAAG,EAAE,KACT,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,EAAC,GAAG,WAAW,EAAE,GAAG,OAAO,EAAC,CAAC;IAE1D,SAAS,UAAU,CAAC,eAA6C,EAAA;QAC/D,OAAO,UAAUA,SAAe,EAAE,OAAe,EAAA;YAC/C,IAAI,MAAM,CAAC,GAAG,CAACC,qCAA6B,EAAED,SAAO,CAAC,EAAE;AACtD,gBAAA,MAAM,IAAIE,iCAAsB,CAC9B,qCAAqCF,SAAO,CAAA,CAAE,CAC/C;;YAGH,OAAO,eAAe,CAAC,CAAiB,cAAA,EAAAA,SAAO,KAAK,OAAO,CAAA,CAAE,CAAC;AAChE,SAAC;;IAGH,OAAO;AACL,QAAA,GAAG,MAAM;QACT,GAAG,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,GAAG,EAAE,KACnC,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAC,GAAG,WAAW,EAAE,GAAG,OAAO,EAAC,CAAC;QAC7D,KAAK,EAAE,CAAC,OAAO,EAAE,OAAO,GAAG,EAAE,KAC3B,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,EAAC,GAAG,WAAW,EAAE,GAAG,OAAO,EAAC,CAAC;QACrD,IAAI,EAAE,CAAC,OAAO,EAAE,OAAO,GAAG,EAAE,KAC1B,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,EAAC,GAAG,WAAW,EAAE,GAAG,OAAO,EAAC,CAAC;AACpD,QAAA,OAAO,EAAE,eAAe;QACxB,KAAK,EAAE,CAAC,OAAO,EAAE,OAAO,GAAG,EAAE,KAC3B,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,EAAC,GAAG,WAAW,EAAE,GAAG,OAAO,EAAC,CAAC;AACrD,QAAA,UAAU,EAAE,UAAU,CAAC,eAAe,CAAC;KACxC;AACH;;;;"}
1
+ {"version":3,"file":"override-logger.js","sources":["../../../../src/server/override-logger.ts"],"sourcesContent":["import semver from 'semver';\nimport {FeatureDeprecatedError, Shopify} from '@shopify/shopify-api';\n\nimport {SHOPIFY_REMIX_LIBRARY_VERSION} from './version';\n\n// eslint-disable-next-line no-warning-comments\n// TODO This has been copied from shopify-app-express, it should be extracted into a shared package\n// https://github.com/orgs/Shopify/projects/6899/views/1?pane=issue&itemId=28358070\nexport function overrideLogger(logger: Shopify['logger']): Shopify['logger'] {\n const baseContext = {package: 'shopify-app'};\n\n const warningFunction: Shopify['logger']['warning'] = (\n message,\n context = {},\n ) => logger.warning(message, {...baseContext, ...context});\n\n function deprecated(warningFunction: Shopify['logger']['warning']) {\n return function (version: string, message: string): Promise<void> {\n if (semver.gte(SHOPIFY_REMIX_LIBRARY_VERSION, version)) {\n throw new FeatureDeprecatedError(\n `Feature was deprecated in version ${version}`,\n );\n }\n\n return warningFunction(`[Deprecated | ${version}] ${message}`);\n };\n }\n\n return {\n ...logger,\n log: (severity, message, context = {}) =>\n logger.log(severity, message, {...baseContext, ...context}),\n debug: (message, context = {}) =>\n logger.debug(message, {...baseContext, ...context}),\n info: (message, context = {}) =>\n logger.info(message, {...baseContext, ...context}),\n warning: warningFunction,\n error: (message, context = {}) =>\n logger.error(message, {...baseContext, ...context}),\n deprecated: deprecated(warningFunction),\n };\n}\n"],"names":["version","SHOPIFY_REMIX_LIBRARY_VERSION","FeatureDeprecatedError"],"mappings":";;;;;;AAKA;AACA;AACA;AACM,SAAU,cAAc,CAAC,MAAyB,EAAA;AACtD,IAAA,MAAM,WAAW,GAAG,EAAC,OAAO,EAAE,aAAa,EAAC;IAE5C,MAAM,eAAe,GAAiC,CACpD,OAAO,EACP,OAAO,GAAG,EAAE,KACT,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,EAAC,GAAG,WAAW,EAAE,GAAG,OAAO,EAAC,CAAC;IAE1D,SAAS,UAAU,CAAC,eAA6C,EAAA;QAC/D,OAAO,UAAUA,SAAe,EAAE,OAAe,EAAA;YAC/C,IAAI,MAAM,CAAC,GAAG,CAACC,qCAA6B,EAAED,SAAO,CAAC,EAAE;AACtD,gBAAA,MAAM,IAAIE,iCAAsB,CAC9B,qCAAqCF,SAAO,CAAA,CAAE,CAC/C;YACH;YAEA,OAAO,eAAe,CAAC,CAAA,cAAA,EAAiBA,SAAO,KAAK,OAAO,CAAA,CAAE,CAAC;AAChE,QAAA,CAAC;IACH;IAEA,OAAO;AACL,QAAA,GAAG,MAAM;QACT,GAAG,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,GAAG,EAAE,KACnC,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAC,GAAG,WAAW,EAAE,GAAG,OAAO,EAAC,CAAC;QAC7D,KAAK,EAAE,CAAC,OAAO,EAAE,OAAO,GAAG,EAAE,KAC3B,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,EAAC,GAAG,WAAW,EAAE,GAAG,OAAO,EAAC,CAAC;QACrD,IAAI,EAAE,CAAC,OAAO,EAAE,OAAO,GAAG,EAAE,KAC1B,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,EAAC,GAAG,WAAW,EAAE,GAAG,OAAO,EAAC,CAAC;AACpD,QAAA,OAAO,EAAE,eAAe;QACxB,KAAK,EAAE,CAAC,OAAO,EAAE,OAAO,GAAG,EAAE,KAC3B,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,EAAC,GAAG,WAAW,EAAE,GAAG,OAAO,EAAC,CAAC;AACrD,QAAA,UAAU,EAAE,UAAU,CAAC,eAAe,CAAC;KACxC;AACH;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"shopify-app.js","sources":["../../../../src/server/shopify-app.ts"],"sourcesContent":[null],"names":["overrideLogger","AppDistribution","MerchantCustomAuth","TokenExchangeStrategy","AuthCodeFlowStrategy","authStrategyFactory","addDocumentResponseHeadersFactory","registerWebhooksFactory","authenticateFlowFactory","authenticatePublicFactory","authenticateFulfillmentServiceFactory","authenticateWebhookFactory","unauthenticatedAdminContextFactory","unauthenticatedStorefrontContextFactory","loginFactory","logDisabledFutureFlags","ShopifyError","SHOPIFY_REMIX_LIBRARY_VERSION","shopifyApi","LATEST_API_VERSION","IdempotentPromiseHandler"],"mappings":"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"}
1
+ {"version":3,"file":"shopify-app.js","sources":["../../../../src/server/shopify-app.ts"],"sourcesContent":["import '@shopify/shopify-api/adapters/web-api';\nimport {\n ConfigInterface as ApiConfig,\n LATEST_API_VERSION,\n ShopifyError,\n ShopifyRestResources,\n shopifyApi,\n} from '@shopify/shopify-api';\nimport {SessionStorage} from '@shopify/shopify-app-session-storage';\n\nimport {type AppConfig, type AppConfigArg} from './config-types';\nimport {\n AppDistribution,\n type BasicParams,\n type ShopifyApp,\n type ShopifyAppBase,\n type AdminApp,\n type SingleMerchantApp,\n type AppStoreApp,\n} from './types';\nimport {SHOPIFY_REMIX_LIBRARY_VERSION} from './version';\nimport {registerWebhooksFactory} from './authenticate/webhooks';\nimport {authStrategyFactory} from './authenticate/admin/authenticate';\nimport {authenticateWebhookFactory} from './authenticate/webhooks/authenticate';\nimport {overrideLogger} from './override-logger';\nimport {addDocumentResponseHeadersFactory} from './authenticate/helpers';\nimport {loginFactory} from './authenticate/login/login';\nimport {unauthenticatedAdminContextFactory} from './unauthenticated/admin';\nimport {authenticatePublicFactory} from './authenticate/public';\nimport {unauthenticatedStorefrontContextFactory} from './unauthenticated/storefront';\nimport {AuthCodeFlowStrategy} from './authenticate/admin/strategies/auth-code-flow';\nimport {TokenExchangeStrategy} from './authenticate/admin/strategies/token-exchange';\nimport {MerchantCustomAuth} from './authenticate/admin/strategies/merchant-custom-app';\nimport {IdempotentPromiseHandler} from './authenticate/helpers/idempotent-promise-handler';\nimport {authenticateFlowFactory} from './authenticate/flow/authenticate';\nimport {authenticateFulfillmentServiceFactory} from './authenticate/fulfillment-service/authenticate';\nimport {FutureFlagOptions, logDisabledFutureFlags} from './future/flags';\n\n/**\n * Creates an object your app will use to interact with Shopify.\n *\n * @param appConfig Configuration options for your Shopify app, such as the scopes your app needs.\n * @returns `ShopifyApp` An object constructed using your appConfig. It has methods for interacting with Shopify.\n *\n * @example\n * <caption>The minimum viable configuration</caption>\n * ```ts\n * // /shopify.server.ts\n * import { shopifyApp } from \"@shopify/shopify-app-remix/server\";\n *\n * const shopify = shopifyApp({\n * apiKey: process.env.SHOPIFY_API_KEY!,\n * apiSecretKey: process.env.SHOPIFY_API_SECRET!,\n * scopes: process.env.SCOPES?.split(\",\")!,\n * appUrl: process.env.SHOPIFY_APP_URL!,\n * });\n * export default shopify;\n * ```\n */\nexport function shopifyApp<\n Config extends AppConfigArg<Resources, Storage, Future>,\n Resources extends ShopifyRestResources,\n Storage extends SessionStorage,\n Future extends FutureFlagOptions = Config['future'],\n>(appConfig: Readonly<Config>): ShopifyApp<Config> {\n const api = deriveApi(appConfig);\n const config = deriveConfig<Storage>(appConfig, api.config);\n const logger = overrideLogger(api.logger);\n\n if (appConfig.webhooks) {\n api.webhooks.addHandlers(appConfig.webhooks);\n }\n\n const params: BasicParams = {api, config, logger};\n\n let strategy;\n if (config.distribution === AppDistribution.ShopifyAdmin) {\n strategy = new MerchantCustomAuth(params);\n } else if (\n config.future.unstable_newEmbeddedAuthStrategy &&\n config.isEmbeddedApp\n ) {\n strategy = new TokenExchangeStrategy(params);\n } else {\n strategy = new AuthCodeFlowStrategy(params);\n }\n\n const authStrategy = authStrategyFactory<Config, Resources>({\n ...params,\n strategy,\n });\n\n const shopify:\n | AdminApp<Config>\n | AppStoreApp<Config>\n | SingleMerchantApp<Config> = {\n sessionStorage: config.sessionStorage,\n addDocumentResponseHeaders: addDocumentResponseHeadersFactory(params),\n registerWebhooks: registerWebhooksFactory(params),\n authenticate: {\n admin: authStrategy,\n flow: authenticateFlowFactory<Config, Resources>(params),\n public: authenticatePublicFactory<Config, Resources>(params),\n fulfillmentService: authenticateFulfillmentServiceFactory<\n Config,\n Resources\n >(params),\n webhook: authenticateWebhookFactory<Config, Resources, string>(params),\n },\n unauthenticated: {\n admin: unauthenticatedAdminContextFactory<Config, Resources>(params),\n storefront: unauthenticatedStorefrontContextFactory(params),\n },\n };\n\n if (\n isAppStoreApp(shopify, appConfig) ||\n isSingleMerchantApp(shopify, appConfig)\n ) {\n shopify.login = loginFactory(params);\n }\n\n logDisabledFutureFlags(config, logger);\n\n return shopify as ShopifyApp<Config>;\n}\n\nfunction isAppStoreApp<Config extends AppConfigArg>(\n _shopify: ShopifyAppBase<Config>,\n config: Config,\n): _shopify is AppStoreApp<Config> {\n return config.distribution === AppDistribution.AppStore;\n}\n\nfunction isSingleMerchantApp<Config extends AppConfigArg>(\n _shopify: ShopifyAppBase<Config>,\n config: Config,\n): _shopify is SingleMerchantApp<Config> {\n return config.distribution === AppDistribution.SingleMerchant;\n}\n\n// This function is only exported so we can unit test it without having to mock the underlying module.\n// It's not available to consumers of the library because it is not exported in the index module, and never should be.\nexport function deriveApi(appConfig: AppConfigArg): BasicParams['api'] {\n let appUrl: URL;\n try {\n appUrl = new URL(appConfig.appUrl);\n } catch (error) {\n const message =\n appConfig.appUrl === ''\n ? `Detected an empty appUrl configuration, please make sure to set the necessary environment variables.\\n` +\n `If you're deploying your app, you can find more information at https://shopify.dev/docs/apps/launch/deployment/deploy-web-app/deploy-to-hosting-service#step-4-set-up-environment-variables`\n : `Invalid appUrl configuration '${appConfig.appUrl}', please provide a valid URL.`;\n throw new ShopifyError(message);\n }\n\n /* eslint-disable no-process-env */\n if (appUrl.hostname === 'localhost' && !appUrl.port && process.env.PORT) {\n appUrl.port = process.env.PORT;\n }\n /* eslint-enable no-process-env */\n appConfig.appUrl = appUrl.origin;\n\n let userAgentPrefix = `Shopify Remix Library v${SHOPIFY_REMIX_LIBRARY_VERSION}`;\n if (appConfig.userAgentPrefix) {\n userAgentPrefix = `${appConfig.userAgentPrefix} | ${userAgentPrefix}`;\n }\n\n return shopifyApi({\n ...appConfig,\n hostName: appUrl.host,\n hostScheme: appUrl.protocol.replace(':', '') as 'http' | 'https',\n userAgentPrefix,\n isEmbeddedApp: appConfig.isEmbeddedApp ?? true,\n apiVersion: appConfig.apiVersion ?? LATEST_API_VERSION,\n isCustomStoreApp: appConfig.distribution === AppDistribution.ShopifyAdmin,\n billing: appConfig.billing as ApiConfig['billing'],\n future: {\n lineItemBilling: true,\n unstable_managedPricingSupport: true,\n },\n _logDisabledFutureFlags: false,\n });\n}\n\nfunction deriveConfig<Storage extends SessionStorage>(\n appConfig: AppConfigArg,\n apiConfig: ApiConfig,\n): AppConfig<Storage> {\n if (\n !appConfig.sessionStorage &&\n appConfig.distribution !== AppDistribution.ShopifyAdmin\n ) {\n throw new ShopifyError(\n 'Please provide a valid session storage. Refer to https://github.com/Shopify/shopify-app-js/blob/main/README.md#session-storage-options for options.',\n );\n }\n\n const authPathPrefix = appConfig.authPathPrefix || '/auth';\n appConfig.distribution = appConfig.distribution ?? AppDistribution.AppStore;\n\n return {\n ...appConfig,\n ...apiConfig,\n billing: appConfig.billing as ApiConfig['billing'],\n scopes: apiConfig.scopes,\n idempotentPromiseHandler: new IdempotentPromiseHandler(),\n canUseLoginForm: appConfig.distribution !== AppDistribution.ShopifyAdmin,\n useOnlineTokens: appConfig.useOnlineTokens ?? false,\n hooks: appConfig.hooks ?? {},\n sessionStorage: appConfig.sessionStorage as Storage,\n future: appConfig.future ?? {},\n auth: {\n path: authPathPrefix,\n callbackPath: `${authPathPrefix}/callback`,\n patchSessionTokenPath: `${authPathPrefix}/session-token`,\n exitIframePath: `${authPathPrefix}/exit-iframe`,\n loginPath: `${authPathPrefix}/login`,\n },\n distribution: appConfig.distribution,\n };\n}\n"],"names":["overrideLogger","AppDistribution","MerchantCustomAuth","TokenExchangeStrategy","AuthCodeFlowStrategy","authStrategyFactory","addDocumentResponseHeadersFactory","registerWebhooksFactory","authenticateFlowFactory","authenticatePublicFactory","authenticateFulfillmentServiceFactory","authenticateWebhookFactory","unauthenticatedAdminContextFactory","unauthenticatedStorefrontContextFactory","loginFactory","logDisabledFutureFlags","ShopifyError","SHOPIFY_REMIX_LIBRARY_VERSION","shopifyApi","LATEST_API_VERSION","IdempotentPromiseHandler"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"test-config.js","sources":["../../../../../src/server/test-helpers/test-config.ts"],"sourcesContent":[null],"names":["API_KEY","API_SECRET_KEY","APP_URL","LogSeverity","MemorySessionStorage"],"mappings":";;;;;;AAYA,MAAM,WAAW,GAAG;AAClB,IAAA,MAAM,EAAEA,mBAAO;AACf,IAAA,YAAY,EAAEC,0BAAc;IAC5B,MAAM,EAAE,CAAC,WAAW,CAAQ;AAC5B,IAAA,MAAM,EAAEC,mBAAO;AACf,IAAA,mBAAmB,EAAEF,mBAAO;AAC5B,IAAA,+BAA+B,EAAEA,mBAAO;AACxC,IAAA,MAAM,EAAE;QACN,KAAK,EAAEG,sBAAW,CAAC,KAAK;AACzB,KAAA;IACD,cAAc,EAAE,IAAIC,2BAAoB,EAAE;AAC1C,IAAA,SAAS,EAAE,IAAI;CACP;AAEJ,SAAU,UAAU,CAIxB,EAAC,MAAM,EAAE,GAAG,SAAS,EAAA,GAAmC,EAEvD,EAAA;IAED,OAAO;AACL,QAAA,GAAG,WAAW;AACd,QAAA,GAAG,SAAS;AACZ,QAAA,MAAM,EAAE;YACN,GAAG,WAAW,CAAC,MAAM;YACrB,GAAI,SAAoC,CAAC,MAAM;AAChD,SAAA;QACD,MAAM;KACA;AACV;;;;"}
1
+ {"version":3,"file":"test-config.js","sources":["../../../../../src/server/test-helpers/test-config.ts"],"sourcesContent":["import {LogSeverity, ShopifyRestResources} from '@shopify/shopify-api';\nimport {SessionStorage} from '@shopify/shopify-app-session-storage';\nimport {MemorySessionStorage} from '@shopify/shopify-app-session-storage-memory';\nimport {\n API_KEY,\n API_SECRET_KEY,\n APP_URL,\n} from '@shopify/shopify-api/test-helpers';\n\nimport type {AppConfigArg} from '../config-types';\nimport type {FutureFlagOptions} from '../future/flags';\n\nconst TEST_CONFIG = {\n apiKey: API_KEY,\n apiSecretKey: API_SECRET_KEY,\n scopes: ['testScope'] as any,\n appUrl: APP_URL,\n adminApiAccessToken: API_KEY,\n privateAppStorefrontAccessToken: API_KEY,\n logger: {\n level: LogSeverity.Debug,\n },\n sessionStorage: new MemorySessionStorage(),\n isTesting: true,\n} as const;\n\nexport function testConfig<\n Overrides extends TestOverridesArg,\n Future extends FutureFlagOptions,\n>(\n {future, ...overrides}: Overrides & {future?: Future} = {} as Overrides & {\n future?: Future;\n },\n): TestConfig<Overrides> {\n return {\n ...TEST_CONFIG,\n ...overrides,\n logger: {\n ...TEST_CONFIG.logger,\n ...(overrides as NonNullable<Overrides>).logger,\n },\n future,\n } as any;\n}\n\n/*\n * This type combines both passed in types, by ignoring any keys from Type1 that are present (and not undefined)\n * in Type2, and then adding any keys from Type1 that are not present in Type2.\n *\n * This effectively enables us to create a type that is the const TEST_CONFIG below, plus any overrides passed in with\n * the output being a const object.\n */\ntype Modify<Type1, Type2> = {\n [key in keyof Type2 as Type2[key] extends undefined\n ? never\n : key]: Type2[key];\n} & {\n [key in keyof Type1 as key extends keyof Type2 ? never : key]: Type1[key];\n};\n\n/*\n * We omit the future prop and then redefine it with a partial of that object so we can pass the fully typed object in\n * to AppConfigArg.\n */\ntype TestOverrides = Partial<\n Omit<\n AppConfigArg<ShopifyRestResources, SessionStorage, FutureFlagOptions>,\n 'future'\n > & {\n future: Partial<FutureFlagOptions>;\n }\n>;\n\nexport type TestOverridesArg = undefined | TestOverrides;\n\nexport type TestConfig<Overrides extends TestOverridesArg> = Modify<\n typeof TEST_CONFIG,\n Overrides\n> & {\n future: FutureFlagOptions;\n logger: AppConfigArg['logger'];\n};\n"],"names":["API_KEY","API_SECRET_KEY","APP_URL","LogSeverity","MemorySessionStorage"],"mappings":";;;;;;AAYA,MAAM,WAAW,GAAG;AAClB,IAAA,MAAM,EAAEA,mBAAO;AACf,IAAA,YAAY,EAAEC,0BAAc;IAC5B,MAAM,EAAE,CAAC,WAAW,CAAQ;AAC5B,IAAA,MAAM,EAAEC,mBAAO;AACf,IAAA,mBAAmB,EAAEF,mBAAO;AAC5B,IAAA,+BAA+B,EAAEA,mBAAO;AACxC,IAAA,MAAM,EAAE;QACN,KAAK,EAAEG,sBAAW,CAAC,KAAK;AACzB,KAAA;IACD,cAAc,EAAE,IAAIC,2BAAoB,EAAE;AAC1C,IAAA,SAAS,EAAE,IAAI;CACP;AAEJ,SAAU,UAAU,CAIxB,EAAC,MAAM,EAAE,GAAG,SAAS,EAAA,GAAmC,EAEvD,EAAA;IAED,OAAO;AACL,QAAA,GAAG,WAAW;AACd,QAAA,GAAG,SAAS;AACZ,QAAA,MAAM,EAAE;YACN,GAAG,WAAW,CAAC,MAAM;YACrB,GAAI,SAAoC,CAAC,MAAM;AAChD,SAAA;QACD,MAAM;KACA;AACV;;;;"}