@shopify/shopify-app-remix 1.0.4 → 1.1.0
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.
- package/README.md +19 -23
- package/build/cjs/react/components/AppProvider/AppProvider.js +67 -0
- package/build/cjs/react/components/RemixPolarisLink.js +22 -0
- package/build/cjs/react/const.js +7 -0
- package/build/cjs/react/index.js +9 -0
- package/build/cjs/{adapters → server/adapters}/node/index.js +1 -3
- package/build/cjs/{auth → server/authenticate}/admin/authenticate.js +35 -86
- package/build/cjs/{billing → server/authenticate/admin/billing}/cancel.js +1 -2
- package/build/cjs/{billing → server/authenticate/admin/billing}/request.js +2 -3
- package/build/cjs/{billing → server/authenticate/admin/billing}/require.js +1 -2
- package/build/cjs/server/authenticate/admin/helpers/handle-client-error.js +39 -0
- package/build/cjs/{auth → server/authenticate/admin}/helpers/redirect-to-auth-page.js +6 -1
- package/build/cjs/{auth → server/authenticate/admin}/helpers/redirect-with-app-bridge-headers.js +2 -6
- package/build/cjs/server/authenticate/admin/helpers/redirect.js +67 -0
- package/build/cjs/server/authenticate/admin/helpers/render-app-bridge.js +30 -0
- package/build/cjs/{auth → server/authenticate}/helpers/ensure-cors-headers.js +3 -2
- package/build/cjs/{auth → server/authenticate}/helpers/respond-to-options-request.js +2 -2
- package/build/cjs/{auth → server/authenticate}/helpers/validate-session-token.js +6 -2
- package/build/cjs/{auth → server/authenticate}/public/authenticate.js +8 -6
- package/build/cjs/{boundary → server/boundary}/error.js +7 -1
- package/build/cjs/server/boundary/index.js +44 -0
- package/build/cjs/server/clients/admin/factory.js +27 -0
- package/build/cjs/{auth/admin/graphql-client.js → server/clients/admin/graphql.js} +10 -18
- package/build/cjs/{auth/admin/rest-client.js → server/clients/admin/rest.js} +54 -33
- package/build/cjs/server/index.js +39 -0
- package/build/cjs/{index.js → server/shopify-app.js} +10 -73
- package/build/cjs/server/unauthenticated/admin/factory.js +25 -0
- package/build/cjs/{version.js → server/version.js} +1 -1
- package/build/ts/react/components/AppProvider/AppProvider.d.ts +50 -0
- package/build/ts/react/components/AppProvider/AppProvider.d.ts.map +1 -0
- package/build/ts/react/components/AppProvider/AppProvider.js +44 -0
- package/build/ts/react/components/AppProvider/AppProvider.js.map +1 -0
- package/build/ts/react/components/AppProvider/index.d.ts +2 -0
- package/build/ts/react/components/AppProvider/index.d.ts.map +1 -0
- package/build/ts/react/components/AppProvider/index.js +5 -0
- package/build/ts/react/components/AppProvider/index.js.map +1 -0
- package/build/ts/react/components/RemixPolarisLink.d.ts +3 -0
- package/build/ts/react/components/RemixPolarisLink.d.ts.map +1 -0
- package/build/ts/react/components/RemixPolarisLink.js +12 -0
- package/build/ts/react/components/RemixPolarisLink.js.map +1 -0
- package/build/ts/react/components/index.d.ts +2 -0
- package/build/ts/react/components/index.d.ts.map +1 -0
- package/build/ts/react/components/index.js +5 -0
- package/build/ts/react/components/index.js.map +1 -0
- package/build/ts/react/const.d.ts +2 -0
- package/build/ts/react/const.d.ts.map +1 -0
- package/build/ts/react/const.js +5 -0
- package/build/ts/react/const.js.map +1 -0
- package/build/ts/react/index.d.ts +2 -0
- package/build/ts/react/index.d.ts.map +1 -0
- package/build/ts/react/index.js +5 -0
- package/build/ts/react/index.js.map +1 -0
- package/build/ts/server/adapters/node/index.d.ts.map +1 -0
- package/build/ts/{adapters → server/adapters}/node/index.js +1 -1
- package/build/ts/server/adapters/node/index.js.map +1 -0
- package/build/ts/{auth → server/authenticate}/admin/authenticate.d.ts +0 -2
- package/build/ts/server/authenticate/admin/authenticate.d.ts.map +1 -0
- package/build/ts/{auth → server/authenticate}/admin/authenticate.js +26 -70
- package/build/ts/server/authenticate/admin/authenticate.js.map +1 -0
- package/build/ts/{billing → server/authenticate/admin/billing}/cancel.d.ts +1 -1
- package/build/ts/server/authenticate/admin/billing/cancel.d.ts.map +1 -0
- package/build/ts/{billing → server/authenticate/admin/billing}/cancel.js +1 -1
- package/build/ts/server/authenticate/admin/billing/cancel.js.map +1 -0
- package/build/ts/server/authenticate/admin/billing/index.d.ts.map +1 -0
- package/build/ts/server/authenticate/admin/billing/index.js.map +1 -0
- package/build/ts/{billing → server/authenticate/admin/billing}/request.d.ts +2 -2
- package/build/ts/server/authenticate/admin/billing/request.d.ts.map +1 -0
- package/build/ts/{billing → server/authenticate/admin/billing}/request.js +2 -3
- package/build/ts/server/authenticate/admin/billing/request.js.map +1 -0
- package/build/ts/{billing → server/authenticate/admin/billing}/require.d.ts +2 -2
- package/build/ts/server/authenticate/admin/billing/require.d.ts.map +1 -0
- package/build/ts/{billing → server/authenticate/admin/billing}/require.js +1 -1
- package/build/ts/server/authenticate/admin/billing/require.js.map +1 -0
- package/build/ts/{billing → server/authenticate/admin/billing}/types.d.ts +1 -1
- package/build/ts/server/authenticate/admin/billing/types.d.ts.map +1 -0
- package/build/ts/server/authenticate/admin/billing/types.js.map +1 -0
- package/build/ts/{auth → server/authenticate/admin}/helpers/begin-auth.d.ts +1 -1
- package/build/ts/server/authenticate/admin/helpers/begin-auth.d.ts.map +1 -0
- package/build/ts/server/authenticate/admin/helpers/begin-auth.js.map +1 -0
- package/build/ts/server/authenticate/admin/helpers/handle-client-error.d.ts +7 -0
- package/build/ts/server/authenticate/admin/helpers/handle-client-error.d.ts.map +1 -0
- package/build/ts/server/authenticate/admin/helpers/handle-client-error.js +41 -0
- package/build/ts/server/authenticate/admin/helpers/handle-client-error.js.map +1 -0
- package/build/ts/server/authenticate/admin/helpers/index.d.ts +8 -0
- package/build/ts/server/authenticate/admin/helpers/index.d.ts.map +1 -0
- package/build/ts/server/authenticate/admin/helpers/index.js +11 -0
- package/build/ts/server/authenticate/admin/helpers/index.js.map +1 -0
- package/build/ts/{auth → server/authenticate/admin}/helpers/redirect-to-auth-page.d.ts +1 -1
- package/build/ts/server/authenticate/admin/helpers/redirect-to-auth-page.d.ts.map +1 -0
- package/build/ts/{auth → server/authenticate/admin}/helpers/redirect-to-auth-page.js +5 -2
- package/build/ts/server/authenticate/admin/helpers/redirect-to-auth-page.js.map +1 -0
- package/build/ts/server/authenticate/admin/helpers/redirect-with-app-bridge-headers.d.ts +3 -0
- package/build/ts/server/authenticate/admin/helpers/redirect-with-app-bridge-headers.d.ts.map +1 -0
- package/build/ts/{auth → server/authenticate/admin}/helpers/redirect-with-app-bridge-headers.js +2 -4
- package/build/ts/server/authenticate/admin/helpers/redirect-with-app-bridge-headers.js.map +1 -0
- package/build/ts/{auth → server/authenticate/admin}/helpers/redirect-with-exitiframe.d.ts +1 -1
- package/build/ts/server/authenticate/admin/helpers/redirect-with-exitiframe.d.ts.map +1 -0
- package/build/ts/server/authenticate/admin/helpers/redirect-with-exitiframe.js.map +1 -0
- package/build/ts/server/authenticate/admin/helpers/redirect.d.ts +9 -0
- package/build/ts/server/authenticate/admin/helpers/redirect.d.ts.map +1 -0
- package/build/ts/server/authenticate/admin/helpers/redirect.js +64 -0
- package/build/ts/server/authenticate/admin/helpers/redirect.js.map +1 -0
- package/build/ts/server/authenticate/admin/helpers/render-app-bridge.d.ts +8 -0
- package/build/ts/server/authenticate/admin/helpers/render-app-bridge.d.ts.map +1 -0
- package/build/ts/server/authenticate/admin/helpers/render-app-bridge.js +22 -0
- package/build/ts/server/authenticate/admin/helpers/render-app-bridge.js.map +1 -0
- package/build/ts/{auth → server/authenticate}/admin/types.d.ts +22 -2
- package/build/ts/server/authenticate/admin/types.d.ts.map +1 -0
- package/build/ts/server/authenticate/admin/types.js.map +1 -0
- package/build/ts/server/authenticate/const.d.ts.map +1 -0
- package/build/ts/server/authenticate/const.js.map +1 -0
- package/build/ts/server/authenticate/helpers/add-response-headers.d.ts.map +1 -0
- package/build/ts/server/authenticate/helpers/add-response-headers.js.map +1 -0
- package/build/ts/server/authenticate/helpers/app-bridge-url.d.ts.map +1 -0
- package/build/ts/server/authenticate/helpers/app-bridge-url.js.map +1 -0
- package/build/ts/{auth → server/authenticate}/helpers/ensure-cors-headers.d.ts +1 -1
- package/build/ts/server/authenticate/helpers/ensure-cors-headers.d.ts.map +1 -0
- package/build/ts/{auth → server/authenticate}/helpers/ensure-cors-headers.js +8 -2
- package/build/ts/server/authenticate/helpers/ensure-cors-headers.js.map +1 -0
- package/build/ts/server/authenticate/helpers/get-session-token-header.d.ts.map +1 -0
- package/build/ts/server/authenticate/helpers/get-session-token-header.js.map +1 -0
- package/build/ts/{auth → server/authenticate}/helpers/index.d.ts +0 -4
- package/build/ts/server/authenticate/helpers/index.d.ts.map +1 -0
- package/build/ts/{auth → server/authenticate}/helpers/index.js +0 -4
- package/build/ts/server/authenticate/helpers/index.js.map +1 -0
- package/build/ts/server/authenticate/helpers/reject-bot-request.d.ts.map +1 -0
- package/build/ts/server/authenticate/helpers/reject-bot-request.js.map +1 -0
- package/build/ts/server/authenticate/helpers/respond-to-options-request.d.ts +3 -0
- package/build/ts/server/authenticate/helpers/respond-to-options-request.d.ts.map +1 -0
- package/build/ts/{auth → server/authenticate}/helpers/respond-to-options-request.js +2 -2
- package/build/ts/server/authenticate/helpers/respond-to-options-request.js.map +1 -0
- package/build/ts/server/authenticate/helpers/validate-session-token.d.ts +8 -0
- package/build/ts/server/authenticate/helpers/validate-session-token.d.ts.map +1 -0
- package/build/ts/{auth → server/authenticate}/helpers/validate-session-token.js +11 -8
- package/build/ts/server/authenticate/helpers/validate-session-token.js.map +1 -0
- package/build/ts/server/authenticate/login/login.d.ts.map +1 -0
- package/build/ts/server/authenticate/login/login.js.map +1 -0
- package/build/ts/server/authenticate/public/authenticate.d.ts +4 -0
- package/build/ts/server/authenticate/public/authenticate.d.ts.map +1 -0
- package/build/ts/{auth → server/authenticate}/public/authenticate.js +16 -11
- package/build/ts/server/authenticate/public/authenticate.js.map +1 -0
- package/build/ts/{auth → server/authenticate}/public/types.d.ts +7 -2
- package/build/ts/server/authenticate/public/types.d.ts.map +1 -0
- package/build/ts/server/authenticate/public/types.js.map +1 -0
- package/build/ts/server/authenticate/webhooks/authenticate.d.ts.map +1 -0
- package/build/ts/server/authenticate/webhooks/authenticate.js.map +1 -0
- package/build/ts/server/authenticate/webhooks/index.d.ts.map +1 -0
- package/build/ts/server/authenticate/webhooks/index.js.map +1 -0
- package/build/ts/server/authenticate/webhooks/register.d.ts.map +1 -0
- package/build/ts/server/authenticate/webhooks/register.js.map +1 -0
- package/build/ts/server/authenticate/webhooks/types.d.ts.map +1 -0
- package/build/ts/server/authenticate/webhooks/types.js.map +1 -0
- package/build/ts/server/boundary/error.d.ts +2 -0
- package/build/ts/server/boundary/error.d.ts.map +1 -0
- package/build/ts/{boundary → server/boundary}/error.js +2 -1
- package/build/ts/server/boundary/error.js.map +1 -0
- package/build/ts/server/boundary/headers.d.ts.map +1 -0
- package/build/ts/server/boundary/headers.js.map +1 -0
- package/build/ts/server/boundary/index.d.ts +38 -0
- package/build/ts/server/boundary/index.d.ts.map +1 -0
- package/build/ts/server/boundary/index.js +41 -0
- package/build/ts/server/boundary/index.js.map +1 -0
- package/build/ts/server/boundary/types.d.ts.map +1 -0
- package/build/ts/{auth/admin → server/boundary}/types.js.map +1 -1
- package/build/ts/server/clients/admin/factory.d.ts +11 -0
- package/build/ts/server/clients/admin/factory.d.ts.map +1 -0
- package/build/ts/server/clients/admin/factory.js +18 -0
- package/build/ts/server/clients/admin/factory.js.map +1 -0
- package/build/ts/server/clients/admin/graphql.d.ts +17 -0
- package/build/ts/server/clients/admin/graphql.d.ts.map +1 -0
- package/build/ts/{auth/admin/graphql-client.js → server/clients/admin/graphql.js} +9 -14
- package/build/ts/server/clients/admin/graphql.js.map +1 -0
- package/build/ts/server/clients/admin/index.d.ts +2 -0
- package/build/ts/server/clients/admin/index.d.ts.map +1 -0
- package/build/ts/server/clients/admin/index.js +5 -0
- package/build/ts/server/clients/admin/index.js.map +1 -0
- package/build/ts/{auth/admin/rest-client.d.ts → server/clients/admin/rest.d.ts} +10 -13
- package/build/ts/server/clients/admin/rest.d.ts.map +1 -0
- package/build/ts/{auth/admin/rest-client.js → server/clients/admin/rest.js} +56 -25
- package/build/ts/server/clients/admin/rest.js.map +1 -0
- package/build/ts/server/clients/admin/types.d.ts +13 -0
- package/build/ts/server/clients/admin/types.d.ts.map +1 -0
- package/build/ts/server/clients/admin/types.js +3 -0
- package/build/ts/server/clients/admin/types.js.map +1 -0
- package/build/ts/{config-types.d.ts → server/config-types.d.ts} +3 -3
- package/build/ts/server/config-types.d.ts.map +1 -0
- package/build/ts/server/config-types.js.map +1 -0
- package/build/ts/server/index.d.ts +7 -0
- package/build/ts/server/index.d.ts.map +1 -0
- package/build/ts/server/index.js +22 -0
- package/build/ts/server/index.js.map +1 -0
- package/build/ts/server/override-logger.d.ts.map +1 -0
- package/build/ts/server/override-logger.js.map +1 -0
- package/build/ts/server/shopify-app.d.ts +27 -0
- package/build/ts/server/shopify-app.d.ts.map +1 -0
- package/build/ts/{index.js → server/shopify-app.js} +12 -58
- package/build/ts/server/shopify-app.js.map +1 -0
- package/build/ts/{types.d.ts → server/types.d.ts} +46 -13
- package/build/ts/server/types.d.ts.map +1 -0
- package/build/ts/server/types.js.map +1 -0
- package/build/ts/server/unauthenticated/admin/factory.d.ts +5 -0
- package/build/ts/server/unauthenticated/admin/factory.d.ts.map +1 -0
- package/build/ts/server/unauthenticated/admin/factory.js +30 -0
- package/build/ts/server/unauthenticated/admin/factory.js.map +1 -0
- package/build/ts/server/unauthenticated/admin/index.d.ts +2 -0
- package/build/ts/server/unauthenticated/admin/index.d.ts.map +1 -0
- package/build/ts/server/unauthenticated/admin/index.js +5 -0
- package/build/ts/server/unauthenticated/admin/index.js.map +1 -0
- package/build/ts/server/unauthenticated/admin/types.d.ts +32 -0
- package/build/ts/server/unauthenticated/admin/types.d.ts.map +1 -0
- package/build/ts/server/unauthenticated/admin/types.js +3 -0
- package/build/ts/server/unauthenticated/admin/types.js.map +1 -0
- package/build/ts/server/version.d.ts +2 -0
- package/build/ts/server/version.d.ts.map +1 -0
- package/build/ts/{version.js → server/version.js} +1 -1
- package/build/ts/server/version.js.map +1 -0
- package/build/tsconfig.tsbuildinfo +1 -1
- package/package.json +34 -10
- package/build/cjs/auth/helpers/handle-client-error.js +0 -37
- package/build/ts/adapters/node/index.d.ts.map +0 -1
- package/build/ts/adapters/node/index.js.map +0 -1
- package/build/ts/auth/admin/authenticate.d.ts.map +0 -1
- package/build/ts/auth/admin/authenticate.js.map +0 -1
- package/build/ts/auth/admin/graphql-client.d.ts +0 -22
- package/build/ts/auth/admin/graphql-client.d.ts.map +0 -1
- package/build/ts/auth/admin/graphql-client.js.map +0 -1
- package/build/ts/auth/admin/rest-client.d.ts.map +0 -1
- package/build/ts/auth/admin/rest-client.js.map +0 -1
- package/build/ts/auth/admin/types.d.ts.map +0 -1
- package/build/ts/auth/const.d.ts.map +0 -1
- package/build/ts/auth/const.js.map +0 -1
- package/build/ts/auth/helpers/add-response-headers.d.ts.map +0 -1
- package/build/ts/auth/helpers/add-response-headers.js.map +0 -1
- package/build/ts/auth/helpers/app-bridge-url.d.ts.map +0 -1
- package/build/ts/auth/helpers/app-bridge-url.js.map +0 -1
- package/build/ts/auth/helpers/begin-auth.d.ts.map +0 -1
- package/build/ts/auth/helpers/begin-auth.js.map +0 -1
- package/build/ts/auth/helpers/ensure-cors-headers.d.ts.map +0 -1
- package/build/ts/auth/helpers/ensure-cors-headers.js.map +0 -1
- package/build/ts/auth/helpers/get-session-token-header.d.ts.map +0 -1
- package/build/ts/auth/helpers/get-session-token-header.js.map +0 -1
- package/build/ts/auth/helpers/handle-client-error.d.ts +0 -11
- package/build/ts/auth/helpers/handle-client-error.d.ts.map +0 -1
- package/build/ts/auth/helpers/handle-client-error.js +0 -40
- package/build/ts/auth/helpers/handle-client-error.js.map +0 -1
- package/build/ts/auth/helpers/index.d.ts.map +0 -1
- package/build/ts/auth/helpers/index.js.map +0 -1
- package/build/ts/auth/helpers/redirect-to-auth-page.d.ts.map +0 -1
- package/build/ts/auth/helpers/redirect-to-auth-page.js.map +0 -1
- package/build/ts/auth/helpers/redirect-with-app-bridge-headers.d.ts +0 -4
- package/build/ts/auth/helpers/redirect-with-app-bridge-headers.d.ts.map +0 -1
- package/build/ts/auth/helpers/redirect-with-app-bridge-headers.js.map +0 -1
- package/build/ts/auth/helpers/redirect-with-exitiframe.d.ts.map +0 -1
- package/build/ts/auth/helpers/redirect-with-exitiframe.js.map +0 -1
- package/build/ts/auth/helpers/reject-bot-request.d.ts.map +0 -1
- package/build/ts/auth/helpers/reject-bot-request.js.map +0 -1
- package/build/ts/auth/helpers/respond-to-options-request.d.ts +0 -3
- package/build/ts/auth/helpers/respond-to-options-request.d.ts.map +0 -1
- package/build/ts/auth/helpers/respond-to-options-request.js.map +0 -1
- package/build/ts/auth/helpers/validate-session-token.d.ts +0 -4
- package/build/ts/auth/helpers/validate-session-token.d.ts.map +0 -1
- package/build/ts/auth/helpers/validate-session-token.js.map +0 -1
- package/build/ts/auth/login/login.d.ts.map +0 -1
- package/build/ts/auth/login/login.js.map +0 -1
- package/build/ts/auth/public/authenticate.d.ts +0 -4
- package/build/ts/auth/public/authenticate.d.ts.map +0 -1
- package/build/ts/auth/public/authenticate.js.map +0 -1
- package/build/ts/auth/public/types.d.ts.map +0 -1
- package/build/ts/auth/public/types.js.map +0 -1
- package/build/ts/auth/webhooks/authenticate.d.ts.map +0 -1
- package/build/ts/auth/webhooks/authenticate.js.map +0 -1
- package/build/ts/auth/webhooks/index.d.ts.map +0 -1
- package/build/ts/auth/webhooks/index.js.map +0 -1
- package/build/ts/auth/webhooks/register.d.ts.map +0 -1
- package/build/ts/auth/webhooks/register.js.map +0 -1
- package/build/ts/auth/webhooks/types.d.ts.map +0 -1
- package/build/ts/auth/webhooks/types.js.map +0 -1
- package/build/ts/billing/cancel.d.ts.map +0 -1
- package/build/ts/billing/cancel.js.map +0 -1
- package/build/ts/billing/index.d.ts.map +0 -1
- package/build/ts/billing/index.js.map +0 -1
- package/build/ts/billing/request.d.ts.map +0 -1
- package/build/ts/billing/request.js.map +0 -1
- package/build/ts/billing/require.d.ts.map +0 -1
- package/build/ts/billing/require.js.map +0 -1
- package/build/ts/billing/types.d.ts.map +0 -1
- package/build/ts/billing/types.js.map +0 -1
- package/build/ts/boundary/error.d.ts +0 -2
- package/build/ts/boundary/error.d.ts.map +0 -1
- package/build/ts/boundary/error.js.map +0 -1
- package/build/ts/boundary/headers.d.ts.map +0 -1
- package/build/ts/boundary/headers.js.map +0 -1
- package/build/ts/boundary/types.d.ts.map +0 -1
- package/build/ts/boundary/types.js.map +0 -1
- package/build/ts/config-types.d.ts.map +0 -1
- package/build/ts/config-types.js.map +0 -1
- package/build/ts/index.d.ts +0 -67
- package/build/ts/index.d.ts.map +0 -1
- package/build/ts/index.js.map +0 -1
- package/build/ts/override-logger.d.ts.map +0 -1
- package/build/ts/override-logger.js.map +0 -1
- package/build/ts/types.d.ts.map +0 -1
- package/build/ts/types.js.map +0 -1
- package/build/ts/version.d.ts +0 -2
- package/build/ts/version.d.ts.map +0 -1
- package/build/ts/version.js.map +0 -1
- /package/build/cjs/{auth → server/authenticate/admin}/helpers/begin-auth.js +0 -0
- /package/build/cjs/{auth → server/authenticate/admin}/helpers/redirect-with-exitiframe.js +0 -0
- /package/build/cjs/{auth → server/authenticate}/const.js +0 -0
- /package/build/cjs/{auth → server/authenticate}/helpers/add-response-headers.js +0 -0
- /package/build/cjs/{auth → server/authenticate}/helpers/app-bridge-url.js +0 -0
- /package/build/cjs/{auth → server/authenticate}/helpers/get-session-token-header.js +0 -0
- /package/build/cjs/{auth → server/authenticate}/helpers/reject-bot-request.js +0 -0
- /package/build/cjs/{auth → server/authenticate}/login/login.js +0 -0
- /package/build/cjs/{auth → server/authenticate}/webhooks/authenticate.js +0 -0
- /package/build/cjs/{auth → server/authenticate}/webhooks/register.js +0 -0
- /package/build/cjs/{boundary → server/boundary}/headers.js +0 -0
- /package/build/cjs/{override-logger.js → server/override-logger.js} +0 -0
- /package/build/cjs/{types.js → server/types.js} +0 -0
- /package/build/ts/{adapters → server/adapters}/node/index.d.ts +0 -0
- /package/build/ts/{billing → server/authenticate/admin/billing}/index.d.ts +0 -0
- /package/build/ts/{billing → server/authenticate/admin/billing}/index.js +0 -0
- /package/build/ts/{auth/admin → server/authenticate/admin/billing}/types.js +0 -0
- /package/build/ts/{auth → server/authenticate/admin}/helpers/begin-auth.js +0 -0
- /package/build/ts/{auth → server/authenticate/admin}/helpers/redirect-with-exitiframe.js +0 -0
- /package/build/ts/{auth/public → server/authenticate/admin}/types.js +0 -0
- /package/build/ts/{auth → server/authenticate}/const.d.ts +0 -0
- /package/build/ts/{auth → server/authenticate}/const.js +0 -0
- /package/build/ts/{auth → server/authenticate}/helpers/add-response-headers.d.ts +0 -0
- /package/build/ts/{auth → server/authenticate}/helpers/add-response-headers.js +0 -0
- /package/build/ts/{auth → server/authenticate}/helpers/app-bridge-url.d.ts +0 -0
- /package/build/ts/{auth → server/authenticate}/helpers/app-bridge-url.js +0 -0
- /package/build/ts/{auth → server/authenticate}/helpers/get-session-token-header.d.ts +0 -0
- /package/build/ts/{auth → server/authenticate}/helpers/get-session-token-header.js +0 -0
- /package/build/ts/{auth → server/authenticate}/helpers/reject-bot-request.d.ts +0 -0
- /package/build/ts/{auth → server/authenticate}/helpers/reject-bot-request.js +0 -0
- /package/build/ts/{auth → server/authenticate}/login/login.d.ts +0 -0
- /package/build/ts/{auth → server/authenticate}/login/login.js +0 -0
- /package/build/ts/{auth/webhooks → server/authenticate/public}/types.js +0 -0
- /package/build/ts/{auth → server/authenticate}/webhooks/authenticate.d.ts +0 -0
- /package/build/ts/{auth → server/authenticate}/webhooks/authenticate.js +0 -0
- /package/build/ts/{auth → server/authenticate}/webhooks/index.d.ts +0 -0
- /package/build/ts/{auth → server/authenticate}/webhooks/index.js +0 -0
- /package/build/ts/{auth → server/authenticate}/webhooks/register.d.ts +0 -0
- /package/build/ts/{auth → server/authenticate}/webhooks/register.js +0 -0
- /package/build/ts/{auth → server/authenticate}/webhooks/types.d.ts +0 -0
- /package/build/ts/{billing → server/authenticate/webhooks}/types.js +0 -0
- /package/build/ts/{boundary → server/boundary}/headers.d.ts +0 -0
- /package/build/ts/{boundary → server/boundary}/headers.js +0 -0
- /package/build/ts/{boundary → server/boundary}/types.d.ts +0 -0
- /package/build/ts/{boundary → server/boundary}/types.js +0 -0
- /package/build/ts/{config-types.js → server/config-types.js} +0 -0
- /package/build/ts/{override-logger.d.ts → server/override-logger.d.ts} +0 -0
- /package/build/ts/{override-logger.js → server/override-logger.js} +0 -0
- /package/build/ts/{types.js → server/types.js} +0 -0
package/README.md
CHANGED
|
@@ -45,7 +45,7 @@ Create `app/shopify.server.js`. We will use this file to configure our Shopify a
|
|
|
45
45
|
|
|
46
46
|
```ts
|
|
47
47
|
// app/shopify.server.js
|
|
48
|
-
import '@shopify/shopify-app-remix/adapters/node';
|
|
48
|
+
import '@shopify/shopify-app-remix/server/adapters/node';
|
|
49
49
|
import {LATEST_API_VERSION, shopifyApp} from '@shopify/shopify-app-remix';
|
|
50
50
|
|
|
51
51
|
const shopify = shopifyApp({
|
|
@@ -95,7 +95,7 @@ Now let's create the [splat route](https://remix.run/docs/en/main/guides/routing
|
|
|
95
95
|
// app/routes/auth/$.tsx
|
|
96
96
|
import {LoaderArgs} from '@remix-run/node';
|
|
97
97
|
|
|
98
|
-
import shopify from '
|
|
98
|
+
import shopify from '~/shopify.server';
|
|
99
99
|
|
|
100
100
|
export async function loader({request}: LoaderArgs) {
|
|
101
101
|
await shopify.authenticate.admin(request);
|
|
@@ -104,13 +104,20 @@ export async function loader({request}: LoaderArgs) {
|
|
|
104
104
|
}
|
|
105
105
|
```
|
|
106
106
|
|
|
107
|
-
|
|
107
|
+
Next, set up the `AppProvider` component in your app's routes. To do this pass the `process.env.SHOPIFY_API_KEY` to the frontend via the loader.
|
|
108
108
|
|
|
109
109
|
Here is an example:
|
|
110
110
|
|
|
111
111
|
```ts
|
|
112
112
|
// root.tsx
|
|
113
|
-
|
|
113
|
+
import {LoaderArgs} from '@remix-run/node';
|
|
114
|
+
import {AppProvider} from '@shopify/shopify-app-remix/react';
|
|
115
|
+
|
|
116
|
+
import shopify from '~/shopify.server';
|
|
117
|
+
|
|
118
|
+
export async function loader({request}: LoaderArgs) {
|
|
119
|
+
await shopify.authenticate.admin(request);
|
|
120
|
+
|
|
114
121
|
return json({
|
|
115
122
|
apiKey: process.env.SHOPIFY_API_KEY,
|
|
116
123
|
});
|
|
@@ -124,19 +131,18 @@ export default function App() {
|
|
|
124
131
|
<head>
|
|
125
132
|
<Meta />
|
|
126
133
|
<Links />
|
|
127
|
-
{/* App Bridge must be loaded from the CDN at the head */}
|
|
128
|
-
<script
|
|
129
|
-
src="https://cdn.shopify.com/shopifycloud/app-bridge.js"
|
|
130
|
-
data-api-key={apiKey}
|
|
131
|
-
/>
|
|
132
134
|
</head>
|
|
133
|
-
<body
|
|
135
|
+
<body>
|
|
136
|
+
<AppProvider apiKey={apiKey} isEmbeddedApp>
|
|
137
|
+
<Outlet />
|
|
138
|
+
</AppProvider>
|
|
139
|
+
</body>
|
|
134
140
|
</html>
|
|
135
141
|
);
|
|
136
142
|
}
|
|
137
143
|
```
|
|
138
144
|
|
|
139
|
-
|
|
145
|
+
This component will set up [Polaris](https://polaris.shopify.com/components/utilities/app-provider) and [App Bridge](https://shopify.dev/tools/app-bridge). If your app is not embedded, set the `isEmbeddedApp` prop to `false`.
|
|
140
146
|
|
|
141
147
|
Now that your app is ready to respond to requests, it will also need to add the required `Content-Security-Policy` header directives, as per [our documentation](https://shopify.dev/docs/apps/store/security/iframe-protection).
|
|
142
148
|
To do that, this package provides the `shopify.addDocumentResponseHeaders` method.
|
|
@@ -154,22 +160,12 @@ export default function handleRequest(
|
|
|
154
160
|
responseHeaders: Headers,
|
|
155
161
|
remixContext: EntryContext,
|
|
156
162
|
) {
|
|
157
|
-
const markup = renderToString(
|
|
158
|
-
<RemixServer context={remixContext} url={request.url} />,
|
|
159
|
-
);
|
|
160
|
-
|
|
161
|
-
responseHeaders.set('Content-Type', 'text/html');
|
|
162
163
|
shopify.addDocumentResponseHeaders(request, responseHeaders);
|
|
163
164
|
|
|
164
|
-
|
|
165
|
-
status: responseStatusCode,
|
|
166
|
-
headers: responseHeaders,
|
|
167
|
-
});
|
|
165
|
+
/// ..etc
|
|
168
166
|
}
|
|
169
167
|
```
|
|
170
168
|
|
|
171
|
-
If you don't want to add this to every HTML request, you can call it in individual loaders, but you should only do this if you have a good reason not to include the headers in every HTML request.
|
|
172
|
-
|
|
173
169
|
## Setting up for your runtime
|
|
174
170
|
|
|
175
171
|
By default, this package will work with the runtimes supported by [Remix adapters](https://remix.run/docs/en/1.17.1/other-api/adapter#official-adapters) because it relies on the same [Web Fetch API](https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API).
|
|
@@ -179,7 +175,7 @@ Since Node.js doesn't fully implement that API, apps will need to import an extr
|
|
|
179
175
|
In the [Getting Started](#getting-started) section above, you'll notice that the example runs
|
|
180
176
|
|
|
181
177
|
```ts
|
|
182
|
-
import '@shopify/shopify-app-remix/adapters/node';
|
|
178
|
+
import '@shopify/shopify-app-remix/server/adapters/node';
|
|
183
179
|
```
|
|
184
180
|
|
|
185
181
|
before calling `shopifyApp`.
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
require('react');
|
|
6
|
+
var polaris = require('@shopify/polaris');
|
|
7
|
+
var englishI18n = require('@shopify/polaris/locales/en.json');
|
|
8
|
+
var _const = require('../../const.js');
|
|
9
|
+
var RemixPolarisLink = require('../RemixPolarisLink.js');
|
|
10
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
11
|
+
|
|
12
|
+
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
13
|
+
|
|
14
|
+
var englishI18n__default = /*#__PURE__*/_interopDefaultLegacy(englishI18n);
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Sets up the Polaris AppProvider and injects the App Bridge script.
|
|
18
|
+
*
|
|
19
|
+
* {@link https://polaris.shopify.com/components/utilities/app-provider}
|
|
20
|
+
* {@link https://shopify.dev/tools/app-bridge}
|
|
21
|
+
*
|
|
22
|
+
* @example
|
|
23
|
+
* Wrap your app in the `AppProvider` component and pass in your API key.
|
|
24
|
+
* ```ts
|
|
25
|
+
* import {authenticate} from '~/shopify.server';
|
|
26
|
+
* import {AppProvider} from '@shopify/shopify-app-remix/react';
|
|
27
|
+
*
|
|
28
|
+
* export async function loader({ request }) {
|
|
29
|
+
* await authenticate.admin(request);
|
|
30
|
+
*
|
|
31
|
+
* return json({ apiKey: process.env.SHOPIFY_API_KEY });
|
|
32
|
+
* }
|
|
33
|
+
*
|
|
34
|
+
* export default function App() {
|
|
35
|
+
* const { apiKey } = useLoaderData();
|
|
36
|
+
*
|
|
37
|
+
* return (
|
|
38
|
+
* <AppProvider apiKey={apiKey}>
|
|
39
|
+
* <Outlet />
|
|
40
|
+
* </AppProvider>
|
|
41
|
+
* );
|
|
42
|
+
* }
|
|
43
|
+
* ```
|
|
44
|
+
*/
|
|
45
|
+
function AppProvider(props) {
|
|
46
|
+
const {
|
|
47
|
+
children,
|
|
48
|
+
apiKey,
|
|
49
|
+
i18n,
|
|
50
|
+
isEmbeddedApp = true,
|
|
51
|
+
__APP_BRIDGE_URL = _const.APP_BRIDGE_URL,
|
|
52
|
+
...polarisProps
|
|
53
|
+
} = props;
|
|
54
|
+
return /*#__PURE__*/jsxRuntime.jsxs(jsxRuntime.Fragment, {
|
|
55
|
+
children: [isEmbeddedApp && /*#__PURE__*/jsxRuntime.jsx("script", {
|
|
56
|
+
src: __APP_BRIDGE_URL,
|
|
57
|
+
"data-api-key": apiKey
|
|
58
|
+
}), /*#__PURE__*/jsxRuntime.jsx(polaris.AppProvider, {
|
|
59
|
+
...polarisProps,
|
|
60
|
+
linkComponent: RemixPolarisLink.RemixPolarisLink,
|
|
61
|
+
i18n: i18n || englishI18n__default["default"],
|
|
62
|
+
children: children
|
|
63
|
+
})]
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
exports.AppProvider = AppProvider;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var React = require('react');
|
|
6
|
+
var react = require('@remix-run/react');
|
|
7
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
8
|
+
|
|
9
|
+
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
10
|
+
|
|
11
|
+
var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
|
|
12
|
+
|
|
13
|
+
const RemixPolarisLink = /*#__PURE__*/React__default["default"].forwardRef((props, ref) => {
|
|
14
|
+
var _props$url;
|
|
15
|
+
return /*#__PURE__*/jsxRuntime.jsx(react.Link, {
|
|
16
|
+
...props,
|
|
17
|
+
to: (_props$url = props.url) !== null && _props$url !== void 0 ? _props$url : props.to,
|
|
18
|
+
ref: ref
|
|
19
|
+
});
|
|
20
|
+
});
|
|
21
|
+
|
|
22
|
+
exports.RemixPolarisLink = RemixPolarisLink;
|
|
@@ -2,10 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
var crypto = require('crypto');
|
|
4
4
|
var runtime = require('@shopify/shopify-api/runtime');
|
|
5
|
-
var appBridgeUrl = require('../../
|
|
6
|
-
require('@remix-run/server-runtime');
|
|
5
|
+
var appBridgeUrl = require('../../authenticate/helpers/app-bridge-url.js');
|
|
7
6
|
require('isbot');
|
|
8
|
-
require('@shopify/shopify-api');
|
|
9
7
|
|
|
10
8
|
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
11
9
|
|
|
@@ -4,21 +4,21 @@ Object.defineProperty(exports, '__esModule', { value: true });
|
|
|
4
4
|
|
|
5
5
|
var serverRuntime = require('@remix-run/server-runtime');
|
|
6
6
|
var shopifyApi = require('@shopify/shopify-api');
|
|
7
|
-
var
|
|
8
|
-
var require$1 = require('../../billing/require.js');
|
|
9
|
-
var request = require('../../billing/request.js');
|
|
10
|
-
var appBridgeUrl = require('../helpers/app-bridge-url.js');
|
|
11
|
-
var addResponseHeaders = require('../helpers/add-response-headers.js');
|
|
12
|
-
var redirectToAuthPage = require('../helpers/redirect-to-auth-page.js');
|
|
13
|
-
var redirectWithExitiframe = require('../helpers/redirect-with-exitiframe.js');
|
|
14
|
-
var beginAuth = require('../helpers/begin-auth.js');
|
|
7
|
+
var factory = require('../../clients/admin/factory.js');
|
|
15
8
|
var ensureCorsHeaders = require('../helpers/ensure-cors-headers.js');
|
|
16
9
|
var validateSessionToken = require('../helpers/validate-session-token.js');
|
|
17
10
|
var getSessionTokenHeader = require('../helpers/get-session-token-header.js');
|
|
18
11
|
var rejectBotRequest = require('../helpers/reject-bot-request.js');
|
|
19
12
|
var respondToOptionsRequest = require('../helpers/respond-to-options-request.js');
|
|
20
|
-
var
|
|
21
|
-
var
|
|
13
|
+
var cancel = require('./billing/cancel.js');
|
|
14
|
+
var require$1 = require('./billing/require.js');
|
|
15
|
+
var request = require('./billing/request.js');
|
|
16
|
+
var beginAuth = require('./helpers/begin-auth.js');
|
|
17
|
+
var handleClientError = require('./helpers/handle-client-error.js');
|
|
18
|
+
var redirectToAuthPage = require('./helpers/redirect-to-auth-page.js');
|
|
19
|
+
var redirectWithExitiframe = require('./helpers/redirect-with-exitiframe.js');
|
|
20
|
+
var redirect = require('./helpers/redirect.js');
|
|
21
|
+
var renderAppBridge = require('./helpers/render-app-bridge.js');
|
|
22
22
|
|
|
23
23
|
const SESSION_TOKEN_PARAM = 'id_token';
|
|
24
24
|
class AuthStrategy {
|
|
@@ -73,7 +73,12 @@ class AuthStrategy {
|
|
|
73
73
|
if (config.isEmbeddedApp) {
|
|
74
74
|
return {
|
|
75
75
|
...context,
|
|
76
|
-
sessionToken: sessionContext.token
|
|
76
|
+
sessionToken: sessionContext.token,
|
|
77
|
+
redirect: redirect.redirectFactory({
|
|
78
|
+
api,
|
|
79
|
+
config,
|
|
80
|
+
logger
|
|
81
|
+
}, request)
|
|
77
82
|
};
|
|
78
83
|
} else {
|
|
79
84
|
return context;
|
|
@@ -85,6 +90,11 @@ class AuthStrategy {
|
|
|
85
90
|
logger,
|
|
86
91
|
config
|
|
87
92
|
} = this;
|
|
93
|
+
const params = {
|
|
94
|
+
api,
|
|
95
|
+
logger,
|
|
96
|
+
config
|
|
97
|
+
};
|
|
88
98
|
const url = new URL(request.url);
|
|
89
99
|
const isPatchSessionToken = url.pathname === config.auth.patchSessionTokenPath;
|
|
90
100
|
const isExitIframe = url.pathname === config.auth.exitIframePath;
|
|
@@ -94,13 +104,15 @@ class AuthStrategy {
|
|
|
94
104
|
logger.info('Authenticating admin request');
|
|
95
105
|
if (isPatchSessionToken) {
|
|
96
106
|
logger.debug('Rendering bounce page');
|
|
97
|
-
throw
|
|
107
|
+
throw renderAppBridge.renderAppBridge(params, request);
|
|
98
108
|
} else if (isExitIframe) {
|
|
99
109
|
const destination = url.searchParams.get('exitIframe');
|
|
100
110
|
logger.debug('Rendering exit iframe page', {
|
|
101
111
|
destination
|
|
102
112
|
});
|
|
103
|
-
throw
|
|
113
|
+
throw renderAppBridge.renderAppBridge(params, request, {
|
|
114
|
+
url: destination
|
|
115
|
+
});
|
|
104
116
|
} else if (isAuthCallbackRequest) {
|
|
105
117
|
throw await this.handleAuthCallbackRequest(request);
|
|
106
118
|
} else if (isAuthRequest) {
|
|
@@ -501,63 +513,6 @@ class AuthStrategy {
|
|
|
501
513
|
// https://github.com/orgs/Shopify/projects/6899/views/1?pane=issue&itemId=28376650
|
|
502
514
|
throw serverRuntime.redirect(`${config.auth.patchSessionTokenPath}?${params.toString()}`);
|
|
503
515
|
}
|
|
504
|
-
renderAppBridge(request, redirectTo) {
|
|
505
|
-
const {
|
|
506
|
-
config
|
|
507
|
-
} = this;
|
|
508
|
-
let redirectToScript = '';
|
|
509
|
-
if (redirectTo) {
|
|
510
|
-
const redirectUrl = decodeURIComponent(redirectTo.startsWith('/') ? `${config.appUrl}${redirectTo}` : redirectTo);
|
|
511
|
-
redirectToScript = `<script>window.open("${redirectUrl}", "_top")</script>`;
|
|
512
|
-
}
|
|
513
|
-
const responseHeaders = new Headers({
|
|
514
|
-
'content-type': 'text/html;charset=utf-8'
|
|
515
|
-
});
|
|
516
|
-
addResponseHeaders.addDocumentResponseHeaders(responseHeaders, config.isEmbeddedApp, new URL(request.url).searchParams.get('shop'));
|
|
517
|
-
throw new Response(`
|
|
518
|
-
<script data-api-key="${config.apiKey}" src="${appBridgeUrl.appBridgeUrl()}"></script>
|
|
519
|
-
${redirectToScript}
|
|
520
|
-
`, {
|
|
521
|
-
headers: responseHeaders
|
|
522
|
-
});
|
|
523
|
-
}
|
|
524
|
-
overriddenRestClient(request, session) {
|
|
525
|
-
const {
|
|
526
|
-
api,
|
|
527
|
-
config,
|
|
528
|
-
logger
|
|
529
|
-
} = this;
|
|
530
|
-
const client = new restClient.RemixRestClient({
|
|
531
|
-
params: {
|
|
532
|
-
api,
|
|
533
|
-
config,
|
|
534
|
-
logger
|
|
535
|
-
},
|
|
536
|
-
request,
|
|
537
|
-
session
|
|
538
|
-
});
|
|
539
|
-
if (api.rest) {
|
|
540
|
-
client.resources = {};
|
|
541
|
-
const RestResourceClient = restClient.restResourceClientFactory({
|
|
542
|
-
params: {
|
|
543
|
-
api,
|
|
544
|
-
config,
|
|
545
|
-
logger
|
|
546
|
-
},
|
|
547
|
-
request,
|
|
548
|
-
session
|
|
549
|
-
});
|
|
550
|
-
Object.entries(api.rest).forEach(([name, resource]) => {
|
|
551
|
-
class RemixResource extends resource {}
|
|
552
|
-
RemixResource.Client = RestResourceClient;
|
|
553
|
-
Reflect.defineProperty(RemixResource, 'name', {
|
|
554
|
-
value: name
|
|
555
|
-
});
|
|
556
|
-
Reflect.set(client.resources, name, RemixResource);
|
|
557
|
-
});
|
|
558
|
-
}
|
|
559
|
-
return client;
|
|
560
|
-
}
|
|
561
516
|
createBillingContext(request$1, session) {
|
|
562
517
|
const {
|
|
563
518
|
api,
|
|
@@ -583,23 +538,17 @@ class AuthStrategy {
|
|
|
583
538
|
};
|
|
584
539
|
}
|
|
585
540
|
createAdminApiContext(request, session) {
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
api,
|
|
596
|
-
config,
|
|
597
|
-
logger
|
|
598
|
-
},
|
|
599
|
-
request,
|
|
600
|
-
session
|
|
541
|
+
return factory.adminClientFactory({
|
|
542
|
+
session,
|
|
543
|
+
params: {
|
|
544
|
+
api: this.api,
|
|
545
|
+
config: this.config,
|
|
546
|
+
logger: this.logger
|
|
547
|
+
},
|
|
548
|
+
handleClientError: handleClientError.handleClientErrorFactory({
|
|
549
|
+
request
|
|
601
550
|
})
|
|
602
|
-
};
|
|
551
|
+
});
|
|
603
552
|
}
|
|
604
553
|
}
|
|
605
554
|
|
|
@@ -3,9 +3,8 @@
|
|
|
3
3
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
4
|
|
|
5
5
|
var shopifyApi = require('@shopify/shopify-api');
|
|
6
|
-
var redirectToAuthPage = require('../
|
|
6
|
+
var redirectToAuthPage = require('../helpers/redirect-to-auth-page.js');
|
|
7
7
|
require('@remix-run/server-runtime');
|
|
8
|
-
require('isbot');
|
|
9
8
|
|
|
10
9
|
function cancelBillingFactory(params, request, session) {
|
|
11
10
|
return async function cancelBilling(options) {
|
|
@@ -4,9 +4,8 @@ Object.defineProperty(exports, '__esModule', { value: true });
|
|
|
4
4
|
|
|
5
5
|
var shopifyApi = require('@shopify/shopify-api');
|
|
6
6
|
var serverRuntime = require('@remix-run/server-runtime');
|
|
7
|
-
var redirectToAuthPage = require('../
|
|
8
|
-
require('
|
|
9
|
-
var redirectWithAppBridgeHeaders = require('../auth/helpers/redirect-with-app-bridge-headers.js');
|
|
7
|
+
var redirectToAuthPage = require('../helpers/redirect-to-auth-page.js');
|
|
8
|
+
var redirectWithAppBridgeHeaders = require('../helpers/redirect-with-app-bridge-headers.js');
|
|
10
9
|
|
|
11
10
|
function requestBillingFactory(params, request, session) {
|
|
12
11
|
return async function requestBilling({
|
|
@@ -3,9 +3,8 @@
|
|
|
3
3
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
4
|
|
|
5
5
|
var shopifyApi = require('@shopify/shopify-api');
|
|
6
|
-
var redirectToAuthPage = require('../
|
|
6
|
+
var redirectToAuthPage = require('../helpers/redirect-to-auth-page.js');
|
|
7
7
|
require('@remix-run/server-runtime');
|
|
8
|
-
require('isbot');
|
|
9
8
|
|
|
10
9
|
function requireBillingFactory(params, request, session) {
|
|
11
10
|
const {
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var shopifyApi = require('@shopify/shopify-api');
|
|
6
|
+
var redirectToAuthPage = require('./redirect-to-auth-page.js');
|
|
7
|
+
|
|
8
|
+
function handleClientErrorFactory({
|
|
9
|
+
request
|
|
10
|
+
}) {
|
|
11
|
+
return async function handleClientError({
|
|
12
|
+
error,
|
|
13
|
+
params,
|
|
14
|
+
session
|
|
15
|
+
}) {
|
|
16
|
+
if (error instanceof shopifyApi.HttpResponseError !== true) {
|
|
17
|
+
params.logger.debug(`Got a response error from the API: ${error.message}`);
|
|
18
|
+
throw error;
|
|
19
|
+
}
|
|
20
|
+
params.logger.debug(`Got an HTTP response error from the API: ${error.message}`, {
|
|
21
|
+
code: error.response.code,
|
|
22
|
+
statusText: error.response.statusText,
|
|
23
|
+
body: JSON.stringify(error.response.body)
|
|
24
|
+
});
|
|
25
|
+
if (error.response.code === 401) {
|
|
26
|
+
throw await redirectToAuthPage.redirectToAuthPage(params, request, session.shop);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
// forward a minimal copy of the upstream HTTP response instead of an Error:
|
|
30
|
+
throw new Response(JSON.stringify(error.response.body), {
|
|
31
|
+
status: error.response.code,
|
|
32
|
+
headers: {
|
|
33
|
+
'Content-Type': error.response.headers['Content-Type']
|
|
34
|
+
}
|
|
35
|
+
});
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
exports.handleClientErrorFactory = handleClientErrorFactory;
|
|
@@ -7,11 +7,16 @@ var redirectWithExitiframe = require('./redirect-with-exitiframe.js');
|
|
|
7
7
|
var redirectWithAppBridgeHeaders = require('./redirect-with-app-bridge-headers.js');
|
|
8
8
|
|
|
9
9
|
async function redirectToAuthPage(params, request, shop, isOnline = false) {
|
|
10
|
+
const {
|
|
11
|
+
config
|
|
12
|
+
} = params;
|
|
10
13
|
const url = new URL(request.url);
|
|
11
14
|
const isEmbeddedRequest = url.searchParams.get('embedded') === '1';
|
|
12
15
|
const isXhrRequest = request.headers.get('authorization');
|
|
13
16
|
if (isXhrRequest) {
|
|
14
|
-
|
|
17
|
+
const redirectUri = new URL(config.auth.path, config.appUrl);
|
|
18
|
+
redirectUri.searchParams.set('shop', shop);
|
|
19
|
+
redirectWithAppBridgeHeaders.redirectWithAppBridgeHeaders(redirectUri.toString());
|
|
15
20
|
} else if (isEmbeddedRequest) {
|
|
16
21
|
redirectWithExitiframe.redirectWithExitIframe(params, request, shop);
|
|
17
22
|
} else {
|
package/build/cjs/{auth → server/authenticate/admin}/helpers/redirect-with-app-bridge-headers.js
RENAMED
|
@@ -2,13 +2,9 @@
|
|
|
2
2
|
|
|
3
3
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
4
|
|
|
5
|
-
var _const = require('
|
|
5
|
+
var _const = require('../../const.js');
|
|
6
6
|
|
|
7
|
-
function redirectWithAppBridgeHeaders(
|
|
8
|
-
const {
|
|
9
|
-
config
|
|
10
|
-
} = params;
|
|
11
|
-
const redirectUri = `${config.appUrl}${config.auth.path}?shop=${shop}`;
|
|
7
|
+
function redirectWithAppBridgeHeaders(redirectUri) {
|
|
12
8
|
throw new Response(undefined, {
|
|
13
9
|
status: 401,
|
|
14
10
|
statusText: 'Unauthorized',
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var serverRuntime = require('@remix-run/server-runtime');
|
|
6
|
+
var getSessionTokenHeader = require('../../helpers/get-session-token-header.js');
|
|
7
|
+
var renderAppBridge = require('./render-app-bridge.js');
|
|
8
|
+
var redirectWithAppBridgeHeaders = require('./redirect-with-app-bridge-headers.js');
|
|
9
|
+
|
|
10
|
+
function redirectFactory(params, request) {
|
|
11
|
+
const {
|
|
12
|
+
config
|
|
13
|
+
} = params;
|
|
14
|
+
return function redirect(url, init) {
|
|
15
|
+
const {
|
|
16
|
+
searchParams
|
|
17
|
+
} = new URL(request.url);
|
|
18
|
+
const parsedUrl = new URL(url, config.appUrl);
|
|
19
|
+
const isSameOrigin = parsedUrl.origin === config.appUrl;
|
|
20
|
+
if (isSameOrigin || url.startsWith('/')) {
|
|
21
|
+
searchParams.forEach((value, key) => {
|
|
22
|
+
if (!parsedUrl.searchParams.has(key)) {
|
|
23
|
+
parsedUrl.searchParams.set(key, value);
|
|
24
|
+
}
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
const target = typeof init !== 'number' && (init === null || init === void 0 ? void 0 : init.target) || '_self';
|
|
28
|
+
if (target === '_self') {
|
|
29
|
+
if (isBounceRequest(request)) {
|
|
30
|
+
throw renderAppBridge.renderAppBridge(params, request, {
|
|
31
|
+
url: parsedUrl.toString(),
|
|
32
|
+
target
|
|
33
|
+
});
|
|
34
|
+
} else {
|
|
35
|
+
return serverRuntime.redirect(parsedUrl.toString(), init);
|
|
36
|
+
}
|
|
37
|
+
} else if (isDataRequest(request)) {
|
|
38
|
+
throw redirectWithAppBridgeHeaders.redirectWithAppBridgeHeaders(parsedUrl.toString());
|
|
39
|
+
} else if (isEmbeddedRequest(request)) {
|
|
40
|
+
throw renderAppBridge.renderAppBridge(params, request, {
|
|
41
|
+
url: parsedUrl.toString(),
|
|
42
|
+
target
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
return serverRuntime.redirect(url, init);
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
function isBounceRequest(request) {
|
|
49
|
+
return Boolean(getSessionTokenHeader.getSessionTokenHeader(request)) && request.headers.has('X-Shopify-Bounce');
|
|
50
|
+
}
|
|
51
|
+
function isDataRequest(request) {
|
|
52
|
+
const {
|
|
53
|
+
searchParams
|
|
54
|
+
} = new URL(request.url);
|
|
55
|
+
const isGet = request.method === 'GET';
|
|
56
|
+
const sessionTokenHeader = Boolean(getSessionTokenHeader.getSessionTokenHeader(request));
|
|
57
|
+
const sessionTokenSearchParam = searchParams.has('id_token');
|
|
58
|
+
return sessionTokenHeader && !sessionTokenSearchParam && !isBounceRequest(request) && (!isEmbeddedRequest(request) || !isGet);
|
|
59
|
+
}
|
|
60
|
+
function isEmbeddedRequest(request) {
|
|
61
|
+
const {
|
|
62
|
+
searchParams
|
|
63
|
+
} = new URL(request.url);
|
|
64
|
+
return searchParams.get('embedded') === '1';
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
exports.redirectFactory = redirectFactory;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var appBridgeUrl = require('../../helpers/app-bridge-url.js');
|
|
6
|
+
var addResponseHeaders = require('../../helpers/add-response-headers.js');
|
|
7
|
+
|
|
8
|
+
function renderAppBridge({
|
|
9
|
+
config
|
|
10
|
+
}, request, redirectTo) {
|
|
11
|
+
let redirectToScript = '';
|
|
12
|
+
if (redirectTo) {
|
|
13
|
+
var _redirectTo$target;
|
|
14
|
+
const destination = new URL(redirectTo.url, config.appUrl);
|
|
15
|
+
const target = (_redirectTo$target = redirectTo.target) !== null && _redirectTo$target !== void 0 ? _redirectTo$target : '_top';
|
|
16
|
+
redirectToScript = `<script>window.open(${JSON.stringify(destination.toString())}, ${JSON.stringify(target)})</script>`;
|
|
17
|
+
}
|
|
18
|
+
const responseHeaders = new Headers({
|
|
19
|
+
'content-type': 'text/html;charset=utf-8'
|
|
20
|
+
});
|
|
21
|
+
addResponseHeaders.addDocumentResponseHeaders(responseHeaders, config.isEmbeddedApp, new URL(request.url).searchParams.get('shop'));
|
|
22
|
+
throw new Response(`
|
|
23
|
+
<script data-api-key="${config.apiKey}" src="${appBridgeUrl.appBridgeUrl()}"></script>
|
|
24
|
+
${redirectToScript}
|
|
25
|
+
`, {
|
|
26
|
+
headers: responseHeaders
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
exports.renderAppBridge = renderAppBridge;
|
|
@@ -4,7 +4,7 @@ Object.defineProperty(exports, '__esModule', { value: true });
|
|
|
4
4
|
|
|
5
5
|
var _const = require('../const.js');
|
|
6
6
|
|
|
7
|
-
function ensureCORSHeadersFactory(params, request) {
|
|
7
|
+
function ensureCORSHeadersFactory(params, request, corsHeaders = []) {
|
|
8
8
|
const {
|
|
9
9
|
logger,
|
|
10
10
|
config
|
|
@@ -13,8 +13,9 @@ function ensureCORSHeadersFactory(params, request) {
|
|
|
13
13
|
const origin = request.headers.get('Origin');
|
|
14
14
|
if (origin && origin !== config.appUrl) {
|
|
15
15
|
logger.debug('Request comes from a different origin, adding CORS headers');
|
|
16
|
+
const corsHeadersSet = new Set(['Authorization', 'Content-Type', ...corsHeaders]);
|
|
16
17
|
response.headers.set('Access-Control-Allow-Origin', '*');
|
|
17
|
-
response.headers.set('Access-Control-Allow-Headers', '
|
|
18
|
+
response.headers.set('Access-Control-Allow-Headers', [...corsHeadersSet].join(', '));
|
|
18
19
|
response.headers.set('Access-Control-Expose-Headers', _const.REAUTH_URL_HEADER);
|
|
19
20
|
}
|
|
20
21
|
return response;
|
|
@@ -4,9 +4,9 @@ Object.defineProperty(exports, '__esModule', { value: true });
|
|
|
4
4
|
|
|
5
5
|
var ensureCorsHeaders = require('./ensure-cors-headers.js');
|
|
6
6
|
|
|
7
|
-
function respondToOptionsRequest(params, request) {
|
|
7
|
+
function respondToOptionsRequest(params, request, corsHeaders) {
|
|
8
8
|
if (request.method === 'OPTIONS') {
|
|
9
|
-
const ensureCORSHeaders = ensureCorsHeaders.ensureCORSHeadersFactory(params, request);
|
|
9
|
+
const ensureCORSHeaders = ensureCorsHeaders.ensureCORSHeadersFactory(params, request, corsHeaders);
|
|
10
10
|
throw ensureCORSHeaders(new Response(null, {
|
|
11
11
|
status: 204,
|
|
12
12
|
headers: {
|
|
@@ -5,10 +5,14 @@ Object.defineProperty(exports, '__esModule', { value: true });
|
|
|
5
5
|
async function validateSessionToken({
|
|
6
6
|
api,
|
|
7
7
|
logger
|
|
8
|
-
}, token
|
|
8
|
+
}, token, {
|
|
9
|
+
checkAudience = true
|
|
10
|
+
} = {}) {
|
|
9
11
|
logger.debug('Validating session token');
|
|
10
12
|
try {
|
|
11
|
-
const payload = await api.session.decodeSessionToken(token
|
|
13
|
+
const payload = await api.session.decodeSessionToken(token, {
|
|
14
|
+
checkAudience
|
|
15
|
+
});
|
|
12
16
|
logger.debug('Session token is valid', {
|
|
13
17
|
payload: JSON.stringify(payload)
|
|
14
18
|
});
|