@shopify/shopify-app-remix 3.8.3 → 3.8.5

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":"request.mjs","sources":["../../../../../../../src/server/authenticate/admin/scope/request.ts"],"sourcesContent":[null],"names":[],"mappings":";;;;SASgB,oBAAoB,CAClC,MAAmB,EACnB,OAAgB,EAChB,KAAiC,EAAA;AAEjC,IAAA,OAAO,eAAe,aAAa,CAAC,MAAgB,EAAA;AAClD,QAAA,MAAM,EAAC,MAAM,EAAC,GAAG,MAAM;AAEvB,QAAA,MAAM,CAAC,KAAK,CAAC,8BAA8B,EAAE,EAAC,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,MAAM,EAAC,CAAC;AAE1E,QAAA,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;YAAE;AACzB,QAAA,IAAI,MAAM,cAAc,CAAC,MAAM,EAAE,KAAK,CAAC;YAAE;QAEzC,MAAM,MAAM,qBAAqB,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;AACjE,KAAC;AAED,IAAA,eAAe,cAAc,CAC3B,MAAgB,EAChB,KAAiC,EAAA;AAEjC,QAAA,MAAM,YAAY,GAAG,MAAM,gBAAgB,CAAC,KAAK,CAAC;QAClD,MAAM,aAAa,GAAG,YAAY,CAAC,GAAG,CAAC,YAAY,CAAC,YAAY,CAAC,GAAG,CAClE,CAAC,KAAK,KAAK,KAAK,CAAC,MAAM,CACxB;QACD,OAAO,IAAI,UAAU,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC;;AAEpD;;;;"}
1
+ {"version":3,"file":"request.mjs","sources":["../../../../../../../src/server/authenticate/admin/scope/request.ts"],"sourcesContent":["import {AuthScopes, Session} from '@shopify/shopify-api';\n\nimport {AppConfigArg} from '../../../config-types';\nimport type {BasicParams} from '../../../types';\nimport {redirectToInstallPage} from '../helpers/redirect-to-install-page';\nimport {AdminApiContext} from '../../../clients';\n\nimport {fetchScopeDetail} from './client/fetch-scopes-details';\n\nexport function requestScopesFactory<ConfigArg extends AppConfigArg>(\n params: BasicParams,\n session: Session,\n admin: AdminApiContext<ConfigArg>,\n) {\n return async function requestScopes(scopes: string[]) {\n const {logger} = params;\n\n logger.debug('Requesting optional scopes: ', {shop: session.shop, scopes});\n\n if (scopes.length === 0) return;\n if (await alreadyGranted(scopes, admin)) return;\n\n throw await redirectToInstallPage(params, session.shop, scopes);\n };\n\n async function alreadyGranted(\n scopes: string[],\n admin: AdminApiContext<ConfigArg>,\n ) {\n const scopesDetail = await fetchScopeDetail(admin);\n const grantedScopes = scopesDetail.app.installation.accessScopes.map(\n (scope) => scope.handle,\n );\n return new AuthScopes(grantedScopes).has(scopes);\n }\n}\n"],"names":[],"mappings":";;;;SASgB,oBAAoB,CAClC,MAAmB,EACnB,OAAgB,EAChB,KAAiC,EAAA;AAEjC,IAAA,OAAO,eAAe,aAAa,CAAC,MAAgB,EAAA;AAClD,QAAA,MAAM,EAAC,MAAM,EAAC,GAAG,MAAM;AAEvB,QAAA,MAAM,CAAC,KAAK,CAAC,8BAA8B,EAAE,EAAC,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,MAAM,EAAC,CAAC;AAE1E,QAAA,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;YAAE;AACzB,QAAA,IAAI,MAAM,cAAc,CAAC,MAAM,EAAE,KAAK,CAAC;YAAE;QAEzC,MAAM,MAAM,qBAAqB,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;AACjE,IAAA,CAAC;AAED,IAAA,eAAe,cAAc,CAC3B,MAAgB,EAChB,KAAiC,EAAA;AAEjC,QAAA,MAAM,YAAY,GAAG,MAAM,gBAAgB,CAAC,KAAK,CAAC;QAClD,MAAM,aAAa,GAAG,YAAY,CAAC,GAAG,CAAC,YAAY,CAAC,YAAY,CAAC,GAAG,CAClE,CAAC,KAAK,KAAK,KAAK,CAAC,MAAM,CACxB;QACD,OAAO,IAAI,UAAU,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC;IAClD;AACF;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"revoke.mjs","sources":["../../../../../../../src/server/authenticate/admin/scope/revoke.ts"],"sourcesContent":[null],"names":[],"mappings":";;SAQgB,mBAAmB,CACjC,MAAmB,EACnB,OAAgB,EAChB,KAAiC,EAAA;AAEjC,IAAA,OAAO,eAAe,MAAM,CAAC,MAAgB,EAAA;AAC3C,QAAA,MAAM,EAAC,MAAM,EAAC,GAAG,MAAM;AAEvB,QAAA,MAAM,cAAc,CAAC,MAAM,CAAC;AAE5B,QAAA,MAAM,CAAC,KAAK,CAAC,iBAAiB,EAAE;YAC9B,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,MAAM;AACP,SAAA,CAAC;QAEF,MAAM,kBAAkB,GAAG,MAAM,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC;QAC5D,IAAI,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,CAAC,EAAE;AAC7C,YAAA,MAAM,CAAC,KAAK,CAAC,2BAA2B,EAAE;gBACxC,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,MAAM,EAAE,kBAAkB,CAAC,UAAU;AACtC,aAAA,CAAC;YAEF,MAAM,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,kBAAkB,CAAC,UAAU,CAAC,EAAE;AAChE,gBAAA,MAAM,EAAE,GAAG;AACX,gBAAA,OAAO,EAAE;AACP,oBAAA,cAAc,EAAE,kBAAkB;AACnC,iBAAA;AACF,aAAA,CAAC;;QAGJ,OAAO;AACL,YAAA,OAAO,EAAE,kBAAkB,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,MAAM,CAAC;SACjE;AACH,KAAC;AACH;AAEA,eAAe,cAAc,CAAC,MAAgB,EAAA;IAC5C,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;QAClC,MAAM,IAAI,QAAQ,CAAC,oBAAoB,EAAE,EAAC,MAAM,EAAE,GAAG,EAAC,CAAC;;AAE3D;;;;"}
1
+ {"version":3,"file":"revoke.mjs","sources":["../../../../../../../src/server/authenticate/admin/scope/revoke.ts"],"sourcesContent":["import {Session} from '@shopify/shopify-api';\n\nimport {AppConfigArg} from '../../../config-types';\nimport {AdminApiContext} from '../../../clients';\nimport type {BasicParams} from '../../../types';\n\nimport {revokeScopes} from './client/revoke-scopes';\n\nexport function revokeScopesFactory<ConfigArg extends AppConfigArg>(\n params: BasicParams,\n session: Session,\n admin: AdminApiContext<ConfigArg>,\n) {\n return async function revoke(scopes: string[]) {\n const {logger} = params;\n\n await validateScopes(scopes);\n\n logger.debug('Revoke scopes: ', {\n shop: session.shop,\n scopes,\n });\n\n const revokeScopesResult = await revokeScopes(admin, scopes);\n if (revokeScopesResult.userErrors?.length > 0) {\n logger.error('Failed to revoke scopes: ', {\n shop: session.shop,\n errors: revokeScopesResult.userErrors,\n });\n\n throw new Response(JSON.stringify(revokeScopesResult.userErrors), {\n status: 422,\n headers: {\n 'Content-Type': 'application/json',\n },\n });\n }\n\n return {\n revoked: revokeScopesResult.revoked.map((scope) => scope.handle),\n };\n };\n}\n\nasync function validateScopes(scopes: string[]) {\n if (!scopes || scopes.length === 0) {\n throw new Response('No scopes provided', {status: 400});\n }\n}\n"],"names":[],"mappings":";;SAQgB,mBAAmB,CACjC,MAAmB,EACnB,OAAgB,EAChB,KAAiC,EAAA;AAEjC,IAAA,OAAO,eAAe,MAAM,CAAC,MAAgB,EAAA;AAC3C,QAAA,MAAM,EAAC,MAAM,EAAC,GAAG,MAAM;AAEvB,QAAA,MAAM,cAAc,CAAC,MAAM,CAAC;AAE5B,QAAA,MAAM,CAAC,KAAK,CAAC,iBAAiB,EAAE;YAC9B,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,MAAM;AACP,SAAA,CAAC;QAEF,MAAM,kBAAkB,GAAG,MAAM,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC;QAC5D,IAAI,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,CAAC,EAAE;AAC7C,YAAA,MAAM,CAAC,KAAK,CAAC,2BAA2B,EAAE;gBACxC,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,MAAM,EAAE,kBAAkB,CAAC,UAAU;AACtC,aAAA,CAAC;YAEF,MAAM,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,kBAAkB,CAAC,UAAU,CAAC,EAAE;AAChE,gBAAA,MAAM,EAAE,GAAG;AACX,gBAAA,OAAO,EAAE;AACP,oBAAA,cAAc,EAAE,kBAAkB;AACnC,iBAAA;AACF,aAAA,CAAC;QACJ;QAEA,OAAO;AACL,YAAA,OAAO,EAAE,kBAAkB,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,MAAM,CAAC;SACjE;AACH,IAAA,CAAC;AACH;AAEA,eAAe,cAAc,CAAC,MAAgB,EAAA;IAC5C,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;QAClC,MAAM,IAAI,QAAQ,CAAC,oBAAoB,EAAE,EAAC,MAAM,EAAE,GAAG,EAAC,CAAC;IACzD;AACF;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"auth-code-flow.mjs","sources":["../../../../../../../src/server/authenticate/admin/strategies/auth-code-flow.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"auth-code-flow.mjs","sources":["../../../../../../../src/server/authenticate/admin/strategies/auth-code-flow.ts"],"sourcesContent":["import {\n CookieNotFound,\n GraphqlQueryError,\n HttpResponseError,\n InvalidHmacError,\n InvalidOAuthError,\n Session,\n Shopify,\n ShopifyRestResources,\n} from '@shopify/shopify-api';\n\nimport type {BasicParams} from '../../../types';\nimport {\n beginAuth,\n handleClientErrorFactory,\n redirectToAuthPage,\n redirectToShopifyOrAppRoot,\n redirectWithExitIframe,\n triggerAfterAuthHook,\n validateShopAndHostParams,\n} from '../helpers';\nimport {AppConfig, AppConfigArg} from '../../../config-types';\nimport {getSessionTokenHeader} from '../../helpers';\nimport {HandleAdminClientError} from '../../../clients';\nimport type {\n ApiConfigWithFutureFlags,\n ApiFutureFlags,\n} from '../../../future/flags';\n\nimport {AuthorizationStrategy, SessionContext, OnErrorOptions} from './types';\n\nexport class AuthCodeFlowStrategy<\n Config extends AppConfigArg,\n Resources extends ShopifyRestResources = ShopifyRestResources,\n> implements AuthorizationStrategy\n{\n protected api: Shopify<\n ApiConfigWithFutureFlags<Config['future']>,\n ShopifyRestResources,\n ApiFutureFlags<Config['future']>\n >;\n\n protected config: AppConfig;\n protected logger: Shopify['logger'];\n\n public constructor({api, config, logger}: BasicParams) {\n this.api = api;\n this.config = config;\n this.logger = logger;\n }\n\n public async respondToOAuthRequests(request: Request): Promise<void | never> {\n const {api, config} = this;\n\n const url = new URL(request.url);\n const isAuthRequest = url.pathname === config.auth.path;\n const isAuthCallbackRequest = url.pathname === config.auth.callbackPath;\n\n if (isAuthRequest || isAuthCallbackRequest) {\n const shop = api.utils.sanitizeShop(url.searchParams.get('shop')!);\n if (!shop) throw new Response('Shop param is invalid', {status: 400});\n\n if (isAuthRequest) {\n throw await this.handleAuthBeginRequest(request, shop);\n } else {\n throw await this.handleAuthCallbackRequest(request, shop);\n }\n }\n\n if (!getSessionTokenHeader(request)) {\n // This is a document request that doesn't contain a session token. We check if the app is installed.\n // If the app isn't installed, we initiate the OAuth auth code flow.\n // Requests with a header can only happen after the app is installed.\n await this.ensureInstalledOnShop(request);\n }\n }\n\n public async authenticate(\n request: Request,\n sessionContext: SessionContext,\n ): Promise<Session | never> {\n const {api, config, logger} = this;\n\n const {shop, session} = sessionContext;\n\n if (!session) {\n logger.debug('No session found, redirecting to OAuth', {shop});\n await redirectToAuthPage({config, logger, api}, request, shop);\n } else if (!session.isActive(config.scopes)) {\n logger.debug(\n 'Found a session, but it has expired, redirecting to OAuth',\n {shop},\n );\n await redirectToAuthPage({config, logger, api}, request, shop);\n }\n\n logger.debug('Found a valid session', {shop});\n\n return session!;\n }\n\n public handleClientError(request: Request): HandleAdminClientError {\n const {api, config, logger} = this;\n return handleClientErrorFactory({\n request,\n onError: async ({session, error}: OnErrorOptions) => {\n if (error.response.code === 401) {\n throw await redirectToAuthPage(\n {api, config, logger},\n request,\n session.shop,\n );\n }\n },\n });\n }\n\n private async ensureInstalledOnShop(request: Request) {\n const {api, config, logger} = this;\n\n validateShopAndHostParams({api, config, logger}, request);\n\n const url = new URL(request.url);\n let shop = url.searchParams.get('shop');\n\n // Ensure app is installed\n logger.debug('Ensuring app is installed on shop', {shop});\n\n if (!(await this.hasValidOfflineId(request))) {\n logger.info(\"Could not find a shop, can't authenticate request\");\n throw new Response(undefined, {\n status: 400,\n statusText: 'Bad Request',\n });\n }\n\n const offlineSession = await this.getOfflineSession(request);\n const isEmbedded = url.searchParams.get('embedded') === '1';\n\n if (!offlineSession) {\n logger.info(\"Shop hasn't installed app yet, redirecting to OAuth\", {\n shop,\n });\n if (isEmbedded) {\n redirectWithExitIframe({api, config, logger}, request, shop!);\n } else {\n throw await beginAuth({api, config, logger}, request, false, shop!);\n }\n }\n\n shop = shop || offlineSession.shop;\n\n if (config.isEmbeddedApp && !isEmbedded) {\n try {\n logger.debug('Ensuring offline session is valid before embedding', {\n shop,\n });\n await this.testSession(offlineSession);\n\n logger.debug('Offline session is still valid, embedding app', {shop});\n } catch (error) {\n await this.handleInvalidOfflineSession(error, request, shop);\n }\n }\n }\n\n private async handleAuthBeginRequest(\n request: Request,\n shop: string,\n ): Promise<never> {\n const {api, config, logger} = this;\n\n logger.info('Handling OAuth begin request', {shop});\n\n // If we're loading from an iframe, we need to break out of it\n if (\n config.isEmbeddedApp &&\n request.headers.get('Sec-Fetch-Dest') === 'iframe'\n ) {\n logger.debug('Auth request in iframe detected, exiting iframe', {shop});\n throw redirectWithExitIframe({api, config, logger}, request, shop);\n } else {\n throw await beginAuth({api, config, logger}, request, false, shop);\n }\n }\n\n private async handleAuthCallbackRequest(\n request: Request,\n shop: string,\n ): Promise<never> {\n const {api, config, logger} = this;\n\n logger.info('Handling OAuth callback request', {shop});\n\n try {\n const {session, headers: responseHeaders} = await api.auth.callback({\n rawRequest: request,\n });\n\n await config.sessionStorage!.storeSession(session);\n\n if (config.useOnlineTokens && !session.isOnline) {\n logger.info('Requesting online access token for offline session', {\n shop,\n });\n await beginAuth({api, config, logger}, request, true, shop);\n }\n\n logger.debug('Request is valid, loaded session from OAuth callback', {\n shop: session.shop,\n isOnline: session.isOnline,\n });\n\n await triggerAfterAuthHook<Config, Resources>(\n {api, config, logger},\n session,\n request,\n this,\n );\n\n throw await redirectToShopifyOrAppRoot(\n request,\n {api, config, logger},\n responseHeaders,\n );\n } catch (error) {\n if (error instanceof Response) throw error;\n\n throw await this.oauthCallbackError(error, request, shop);\n }\n }\n\n private async getOfflineSession(\n request: Request,\n ): Promise<Session | undefined> {\n const offlineId = await this.getOfflineSessionId(request);\n return this.config.sessionStorage!.loadSession(offlineId!);\n }\n\n private async hasValidOfflineId(request: Request) {\n return Boolean(await this.getOfflineSessionId(request));\n }\n\n private async getOfflineSessionId(\n request: Request,\n ): Promise<string | undefined> {\n const {api} = this;\n const url = new URL(request.url);\n const shop = url.searchParams.get('shop');\n\n return shop\n ? api.session.getOfflineId(shop)\n : api.session.getCurrentId({isOnline: false, rawRequest: request});\n }\n\n private async testSession(session: Session): Promise<void> {\n const {api} = this;\n\n const client = new api.clients.Graphql({\n session,\n });\n\n await client.request(`#graphql\n query shopifyAppShopName {\n shop {\n name\n }\n }\n `);\n }\n\n private async oauthCallbackError(\n error: Error,\n request: Request,\n shop: string,\n ) {\n const {logger} = this;\n logger.error('Error during OAuth callback', {shop, error: error.message});\n\n if (error instanceof CookieNotFound) {\n return this.handleAuthBeginRequest(request, shop);\n }\n\n if (\n error instanceof InvalidHmacError ||\n error instanceof InvalidOAuthError\n ) {\n return new Response(undefined, {\n status: 400,\n statusText: 'Invalid OAuth Request',\n });\n }\n\n return new Response(undefined, {\n status: 500,\n statusText: 'Internal Server Error',\n });\n }\n\n private async handleInvalidOfflineSession(\n error: Error,\n request: Request,\n shop: string,\n ) {\n const {api, logger, config} = this;\n if (error instanceof HttpResponseError) {\n if (error.response.code === 401) {\n logger.info('Shop session is no longer valid, redirecting to OAuth', {\n shop,\n });\n throw await beginAuth({api, config, logger}, request, false, shop);\n } else {\n const message = JSON.stringify(error.response.body, null, 2);\n logger.error(`Unexpected error during session validation: ${message}`, {\n shop,\n });\n\n throw new Response(undefined, {\n status: error.response.code,\n statusText: error.response.statusText,\n });\n }\n } else if (error instanceof GraphqlQueryError) {\n const context: Record<string, string> = {shop};\n if (error.response) {\n context.response = JSON.stringify(error.body);\n }\n\n logger.error(\n `Unexpected error during session validation: ${error.message}`,\n context,\n );\n\n throw new Response(undefined, {\n status: 500,\n statusText: 'Internal Server Error',\n });\n }\n }\n}\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"merchant-custom-app.mjs","sources":["../../../../../../../src/server/authenticate/admin/strategies/merchant-custom-app.ts"],"sourcesContent":[null],"names":[],"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,EAAE,kBAAkB,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,OAAO,wBAAwB,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,IAAI,YAAY,CACpB,8CAA8C,CAC/C;;aAEJ;AACF,SAAA,CAAC;;AAEL;;;;"}
1
+ {"version":3,"file":"merchant-custom-app.mjs","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":[],"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,EAAE,kBAAkB,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,OAAO,wBAAwB,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,IAAI,YAAY,CACpB,8CAA8C,CAC/C;gBACH;YACF,CAAC;AACF,SAAA,CAAC;IACJ;AACD;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"token-exchange.mjs","sources":["../../../../../../../src/server/authenticate/admin/strategies/token-exchange.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"token-exchange.mjs","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":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"const.mjs","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.mjs","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.mjs","sources":["../../../../../../src/server/authenticate/flow/authenticate.ts"],"sourcesContent":[null],"names":[],"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,EAAE,kBAAkB,CAAuB,EAAC,MAAM,EAAE,OAAO,EAAC,CAAC;SACnE;AACH,KAAC;AACH;;;;"}
1
+ {"version":3,"file":"authenticate.mjs","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":[],"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,EAAE,kBAAkB,CAAuB,EAAC,MAAM,EAAE,OAAO,EAAC,CAAC;SACnE;AACH,IAAA,CAAC;AACH;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"authenticate.mjs","sources":["../../../../../../src/server/authenticate/fulfillment-service/authenticate.ts"],"sourcesContent":[null],"names":[],"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,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,EAAE;AAE5D,QAAA,MAAM,CAAC,KAAK,CACV,sEAAsE,EACtE;YACE,IAAI;AACL,SAAA,CACF;QAED,MAAM,OAAO,GAAG,MAAM,0BAA0B,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,EAAE,kBAAkB,CAAuB,EAAC,MAAM,EAAE,OAAO,EAAC,CAAC;SACnE;AACH,KAAC;AACH;;;;"}
1
+ {"version":3,"file":"authenticate.mjs","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":[],"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,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,EAAE;AAE5D,QAAA,MAAM,CAAC,KAAK,CACV,sEAAsE,EACtE;YACE,IAAI;AACL,SAAA,CACF;QAED,MAAM,OAAO,GAAG,MAAM,0BAA0B,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,EAAE,kBAAkB,CAAuB,EAAC,MAAM,EAAE,OAAO,EAAC,CAAC;SACnE;AACH,IAAA,CAAC;AACH;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"add-response-headers.mjs","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.mjs","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.mjs","sources":["../../../../../../src/server/authenticate/helpers/app-bridge-url.ts"],"sourcesContent":[null],"names":[],"mappings":";;AAEA,IAAI,oBAAwC;AACtC,SAAU,uBAAuB,CAAC,GAAW,EAAA;IACjD,oBAAoB,GAAG,GAAG;AAC5B;SAEgB,YAAY,GAAA;IAC1B,OAAO,oBAAoB,IAAI,cAAc;AAC/C;;;;"}
1
+ {"version":3,"file":"app-bridge-url.mjs","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":[],"mappings":";;AAEA,IAAI,oBAAwC;AACtC,SAAU,uBAAuB,CAAC,GAAW,EAAA;IACjD,oBAAoB,GAAG,GAAG;AAC5B;SAEgB,YAAY,GAAA;IAC1B,OAAO,oBAAoB,IAAI,cAAc;AAC/C;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"create-or-load-offline-session.mjs","sources":["../../../../../../src/server/authenticate/helpers/create-or-load-offline-session.ts"],"sourcesContent":[null],"names":[],"mappings":";;AAEO,eAAe,0BAA0B,CAC9C,IAAY,EACZ,EAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAc,EAAA;IAElC,IAAI,MAAM,CAAC,YAAY,KAAK,eAAe,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.mjs","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":[],"mappings":";;AAEO,eAAe,0BAA0B,CAC9C,IAAY,EACZ,EAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAc,EAAA;IAElC,IAAI,MAAM,CAAC,YAAY,KAAK,eAAe,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.mjs","sources":["../../../../../../src/server/authenticate/helpers/ensure-cors-headers.ts"],"sourcesContent":[null],"names":[],"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,EAAE,iBAAiB,CAAC;;AAG1E,QAAA,OAAO,QAAQ;AACjB,KAAC;AACH;;;;"}
1
+ {"version":3,"file":"ensure-cors-headers.mjs","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":[],"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,EAAE,iBAAiB,CAAC;QAC1E;AAEA,QAAA,OAAO,QAAQ;AACjB,IAAA,CAAC;AACH;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"get-session-token-header.mjs","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.mjs","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.mjs","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.mjs","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.mjs","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.mjs","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.mjs","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.mjs","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.mjs","sources":["../../../../../../src/server/authenticate/helpers/reject-bot-request.ts"],"sourcesContent":[null],"names":[],"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,IAAI,KAAK,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.mjs","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":[],"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,IAAI,KAAK,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.mjs","sources":["../../../../../../src/server/authenticate/helpers/respond-to-invalid-session-token.ts"],"sourcesContent":[null],"names":[],"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,OAAO,oBAAoB,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,GAAG,4BAA4B,GAAG,EAAE;AAC1D,KAAA,CAAC;AACJ;;;;"}
1
+ {"version":3,"file":"respond-to-invalid-session-token.mjs","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":[],"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,OAAO,oBAAoB,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,GAAG,4BAA4B,GAAG,EAAE;AAC1D,KAAA,CAAC;AACJ;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"respond-to-options-request.mjs","sources":["../../../../../../src/server/authenticate/helpers/respond-to-options-request.ts"],"sourcesContent":[null],"names":[],"mappings":";;SAIgB,uBAAuB,CACrC,MAAmB,EACnB,OAAgB,EAChB,WAAsB,EAAA;AAEtB,IAAA,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,EAAE;QAChC,MAAM,iBAAiB,GAAG,wBAAwB,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.mjs","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":[],"mappings":";;SAIgB,uBAAuB,CACrC,MAAmB,EACnB,OAAgB,EAChB,WAAsB,EAAA;AAEtB,IAAA,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,EAAE;QAChC,MAAM,iBAAiB,GAAG,wBAAwB,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.mjs","sources":["../../../../../../src/server/authenticate/helpers/validate-session-token.ts"],"sourcesContent":[null],"names":[],"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,GAAG,kBAAkB,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,MAAM,4BAA4B,CAAC,EAAC,MAAM,EAAE,OAAO,EAAE,YAAY,EAAC,CAAC;;AAEvE;;;;"}
1
+ {"version":3,"file":"validate-session-token.mjs","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":[],"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,GAAG,kBAAkB,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,MAAM,4BAA4B,CAAC,EAAC,MAAM,EAAE,OAAO,EAAE,YAAY,EAAC,CAAC;IACrE;AACF;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"login.mjs","sources":["../../../../../../src/server/authenticate/login/login.ts"],"sourcesContent":[null],"names":[],"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,EAAE,cAAc,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,EAAE,cAAc,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,MAAM,QAAQ,CAAC,WAAW,CAAC;AAC7B,KAAC;AACH;;;;"}
1
+ {"version":3,"file":"login.mjs","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":[],"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,EAAE,cAAc,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,EAAE,cAAc,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,MAAM,QAAQ,CAAC,WAAW,CAAC;AAC7B,IAAA,CAAC;AACH;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"authenticate.mjs","sources":["../../../../../../../src/server/authenticate/public/appProxy/authenticate.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"authenticate.mjs","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":[],"mappings":";;;AAaM,SAAU,2BAA2B,CAGzC,MAAmB,EAAA;IACnB,MAAM,EAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAC,GAAG,MAAM;AAEpC,IAAA,OAAO,eAAe,YAAY,CAChC,OAAO,EAAA;QAIP,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC;QAChC,MAAM,IAAI,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAE;QAC1C,MAAM,CAAC,IAAI,CAAC,kCAAkC,EAAE,EAAC,IAAI,EAAC,CAAC;QAEvD,IAAI,EAAE,MAAM,oBAAoB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,EAAE;YAC9C,MAAM,CAAC,IAAI,CAAC,yCAAyC,EAAE,EAAC,IAAI,EAAC,CAAC;AAC9D,YAAA,MAAM,IAAI,QAAQ,CAAC,SAAS,EAAE;AAC5B,gBAAA,MAAM,EAAE,GAAG;AACX,gBAAA,UAAU,EAAE,aAAa;AAC1B,aAAA,CAAC;QACJ;QAEA,MAAM,SAAS,GAAG,GAAG,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC;QAChD,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,cAAe,CAAC,WAAW,CAAC,SAAS,CAAC;QAEnE,IAAI,CAAC,OAAO,EAAE;AACZ,YAAA,MAAM,CAAC,KAAK,CAAC,yDAAyD,EAAE;gBACtE,IAAI;gBACJ,GAAG,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC;AAClD,aAAA,CAAC;AAEF,YAAA,MAAM,OAAO,GAAoB;gBAC/B,MAAM;AACN,gBAAA,OAAO,EAAE,SAAS;AAClB,gBAAA,KAAK,EAAE,SAAS;AAChB,gBAAA,UAAU,EAAE,SAAS;aACtB;AAED,YAAA,OAAO,OAAO;QAChB;AAEA,QAAA,MAAM,OAAO,GAAqD;YAChE,MAAM;YACN,OAAO;YACP,KAAK,EAAE,kBAAkB,CAAuB,EAAC,MAAM,EAAE,OAAO,EAAC,CAAC;YAClE,UAAU,EAAE,uBAAuB,CAAC,EAAC,MAAM,EAAE,OAAO,EAAC,CAAC;SACvD;AAED,QAAA,OAAO,OAAO;AAChB,IAAA,CAAC;AACH;AAEA,MAAM,MAAM,GAA2B,CAAC,IAAI,EAAE,cAAc,KAAI;AAC9D,IAAA,MAAM,aAAa,GAAG,iBAAiB,CAAC,IAAI,CAAC;AAE7C,IAAA,IAAI,OAAO,cAAc,KAAK,QAAQ,EAAE;AACtC,QAAA,OAAO,IAAI,QAAQ,CAAC,aAAa,EAAE;YACjC,MAAM,EAAE,cAAc,IAAI,GAAG;AAC7B,YAAA,OAAO,EAAE;AACP,gBAAA,cAAc,EAAE,oBAAoB;AACrC,aAAA;AACF,SAAA,CAAC;IACJ;IAEA,MAAM,EAAC,MAAM,EAAE,GAAG,YAAY,EAAC,GAAG,cAAc,IAAI,EAAE;AACtD,IAAA,MAAM,YAAY,GAChB,MAAM,KAAK,KAAK,GAAG,CAAA,kBAAA,EAAqB,aAAa,CAAA,CAAE,GAAG,aAAa;IAEzE,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC;AACjD,IAAA,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,oBAAoB,CAAC;AAEjD,IAAA,OAAO,IAAI,QAAQ,CAAC,YAAY,EAAE;AAChC,QAAA,GAAG,YAAY;QACf,OAAO;AACR,KAAA,CAAC;AACJ,CAAC;AAED,eAAe,oBAAoB,CACjC,MAAmB,EACnB,GAAQ,EAAA;AAER,IAAA,MAAM,EAAC,GAAG,EAAE,MAAM,EAAC,GAAG,MAAM;AAE5B,IAAA,IAAI;QACF,IAAI,YAAY,GAAG,IAAI,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC;QAClD,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE;AAC9B,YAAA,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC;QAC9B;QAEA,IAAI,OAAO,GAAG,MAAM,GAAG,CAAC,KAAK,CAAC,YAAY,CACxC,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC,EAC1C,EAAC,QAAQ,EAAE,UAAU,EAAC,CACvB;QAED,IAAI,CAAC,OAAO,EAAE;AACZ,YAAA,MAAM,SAAS,GAAG,GAAG,CAAC;AACnB,iBAAA,OAAO,CAAC,KAAK,EAAE,EAAE;AACjB,iBAAA,OAAO,CAAC,KAAK,EAAE,EAAE;AACjB,iBAAA,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC;AACvB,YAAA,MAAM,IAAI,GAAG,CAAA,SAAA,EAAY,SAAS,EAAE;YAEpC,YAAY,GAAG,IAAI,eAAe,CAChC,UAAU,IAAI,CAAA,CAAA,EAAI,YAAY,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA,CAAE,CAC/D;YAED,OAAO,GAAG,MAAM,GAAG,CAAC,KAAK,CAAC,YAAY,CACpC,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC,EAC1C,EAAC,QAAQ,EAAE,UAAU,EAAC,CACvB;YAED,IAAI,CAAC,OAAO,EAAE;gBACZ,MAAM,YAAY,GAAG,IAAI,eAAe,CACtC,CAAA,OAAA,EAAU,IAAI,WAAW,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA,CAAE,CACzD;gBAED,OAAO,GAAG,MAAM,GAAG,CAAC,KAAK,CAAC,YAAY,CACpC,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC,EAC1C,EAAC,QAAQ,EAAE,UAAU,EAAC,CACvB;YACH;QACF;AAEA,QAAA,OAAO,OAAO;IAChB;IAAE,OAAO,KAAK,EAAE;QACd,MAAM,IAAI,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAE;QAC1C,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,EAAC,IAAI,EAAC,CAAC;AAClC,QAAA,MAAM,IAAI,QAAQ,CAAC,SAAS,EAAE,EAAC,MAAM,EAAE,GAAG,EAAE,UAAU,EAAE,aAAa,EAAC,CAAC;IACzE;AACF;AAEA,SAAS,iBAAiB,CAAC,IAAY,EAAA;AACrC,IAAA,QACE;;AAEG,SAAA,UAAU,CACT,6CAA6C,EAC7C,oBAAoB;;AAGrB,SAAA,UAAU,CAAC,wCAAwC,EAAE,kBAAkB,CAAC;AAE/E;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"authenticate.mjs","sources":["../../../../../../../src/server/authenticate/public/checkout/authenticate.ts"],"sourcesContent":[null],"names":[],"mappings":";;AAKM,SAAU,2BAA2B,CACzC,MAAmB,EAAA;AAEnB,IAAA,OAAO,4BAA4B,CACjC,MAAM,EACN,UAAU,CACa;AAC3B;;;;"}
1
+ {"version":3,"file":"authenticate.mjs","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":[],"mappings":";;AAKM,SAAU,2BAA2B,CACzC,MAAmB,EAAA;AAEnB,IAAA,OAAO,4BAA4B,CACjC,MAAM,EACN,UAAU,CACa;AAC3B;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"authenticate.mjs","sources":["../../../../../../../src/server/authenticate/public/customer-account/authenticate.ts"],"sourcesContent":[null],"names":[],"mappings":";;AAKM,SAAU,kCAAkC,CAChD,MAAmB,EAAA;AAEnB,IAAA,OAAO,4BAA4B,CACjC,MAAM,EACN,kBAAkB,CACY;AAClC;;;;"}
1
+ {"version":3,"file":"authenticate.mjs","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":[],"mappings":";;AAKM,SAAU,kCAAkC,CAChD,MAAmB,EAAA;AAEnB,IAAA,OAAO,4BAA4B,CACjC,MAAM,EACN,kBAAkB,CACY;AAClC;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"authenticate.mjs","sources":["../../../../../../../src/server/authenticate/public/extension/authenticate.ts"],"sourcesContent":[null],"names":[],"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,QAAA,mBAAmB,CAAC,MAAM,EAAE,OAAO,CAAC;AACpC,QAAA,uBAAuB,CAAC,MAAM,EAAE,OAAO,EAAE,WAAW,CAAC;AAErD,QAAA,MAAM,kBAAkB,GAAG,qBAAqB,CAAC,OAAO,CAAC;AAEzD,QAAA,MAAM,CAAC,IAAI,CAAC,CAAkB,eAAA,EAAA,WAAW,UAAU,EAAE;AACnD,YAAA,IAAI,EAAE,kBAAkB,CAAC,OAAO,CAAC;AAClC,SAAA,CAAC;QAEF,IAAI,CAAC,kBAAkB,EAAE;AACvB,YAAA,MAAM,CAAC,KAAK,CAAC,yCAAyC,EAAE;AACtD,gBAAA,IAAI,EAAE,kBAAkB,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,MAAM,oBAAoB,CACtC,MAAM,EACN,OAAO,EACP,kBAAkB,EAClB,EAAC,aAAa,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAC,CAC5C;YACD,IAAI,EAAE,wBAAwB,CAAC,MAAM,EAAE,OAAO,EAAE,WAAW,CAAC;SAC7D;AACH,KAAC;AACH;;;;"}
1
+ {"version":3,"file":"authenticate.mjs","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":[],"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,QAAA,mBAAmB,CAAC,MAAM,EAAE,OAAO,CAAC;AACpC,QAAA,uBAAuB,CAAC,MAAM,EAAE,OAAO,EAAE,WAAW,CAAC;AAErD,QAAA,MAAM,kBAAkB,GAAG,qBAAqB,CAAC,OAAO,CAAC;AAEzD,QAAA,MAAM,CAAC,IAAI,CAAC,CAAA,eAAA,EAAkB,WAAW,UAAU,EAAE;AACnD,YAAA,IAAI,EAAE,kBAAkB,CAAC,OAAO,CAAC;AAClC,SAAA,CAAC;QAEF,IAAI,CAAC,kBAAkB,EAAE;AACvB,YAAA,MAAM,CAAC,KAAK,CAAC,yCAAyC,EAAE;AACtD,gBAAA,IAAI,EAAE,kBAAkB,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,MAAM,oBAAoB,CACtC,MAAM,EACN,OAAO,EACP,kBAAkB,EAClB,EAAC,aAAa,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAC,CAC5C;YACD,IAAI,EAAE,wBAAwB,CAAC,MAAM,EAAE,OAAO,EAAE,WAAW,CAAC;SAC7D;AACH,IAAA,CAAC;AACH;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"factory.mjs","sources":["../../../../../../src/server/authenticate/public/factory.ts"],"sourcesContent":[null],"names":[],"mappings":";;;;;AAWM,SAAU,yBAAyB,CAGvC,MAAmB,EAAA;AACnB,IAAA,MAAM,oBAAoB,GAAG,2BAA2B,CAAC,MAAM,CAAC;AAChE,IAAA,MAAM,oBAAoB,GAAG,2BAA2B,CAGtD,MAAM,CAAC;AACT,IAAA,MAAM,2BAA2B,GAC/B,kCAAkC,CAAC,MAAM,CAAC;AAC5C,IAAA,MAAM,eAAe,GAAG,sBAAsB,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.mjs","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":[],"mappings":";;;;;AAWM,SAAU,yBAAyB,CAGvC,MAAmB,EAAA;AACnB,IAAA,MAAM,oBAAoB,GAAG,2BAA2B,CAAC,MAAM,CAAC;AAChE,IAAA,MAAM,oBAAoB,GAAG,2BAA2B,CAGtD,MAAM,CAAC;AACT,IAAA,MAAM,2BAA2B,GAC/B,kCAAkC,CAAC,MAAM,CAAC;AAC5C,IAAA,MAAM,eAAe,GAAG,sBAAsB,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.mjs","sources":["../../../../../../../src/server/authenticate/public/pos/authenticate.ts"],"sourcesContent":[null],"names":[],"mappings":";;AAKM,SAAU,sBAAsB,CAAC,MAAmB,EAAA;AACxD,IAAA,OAAO,4BAA4B,CAAC,MAAM,EAAE,KAAK,CAAoB;AACvE;;;;"}
1
+ {"version":3,"file":"authenticate.mjs","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":[],"mappings":";;AAKM,SAAU,sBAAsB,CAAC,MAAmB,EAAA;AACxD,IAAA,OAAO,4BAA4B,CAAC,MAAM,EAAE,KAAK,CAAoB;AACvE;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"authenticate.mjs","sources":["../../../../../../src/server/authenticate/webhooks/authenticate.ts"],"sourcesContent":[null],"names":[],"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,KAAK,4BAA4B,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,MAAM,0BAA0B,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,GAAG,kBAAkB,CAAuB;YACrD,MAAM;YACN,OAAO;AACP,YAAA,iBAAiB,EAAE,wBAAwB,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.mjs","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":[],"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,KAAK,4BAA4B,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,MAAM,0BAA0B,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,GAAG,kBAAkB,CAAuB;YACrD,MAAM;YACN,OAAO;AACP,YAAA,iBAAiB,EAAE,wBAAwB,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.mjs","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.mjs","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.mjs","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,GAAA,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.mjs","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,GAAA,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.mjs","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.mjs","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.mjs","sources":["../../../../../src/server/boundary/index.ts"],"sourcesContent":[null],"names":[],"mappings":";;;AAGA;;AAEG;AACU,MAAA,QAAQ,GAAG;AACtB;;;;;;;;;;;;;AAaG;AACH,IAAA,KAAK,EAAE,aAAa;AAEpB;;;;;;;;;;;;;AAaG;AACH,IAAA,OAAO,EAAE,eAAe;;;;;"}
1
+ {"version":3,"file":"index.mjs","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":[],"mappings":";;;AAGA;;AAEG;AACI,MAAM,QAAQ,GAAG;AACtB;;;;;;;;;;;;;AAaG;AACH,IAAA,KAAK,EAAE,aAAa;AAEpB;;;;;;;;;;;;;AAaG;AACH,IAAA,OAAO,EAAE,eAAe;;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"factory.mjs","sources":["../../../../../../src/server/clients/admin/factory.ts"],"sourcesContent":[null],"names":[],"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,EAAE,oBAAoB,CAAC,EAAC,MAAM,EAAE,OAAO,EAAE,iBAAiB,EAAC,CAAC;SAC3B;;IAG5C,OAAO;QACL,IAAI,EAAE,iBAAiB,CAAY;YACjC,MAAM;YACN,OAAO;YACP,iBAAiB;SAClB,CAAC;QACF,OAAO,EAAE,oBAAoB,CAAC,EAAC,MAAM,EAAE,OAAO,EAAE,iBAAiB,EAAC,CAAC;KAC3B;AAC5C;;;;"}
1
+ {"version":3,"file":"factory.mjs","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":[],"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,EAAE,oBAAoB,CAAC,EAAC,MAAM,EAAE,OAAO,EAAE,iBAAiB,EAAC,CAAC;SAC3B;IAC5C;IAEA,OAAO;QACL,IAAI,EAAE,iBAAiB,CAAY;YACjC,MAAM;YACN,OAAO;YACP,iBAAiB;SAClB,CAAC;QACF,OAAO,EAAE,oBAAoB,CAAC,EAAC,MAAM,EAAE,OAAO,EAAE,iBAAiB,EAAC,CAAC;KAC3B;AAC5C;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"graphql.mjs","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.mjs","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.mjs","sources":["../../../../../../src/server/clients/admin/rest.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"rest.mjs","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.mjs","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.mjs","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.mjs","sources":["../../../../src/server/errors.ts"],"sourcesContent":[null],"names":[],"mappings":";;AAEM,MAAO,oBAAqB,SAAQ,YAAY,CAAA;AAAG;;;;"}
1
+ {"version":3,"file":"errors.mjs","sources":["../../../../src/server/errors.ts"],"sourcesContent":["import {ShopifyError} from '@shopify/shopify-api';\n\nexport class SessionNotFoundError extends ShopifyError {}\n"],"names":[],"mappings":";;AAEM,MAAO,oBAAqB,SAAQ,YAAY,CAAA;AAAG;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"flags.mjs","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.mjs","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.mjs","sources":["../../../../src/server/index.ts"],"sourcesContent":[null],"names":[],"mappings":";;;;;;;;AAGA,wBAAwB,CAAC,MAAK;AAC5B,IAAA,OAAO,OAAO;AAChB,CAAC,CAAC"}
1
+ {"version":3,"file":"index.mjs","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":[],"mappings":";;;;;;;;AAGA,wBAAwB,CAAC,MAAK;AAC5B,IAAA,OAAO,OAAO;AAChB,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"override-logger.mjs","sources":["../../../../src/server/override-logger.ts"],"sourcesContent":[null],"names":[],"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,UAAU,OAAe,EAAE,OAAe,EAAA;YAC/C,IAAI,MAAM,CAAC,GAAG,CAAC,6BAA6B,EAAE,OAAO,CAAC,EAAE;AACtD,gBAAA,MAAM,IAAI,sBAAsB,CAC9B,qCAAqC,OAAO,CAAA,CAAE,CAC/C;;YAGH,OAAO,eAAe,CAAC,CAAiB,cAAA,EAAA,OAAO,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.mjs","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":[],"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,UAAU,OAAe,EAAE,OAAe,EAAA;YAC/C,IAAI,MAAM,CAAC,GAAG,CAAC,6BAA6B,EAAE,OAAO,CAAC,EAAE;AACtD,gBAAA,MAAM,IAAI,sBAAsB,CAC9B,qCAAqC,OAAO,CAAA,CAAE,CAC/C;YACH;YAEA,OAAO,eAAe,CAAC,CAAA,cAAA,EAAiB,OAAO,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;;;;"}