@shopify/shopify-app-remix 4.1.0 → 4.2.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/dist/cjs/react/components/AppProvider/AppProvider.js.map +1 -1
- package/dist/cjs/react/components/AppProxyLink/AppProxyLink.js.map +1 -1
- package/dist/cjs/server/authenticate/admin/strategies/auth-code-flow.js.map +1 -1
- package/dist/cjs/server/authenticate/admin/strategies/merchant-custom-app.js.map +1 -1
- package/dist/cjs/server/authenticate/admin/strategies/token-exchange.js.map +1 -1
- package/dist/cjs/server/authenticate/webhooks/authenticate.js +34 -10
- package/dist/cjs/server/authenticate/webhooks/authenticate.js.map +1 -1
- package/dist/cjs/server/version.js +1 -1
- package/dist/cjs/server/version.js.map +1 -1
- package/dist/esm/react/components/AppProvider/AppProvider.mjs.map +1 -1
- package/dist/esm/react/components/AppProxyLink/AppProxyLink.mjs.map +1 -1
- package/dist/esm/server/authenticate/admin/strategies/auth-code-flow.mjs.map +1 -1
- package/dist/esm/server/authenticate/admin/strategies/merchant-custom-app.mjs.map +1 -1
- package/dist/esm/server/authenticate/admin/strategies/token-exchange.mjs.map +1 -1
- package/dist/esm/server/authenticate/webhooks/authenticate.mjs +35 -11
- package/dist/esm/server/authenticate/webhooks/authenticate.mjs.map +1 -1
- package/dist/esm/server/version.mjs +1 -1
- package/dist/esm/server/version.mjs.map +1 -1
- package/dist/ts/react/components/AppProvider/AppProvider.d.ts.map +1 -1
- package/dist/ts/react/components/AppProxyLink/AppProxyLink.d.ts.map +1 -1
- package/dist/ts/server/authenticate/admin/billing/types.d.ts.map +1 -1
- package/dist/ts/server/authenticate/admin/strategies/auth-code-flow.d.ts.map +1 -1
- package/dist/ts/server/authenticate/admin/strategies/merchant-custom-app.d.ts.map +1 -1
- package/dist/ts/server/authenticate/admin/strategies/token-exchange.d.ts.map +1 -1
- package/dist/ts/server/authenticate/admin/types.d.ts.map +1 -1
- package/dist/ts/server/authenticate/public/extension/types.d.ts.map +1 -1
- package/dist/ts/server/authenticate/webhooks/authenticate.d.ts.map +1 -1
- package/dist/ts/server/authenticate/webhooks/types.d.ts +34 -2
- package/dist/ts/server/authenticate/webhooks/types.d.ts.map +1 -1
- package/dist/ts/server/config-types.d.ts.map +1 -1
- package/dist/ts/server/version.d.ts +1 -1
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +18 -14
- package/src/react/components/AppProvider/AppProvider.doc.ts +35 -0
- package/src/react/components/AppProvider/AppProvider.tsx +147 -0
- package/src/react/components/AppProvider/index.ts +1 -0
- package/src/react/components/AppProxyForm/AppProxyForm.doc.ts +28 -0
- package/src/react/components/AppProxyForm/AppProxyForm.tsx +82 -0
- package/src/react/components/AppProxyForm/index.ts +1 -0
- package/src/react/components/AppProxyLink/AppProxyLink.doc.ts +28 -0
- package/src/react/components/AppProxyLink/AppProxyLink.tsx +58 -0
- package/src/react/components/AppProxyLink/index.ts +1 -0
- package/src/react/components/AppProxyProvider/AppProxyProvider.doc.ts +40 -0
- package/src/react/components/AppProxyProvider/AppProxyProvider.tsx +100 -0
- package/src/react/components/AppProxyProvider/index.ts +5 -0
- package/src/react/components/RemixPolarisLink.tsx +14 -0
- package/src/react/components/index.ts +4 -0
- package/src/react/const.ts +2 -0
- package/src/react/index.ts +1 -0
- package/src/server/__test-helpers/const.ts +14 -0
- package/src/server/__test-helpers/expect-admin-api-client.ts +51 -0
- package/src/server/__test-helpers/expect-begin-auth-redirect.ts +22 -0
- package/src/server/__test-helpers/expect-document-request-headers.ts +25 -0
- package/src/server/__test-helpers/expect-exit-iframe.ts +37 -0
- package/src/server/__test-helpers/expect-login-redirect.ts +8 -0
- package/src/server/__test-helpers/expect-storefront-api-client.ts +49 -0
- package/src/server/__test-helpers/expect-token-refresh.ts +188 -0
- package/src/server/__test-helpers/get-hmac.ts +7 -0
- package/src/server/__test-helpers/get-jwt.ts +10 -0
- package/src/server/__test-helpers/get-thrown-error.ts +19 -0
- package/src/server/__test-helpers/get-thrown-response.ts +17 -0
- package/src/server/__test-helpers/index.ts +21 -0
- package/src/server/__test-helpers/mock-graphql-request.ts +60 -0
- package/src/server/__test-helpers/request-mock.ts +169 -0
- package/src/server/__test-helpers/setup-embedded-flow.ts +30 -0
- package/src/server/__test-helpers/setup-fetch-flow.ts +29 -0
- package/src/server/__test-helpers/setup-non-embedded-flow.ts +31 -0
- package/src/server/__test-helpers/setup-valid-request.ts +78 -0
- package/src/server/__test-helpers/setup-valid-session.ts +28 -0
- package/src/server/__test-helpers/sign-request-cookie.ts +21 -0
- package/src/server/__test-helpers/test-config.ts +56 -0
- package/src/server/adapters/node/index.ts +13 -0
- package/src/server/adapters/vercel/index.ts +13 -0
- package/src/server/authenticate/admin/authenticate.admin.doc.example.ts +34 -0
- package/src/server/authenticate/admin/authenticate.admin.doc.ts +51 -0
- package/src/server/authenticate/admin/authenticate.ts +232 -0
- package/src/server/authenticate/admin/billing/authenticate.admin.billing.doc.ts +29 -0
- package/src/server/authenticate/admin/billing/cancel.ts +38 -0
- package/src/server/authenticate/admin/billing/check.ts +41 -0
- package/src/server/authenticate/admin/billing/create-usage-record.ts +36 -0
- package/src/server/authenticate/admin/billing/helpers.ts +42 -0
- package/src/server/authenticate/admin/billing/index.ts +6 -0
- package/src/server/authenticate/admin/billing/request.ts +64 -0
- package/src/server/authenticate/admin/billing/require.ts +58 -0
- package/src/server/authenticate/admin/billing/types.ts +613 -0
- package/src/server/authenticate/admin/billing/update-usage-subscription-capped-amount.ts +55 -0
- package/src/server/authenticate/admin/helpers/begin-auth.ts +17 -0
- package/src/server/authenticate/admin/helpers/create-admin-api-context.ts +20 -0
- package/src/server/authenticate/admin/helpers/ensure-app-is-embedded-if-required.ts +18 -0
- package/src/server/authenticate/admin/helpers/ensure-session-token-search-param-if-required.ts +25 -0
- package/src/server/authenticate/admin/helpers/handle-client-error.ts +45 -0
- package/src/server/authenticate/admin/helpers/index.ts +14 -0
- package/src/server/authenticate/admin/helpers/redirect-to-auth-page.ts +28 -0
- package/src/server/authenticate/admin/helpers/redirect-to-bounce-page.ts +23 -0
- package/src/server/authenticate/admin/helpers/redirect-to-install-page.ts +53 -0
- package/src/server/authenticate/admin/helpers/redirect-to-shopify-or-app-root.ts +21 -0
- package/src/server/authenticate/admin/helpers/redirect-with-app-bridge-headers.ts +13 -0
- package/src/server/authenticate/admin/helpers/redirect-with-exitiframe.ts +28 -0
- package/src/server/authenticate/admin/helpers/redirect.ts +164 -0
- package/src/server/authenticate/admin/helpers/render-app-bridge.ts +46 -0
- package/src/server/authenticate/admin/helpers/trigger-after-auth-hook.ts +29 -0
- package/src/server/authenticate/admin/helpers/validate-redirect-url.ts +67 -0
- package/src/server/authenticate/admin/helpers/validate-shop-and-host-params.ts +46 -0
- package/src/server/authenticate/admin/scope/authenticate.admin.scopes.doc.ts +28 -0
- package/src/server/authenticate/admin/scope/client/fetch-scopes-details.ts +43 -0
- package/src/server/authenticate/admin/scope/client/revoke-scopes.ts +38 -0
- package/src/server/authenticate/admin/scope/factory.ts +21 -0
- package/src/server/authenticate/admin/scope/query.ts +51 -0
- package/src/server/authenticate/admin/scope/request.ts +32 -0
- package/src/server/authenticate/admin/scope/revoke.ts +48 -0
- package/src/server/authenticate/admin/scope/types.ts +126 -0
- package/src/server/authenticate/admin/strategies/auth-code-flow.ts +332 -0
- package/src/server/authenticate/admin/strategies/merchant-custom-app.ts +65 -0
- package/src/server/authenticate/admin/strategies/token-exchange.ts +188 -0
- package/src/server/authenticate/admin/strategies/types.ts +29 -0
- package/src/server/authenticate/admin/types.ts +216 -0
- package/src/server/authenticate/const.ts +15 -0
- package/src/server/authenticate/flow/authenticate.flow.doc.example.ts +39 -0
- package/src/server/authenticate/flow/authenticate.flow.doc.ts +47 -0
- package/src/server/authenticate/flow/authenticate.ts +68 -0
- package/src/server/authenticate/flow/types.ts +85 -0
- package/src/server/authenticate/fulfillment-service/authenticate.fulfillment-service.doc.example.ts +52 -0
- package/src/server/authenticate/fulfillment-service/authenticate.fulfillment-service.doc.ts +48 -0
- package/src/server/authenticate/fulfillment-service/authenticate.ts +82 -0
- package/src/server/authenticate/fulfillment-service/types.ts +82 -0
- package/src/server/authenticate/helpers/add-response-headers.ts +43 -0
- package/src/server/authenticate/helpers/app-bridge-url.ts +10 -0
- package/src/server/authenticate/helpers/ensure-cors-headers.ts +38 -0
- package/src/server/authenticate/helpers/get-session-token-header.ts +11 -0
- package/src/server/authenticate/helpers/get-shop-from-request.ts +4 -0
- package/src/server/authenticate/helpers/idempotent-promise-handler.ts +45 -0
- package/src/server/authenticate/helpers/index.ts +10 -0
- package/src/server/authenticate/helpers/invalidate-access-token.ts +17 -0
- package/src/server/authenticate/helpers/reject-bot-request.ts +27 -0
- package/src/server/authenticate/helpers/respond-to-invalid-session-token.ts +28 -0
- package/src/server/authenticate/helpers/respond-to-options-request.ts +26 -0
- package/src/server/authenticate/helpers/validate-session-token.ts +40 -0
- package/src/server/authenticate/login/login.ts +53 -0
- package/src/server/authenticate/public/appProxy/authenticate.public.app-proxy.doc.example.ts +27 -0
- package/src/server/authenticate/public/appProxy/authenticate.public.app-proxy.doc.ts +55 -0
- package/src/server/authenticate/public/appProxy/authenticate.ts +150 -0
- package/src/server/authenticate/public/appProxy/types.ts +215 -0
- package/src/server/authenticate/public/checkout/authenticate.public.checkout.doc.example.offers.ts +21 -0
- package/src/server/authenticate/public/checkout/authenticate.public.checkout.doc.example.ts +17 -0
- package/src/server/authenticate/public/checkout/authenticate.public.checkout.doc.ts +49 -0
- package/src/server/authenticate/public/checkout/authenticate.ts +13 -0
- package/src/server/authenticate/public/checkout/types.ts +65 -0
- package/src/server/authenticate/public/customer-account/authenticate.public.customerAccount.doc.example.offers.ts +36 -0
- package/src/server/authenticate/public/customer-account/authenticate.public.customerAccount.doc.example.ts +18 -0
- package/src/server/authenticate/public/customer-account/authenticate.public.customerAccount.doc.ts +49 -0
- package/src/server/authenticate/public/customer-account/authenticate.ts +13 -0
- package/src/server/authenticate/public/customer-account/types.ts +65 -0
- package/src/server/authenticate/public/extension/authenticate.ts +54 -0
- package/src/server/authenticate/public/extension/types.ts +11 -0
- package/src/server/authenticate/public/factory.ts +24 -0
- package/src/server/authenticate/public/index.ts +1 -0
- package/src/server/authenticate/public/pos/authenticate.ts +8 -0
- package/src/server/authenticate/public/pos/types.ts +65 -0
- package/src/server/authenticate/public/types.ts +96 -0
- package/src/server/authenticate/webhooks/authenticate.ts +105 -0
- package/src/server/authenticate/webhooks/authenticate.webhooks.doc.example.ts +43 -0
- package/src/server/authenticate/webhooks/authenticate.webhooks.doc.ts +39 -0
- package/src/server/authenticate/webhooks/index.ts +1 -0
- package/src/server/authenticate/webhooks/register.ts +48 -0
- package/src/server/authenticate/webhooks/types.ts +266 -0
- package/src/server/boundary/error.tsx +14 -0
- package/src/server/boundary/headers.ts +15 -0
- package/src/server/boundary/index.ts +39 -0
- package/src/server/boundary/types.ts +4 -0
- package/src/server/clients/admin/authenticate.admin.api.doc.ts +34 -0
- package/src/server/clients/admin/factory.ts +22 -0
- package/src/server/clients/admin/graphql.ts +39 -0
- package/src/server/clients/admin/index.ts +2 -0
- package/src/server/clients/admin/types.ts +120 -0
- package/src/server/clients/index.ts +2 -0
- package/src/server/clients/storefront/authenticate.storefront.api.doc.ts +34 -0
- package/src/server/clients/storefront/factory.ts +32 -0
- package/src/server/clients/storefront/index.ts +2 -0
- package/src/server/clients/storefront/types.ts +78 -0
- package/src/server/clients/types.ts +47 -0
- package/src/server/config-types.ts +309 -0
- package/src/server/errors.ts +3 -0
- package/src/server/future/flags.ts +62 -0
- package/src/server/helpers/create-or-load-offline-session.ts +19 -0
- package/src/server/helpers/ensure-offline-token-is-not-expired.ts +32 -0
- package/src/server/helpers/ensure-valid-offline-session.ts +15 -0
- package/src/server/helpers/index.ts +4 -0
- package/src/server/helpers/refresh-token.ts +35 -0
- package/src/server/index.ts +24 -0
- package/src/server/override-logger.ts +42 -0
- package/src/server/shopify-app.doc.ts +45 -0
- package/src/server/shopify-app.ts +215 -0
- package/src/server/test-helpers/index.ts +1 -0
- package/src/server/test-helpers/test-config.ts +79 -0
- package/src/server/types-contexts.ts +44 -0
- package/src/server/types.ts +507 -0
- package/src/server/unauthenticated/admin/factory.ts +23 -0
- package/src/server/unauthenticated/admin/index.ts +1 -0
- package/src/server/unauthenticated/admin/types.ts +79 -0
- package/src/server/unauthenticated/admin/unauthenticated.admin.doc.ts +40 -0
- package/src/server/unauthenticated/storefront/factory.ts +28 -0
- package/src/server/unauthenticated/storefront/index.ts +1 -0
- package/src/server/unauthenticated/storefront/types.ts +105 -0
- package/src/server/unauthenticated/storefront/unauthenticated.storefront.doc.ts +40 -0
- package/src/server/unauthenticated/types.ts +65 -0
- package/src/server/version.ts +1 -0
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import {Session} from '@shopify/shopify-api';
|
|
2
|
+
|
|
3
|
+
import type {StorefrontContext} from '../../clients';
|
|
4
|
+
|
|
5
|
+
export interface UnauthenticatedStorefrontContext {
|
|
6
|
+
/**
|
|
7
|
+
* The session for the given shop.
|
|
8
|
+
*
|
|
9
|
+
* This comes from the session storage which `shopifyApp` uses to store sessions in your database of choice.
|
|
10
|
+
*
|
|
11
|
+
* This will always be an offline session. You can use this to get shop specific data.
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* <caption>Using the offline session.</caption>
|
|
15
|
+
* <description>Get your app's shop-specific data using the returned offline `session` object.</description>
|
|
16
|
+
* ```ts
|
|
17
|
+
* // app/routes/**\/.ts
|
|
18
|
+
* import { LoaderFunctionArgs, json } from "@remix-run/node";
|
|
19
|
+
* import { unauthenticated } from "../shopify.server";
|
|
20
|
+
* import { getMyAppData } from "~/db/model.server";
|
|
21
|
+
*
|
|
22
|
+
* export const loader = async ({ request }: LoaderFunctionArgs) => {
|
|
23
|
+
* const shop = getShopFromExternalRequest(request);
|
|
24
|
+
* const { session } = await unauthenticated.storefront(shop);
|
|
25
|
+
* return json(await getMyAppData({shop: session.shop));
|
|
26
|
+
* };
|
|
27
|
+
* ```
|
|
28
|
+
*/
|
|
29
|
+
session: Session;
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Method for interacting with the Shopify GraphQL Storefront API for the given store.
|
|
33
|
+
*
|
|
34
|
+
* @example
|
|
35
|
+
* <caption>Querying the GraphQL API.</caption>
|
|
36
|
+
* <description>Use `storefront.graphql` to make query / mutation requests.</description>
|
|
37
|
+
* ```ts
|
|
38
|
+
* // app/routes/**\/.ts
|
|
39
|
+
* import { json } from "@remix-run/node";
|
|
40
|
+
* import { authenticate } from "../shopify.server";
|
|
41
|
+
*
|
|
42
|
+
* export async function action({ request }: ActionFunctionArgs) {
|
|
43
|
+
* const shop = getShopFromExternalRequest(request);
|
|
44
|
+
* const { storefront } = await unauthenticated.storefront(shop);
|
|
45
|
+
*
|
|
46
|
+
* const response = await storefront.graphql(`{blogs(first: 10) { edges { node { id } } } }`);
|
|
47
|
+
*
|
|
48
|
+
* return json(await response.json());
|
|
49
|
+
* }
|
|
50
|
+
* ```
|
|
51
|
+
*
|
|
52
|
+
* @example
|
|
53
|
+
* <caption>Handling GraphQL errors.</caption>
|
|
54
|
+
* <description>Catch `GraphqlQueryError` errors to see error messages from the API.</description>
|
|
55
|
+
* ```ts
|
|
56
|
+
* // /app/routes/**\/*.ts
|
|
57
|
+
* import { ActionFunctionArgs } from "@remix-run/node";
|
|
58
|
+
* import { authenticate } from "../shopify.server";
|
|
59
|
+
*
|
|
60
|
+
* export const action = async ({ request }: ActionFunctionArgs) => {
|
|
61
|
+
* const shop = getShopFromExternalRequest(request);
|
|
62
|
+
* const { storefront } = await unauthenticated.storefront(shop);
|
|
63
|
+
*
|
|
64
|
+
* try {
|
|
65
|
+
* const response = await storefront.graphql(
|
|
66
|
+
* `#graphql
|
|
67
|
+
* query incorrectQuery {
|
|
68
|
+
* products(first: 10) {
|
|
69
|
+
* nodes {
|
|
70
|
+
* not_a_field
|
|
71
|
+
* }
|
|
72
|
+
* }
|
|
73
|
+
* }`,
|
|
74
|
+
* );
|
|
75
|
+
*
|
|
76
|
+
* return json({ data: await response.json() });
|
|
77
|
+
* } catch (error) {
|
|
78
|
+
* if (error instanceof GraphqlQueryError) {
|
|
79
|
+
* // { errors: { graphQLErrors: [
|
|
80
|
+
* // { message: "Field 'not_a_field' doesn't exist on type 'Product'" }
|
|
81
|
+
* // ] } }
|
|
82
|
+
* return json({ errors: error.body?.errors }, { status: 500 });
|
|
83
|
+
* }
|
|
84
|
+
* return json({ message: "An error occurred" }, { status: 500 });
|
|
85
|
+
* }
|
|
86
|
+
* }
|
|
87
|
+
* ```
|
|
88
|
+
*
|
|
89
|
+
* ```ts
|
|
90
|
+
* // /app/shopify.server.ts
|
|
91
|
+
* import { shopifyApp } from "@shopify/shopify-app-remix/server";
|
|
92
|
+
*
|
|
93
|
+
* const shopify = shopifyApp({
|
|
94
|
+
* // ...
|
|
95
|
+
* });
|
|
96
|
+
* export default shopify;
|
|
97
|
+
* export const unauthenticated = shopify.unauthenticated;
|
|
98
|
+
* ```
|
|
99
|
+
*/
|
|
100
|
+
storefront: StorefrontContext;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
export type GetUnauthenticatedStorefrontContext = (
|
|
104
|
+
shop: string,
|
|
105
|
+
) => Promise<UnauthenticatedStorefrontContext>;
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import {ReferenceEntityTemplateSchema} from '@shopify/generate-docs';
|
|
2
|
+
|
|
3
|
+
const data: ReferenceEntityTemplateSchema = {
|
|
4
|
+
name: 'Unauthenticated storefront',
|
|
5
|
+
description: `Allows interacting with the Storefront API when working outside of Shopify requests.
|
|
6
|
+
This enables apps to integrate with 3rd party services and perform background tasks.
|
|
7
|
+
|
|
8
|
+
> Caution:
|
|
9
|
+
> This function doesn't perform **any** validation and shouldn't rely on raw user input.
|
|
10
|
+
|
|
11
|
+
When using this function, consider the following:
|
|
12
|
+
|
|
13
|
+
#### Background tasks
|
|
14
|
+
|
|
15
|
+
Apps should ensure that the shop domain is authenticated when enqueueing jobs.
|
|
16
|
+
|
|
17
|
+
#### 3rd party service requests
|
|
18
|
+
|
|
19
|
+
Apps must obtain the shop domain from the 3rd party service in a secure way.`,
|
|
20
|
+
category: 'Unauthenticated',
|
|
21
|
+
type: 'object',
|
|
22
|
+
isVisualComponent: false,
|
|
23
|
+
definitions: [
|
|
24
|
+
{
|
|
25
|
+
title: 'unauthenticated.storefront',
|
|
26
|
+
description: 'Creates an unauthenticated Storefront context.',
|
|
27
|
+
type: 'GetUnauthenticatedStorefrontContext',
|
|
28
|
+
},
|
|
29
|
+
],
|
|
30
|
+
jsDocTypeExamples: ['UnauthenticatedStorefrontContext'],
|
|
31
|
+
related: [
|
|
32
|
+
{
|
|
33
|
+
name: 'API context',
|
|
34
|
+
subtitle: 'Interact with the Storefront API.',
|
|
35
|
+
url: '/docs/api/shopify-app-remix/apis/storefront-api',
|
|
36
|
+
},
|
|
37
|
+
],
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
export default data;
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import type {GetUnauthenticatedAdminContext} from './admin/types';
|
|
2
|
+
import type {GetUnauthenticatedStorefrontContext} from './storefront/types';
|
|
3
|
+
|
|
4
|
+
export interface Unauthenticated {
|
|
5
|
+
/**
|
|
6
|
+
* Get an admin context by passing a shop
|
|
7
|
+
*
|
|
8
|
+
* **Warning** This should only be used for Requests that do not originate from Shopify.
|
|
9
|
+
* You must do your own authentication before using this method.
|
|
10
|
+
* This method throws an error if there is no session for the shop.
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* <caption>Responding to a request not controlled by Shopify.</caption>
|
|
14
|
+
* ```ts
|
|
15
|
+
* // /app/shopify.server.ts
|
|
16
|
+
* import { ApiVersion, shopifyApp } from "@shopify/shopify-app-remix/server";
|
|
17
|
+
*
|
|
18
|
+
* const shopify = shopifyApp({
|
|
19
|
+
* // ...etc
|
|
20
|
+
* });
|
|
21
|
+
* export default shopify;
|
|
22
|
+
* ```
|
|
23
|
+
* ```ts
|
|
24
|
+
* // /app/routes/**\/*.jsx
|
|
25
|
+
* import { LoaderFunctionArgs, json } from "@remix-run/node";
|
|
26
|
+
* import { authenticateExternal } from "~/helpers/authenticate"
|
|
27
|
+
* import shopify from "../../shopify.server";
|
|
28
|
+
*
|
|
29
|
+
* export async function loader({ request }: LoaderFunctionArgs) {
|
|
30
|
+
* const shop = await authenticateExternal(request)
|
|
31
|
+
* const {admin} = await shopify.unauthenticated.admin(shop);
|
|
32
|
+
* const response = await admin.graphql("{ shop { name} }")
|
|
33
|
+
*
|
|
34
|
+
* return json(await response.json());
|
|
35
|
+
* }
|
|
36
|
+
* ```
|
|
37
|
+
*/
|
|
38
|
+
admin: GetUnauthenticatedAdminContext;
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* Get a storefront context by passing a shop
|
|
42
|
+
*
|
|
43
|
+
* **Warning** This should only be used for Requests that do not originate from Shopify.
|
|
44
|
+
* You must do your own authentication before using this method.
|
|
45
|
+
* This method throws an error if there is no session for the shop.
|
|
46
|
+
*
|
|
47
|
+
* @example
|
|
48
|
+
* <caption>Responding to a request not controlled by Shopify</caption>
|
|
49
|
+
* ```ts
|
|
50
|
+
* // /app/routes/**\/*.jsx
|
|
51
|
+
* import { LoaderFunctionArgs, json } from "@remix-run/node";
|
|
52
|
+
* import { authenticateExternal } from "~/helpers/authenticate"
|
|
53
|
+
* import shopify from "../../shopify.server";
|
|
54
|
+
*
|
|
55
|
+
* export async function loader({ request }: LoaderFunctionArgs) {
|
|
56
|
+
* const shop = await authenticateExternal(request)
|
|
57
|
+
* const {storefront} = await shopify.unauthenticated.storefront(shop);
|
|
58
|
+
* const response = await storefront.graphql(`{blogs(first: 10) { edges { node { id } } } }`);
|
|
59
|
+
*
|
|
60
|
+
* return json(await response.json());
|
|
61
|
+
* }
|
|
62
|
+
* ```
|
|
63
|
+
*/
|
|
64
|
+
storefront: GetUnauthenticatedStorefrontContext;
|
|
65
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export const SHOPIFY_REMIX_LIBRARY_VERSION = '4.2.0';
|