@shopify/shopify-app-remix 2.6.1 → 2.8.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/build/cjs/react/components/AppProvider/AppProvider.js +2 -0
- package/build/cjs/react/components/AppProxyForm/AppProxyForm.js +80 -0
- package/build/cjs/react/components/AppProxyLink/AppProxyLink.js +56 -0
- package/build/cjs/react/components/AppProxyProvider/AppProxyProvider.js +79 -0
- package/build/cjs/react/index.js +7 -0
- package/build/cjs/server/adapters/node/index.js +1 -1
- package/build/cjs/server/authenticate/admin/authenticate.js +1 -5
- package/build/cjs/server/authenticate/admin/strategies/token-exchange.js +1 -1
- package/build/cjs/server/authenticate/fulfillment-service/authenticate.js +70 -0
- package/build/cjs/server/authenticate/helpers/validate-session-token.js +11 -7
- package/build/cjs/server/authenticate/public/appProxy/authenticate.js +49 -20
- package/build/cjs/server/authenticate/public/checkout/authenticate.js +1 -1
- package/build/cjs/server/boundary/index.js +1 -1
- package/build/cjs/server/future/flags.js +28 -0
- package/build/cjs/server/shopify-app.js +9 -4
- package/build/cjs/server/types.js +0 -4
- package/build/cjs/server/version.js +1 -1
- package/build/ts/react/components/AppProvider/AppProvider.d.ts +2 -0
- package/build/ts/react/components/AppProvider/AppProvider.d.ts.map +1 -1
- package/build/ts/react/components/AppProvider/AppProvider.js +2 -0
- package/build/ts/react/components/AppProvider/AppProvider.js.map +1 -1
- package/build/ts/react/components/AppProxyForm/AppProxyForm.d.ts +59 -0
- package/build/ts/react/components/AppProxyForm/AppProxyForm.d.ts.map +1 -0
- package/build/ts/react/components/AppProxyForm/AppProxyForm.doc.d.ts +4 -0
- package/build/ts/react/components/AppProxyForm/AppProxyForm.doc.d.ts.map +1 -0
- package/build/ts/react/components/AppProxyForm/AppProxyForm.doc.js +28 -0
- package/build/ts/react/components/AppProxyForm/AppProxyForm.doc.js.map +1 -0
- package/build/ts/react/components/AppProxyForm/AppProxyForm.js +71 -0
- package/build/ts/react/components/AppProxyForm/AppProxyForm.js.map +1 -0
- package/build/ts/react/components/AppProxyForm/index.d.ts +2 -0
- package/build/ts/react/components/AppProxyForm/index.d.ts.map +1 -0
- package/build/ts/react/components/AppProxyForm/index.js +6 -0
- package/build/ts/react/components/AppProxyForm/index.js.map +1 -0
- package/build/ts/react/components/AppProxyLink/AppProxyLink.d.ts +36 -0
- package/build/ts/react/components/AppProxyLink/AppProxyLink.d.ts.map +1 -0
- package/build/ts/react/components/AppProxyLink/AppProxyLink.doc.d.ts +4 -0
- package/build/ts/react/components/AppProxyLink/AppProxyLink.doc.d.ts.map +1 -0
- package/build/ts/react/components/AppProxyLink/AppProxyLink.doc.js +28 -0
- package/build/ts/react/components/AppProxyLink/AppProxyLink.doc.js.map +1 -0
- package/build/ts/react/components/AppProxyLink/AppProxyLink.js +47 -0
- package/build/ts/react/components/AppProxyLink/AppProxyLink.js.map +1 -0
- package/build/ts/react/components/AppProxyLink/index.d.ts +2 -0
- package/build/ts/react/components/AppProxyLink/index.d.ts.map +1 -0
- package/build/ts/react/components/AppProxyLink/index.js +6 -0
- package/build/ts/react/components/AppProxyLink/index.js.map +1 -0
- package/build/ts/react/components/AppProxyProvider/AppProxyProvider.d.ts +55 -0
- package/build/ts/react/components/AppProxyProvider/AppProxyProvider.d.ts.map +1 -0
- package/build/ts/react/components/AppProxyProvider/AppProxyProvider.doc.d.ts +4 -0
- package/build/ts/react/components/AppProxyProvider/AppProxyProvider.doc.d.ts.map +1 -0
- package/build/ts/react/components/AppProxyProvider/AppProxyProvider.doc.js +40 -0
- package/build/ts/react/components/AppProxyProvider/AppProxyProvider.doc.js.map +1 -0
- package/build/ts/react/components/AppProxyProvider/AppProxyProvider.js +65 -0
- package/build/ts/react/components/AppProxyProvider/AppProxyProvider.js.map +1 -0
- package/build/ts/react/components/AppProxyProvider/index.d.ts +2 -0
- package/build/ts/react/components/AppProxyProvider/index.d.ts.map +1 -0
- package/build/ts/react/components/AppProxyProvider/index.js +7 -0
- package/build/ts/react/components/AppProxyProvider/index.js.map +1 -0
- package/build/ts/react/components/index.d.ts +3 -0
- package/build/ts/react/components/index.d.ts.map +1 -1
- package/build/ts/react/components/index.js +3 -0
- package/build/ts/react/components/index.js.map +1 -1
- package/build/ts/server/__test-helpers/const.d.ts +1 -1
- package/build/ts/server/__test-helpers/test-config.d.ts +1 -1
- package/build/ts/server/authenticate/admin/authenticate.admin.doc.d.ts.map +1 -1
- package/build/ts/server/authenticate/admin/authenticate.admin.doc.js +13 -0
- package/build/ts/server/authenticate/admin/authenticate.admin.doc.js.map +1 -1
- package/build/ts/server/authenticate/admin/authenticate.js +1 -1
- package/build/ts/server/authenticate/admin/authenticate.js.map +1 -1
- package/build/ts/server/authenticate/admin/types.d.ts +27 -27
- package/build/ts/server/authenticate/flow/authenticate.flow.doc.d.ts.map +1 -1
- package/build/ts/server/authenticate/flow/authenticate.flow.doc.js +13 -0
- package/build/ts/server/authenticate/flow/authenticate.flow.doc.js.map +1 -1
- package/build/ts/server/authenticate/flow/types.d.ts +4 -4
- package/build/ts/server/authenticate/fulfillment-service/authenticate.d.ts +5 -0
- package/build/ts/server/authenticate/fulfillment-service/authenticate.d.ts.map +1 -0
- package/build/ts/server/authenticate/fulfillment-service/authenticate.fulfillment-service.doc.d.ts +4 -0
- package/build/ts/server/authenticate/fulfillment-service/authenticate.fulfillment-service.doc.d.ts.map +1 -0
- package/build/ts/server/authenticate/fulfillment-service/authenticate.fulfillment-service.doc.js +46 -0
- package/build/ts/server/authenticate/fulfillment-service/authenticate.fulfillment-service.doc.js.map +1 -0
- package/build/ts/server/authenticate/fulfillment-service/authenticate.js +73 -0
- package/build/ts/server/authenticate/fulfillment-service/authenticate.js.map +1 -0
- package/build/ts/server/authenticate/fulfillment-service/types.d.ts +109 -0
- package/build/ts/server/authenticate/fulfillment-service/types.d.ts.map +1 -0
- package/build/ts/server/authenticate/fulfillment-service/types.js +3 -0
- package/build/ts/server/authenticate/fulfillment-service/types.js.map +1 -0
- package/build/ts/server/authenticate/helpers/validate-session-token.d.ts +1 -1
- package/build/ts/server/authenticate/helpers/validate-session-token.d.ts.map +1 -1
- package/build/ts/server/authenticate/helpers/validate-session-token.js +12 -14
- package/build/ts/server/authenticate/helpers/validate-session-token.js.map +1 -1
- package/build/ts/server/authenticate/public/appProxy/authenticate.d.ts.map +1 -1
- package/build/ts/server/authenticate/public/appProxy/authenticate.js +59 -22
- package/build/ts/server/authenticate/public/appProxy/authenticate.js.map +1 -1
- package/build/ts/server/authenticate/public/appProxy/authenticate.public.app-proxy.doc.d.ts.map +1 -1
- package/build/ts/server/authenticate/public/appProxy/authenticate.public.app-proxy.doc.js +19 -0
- package/build/ts/server/authenticate/public/appProxy/authenticate.public.app-proxy.doc.js.map +1 -1
- package/build/ts/server/authenticate/public/appProxy/types.d.ts +60 -7
- package/build/ts/server/authenticate/public/appProxy/types.d.ts.map +1 -1
- package/build/ts/server/authenticate/public/checkout/authenticate.d.ts.map +1 -1
- package/build/ts/server/authenticate/public/checkout/authenticate.js +1 -3
- package/build/ts/server/authenticate/public/checkout/authenticate.js.map +1 -1
- package/build/ts/server/authenticate/public/checkout/authenticate.public.checkout.doc.d.ts.map +1 -1
- package/build/ts/server/authenticate/public/checkout/authenticate.public.checkout.doc.js +18 -0
- package/build/ts/server/authenticate/public/checkout/authenticate.public.checkout.doc.js.map +1 -1
- package/build/ts/server/authenticate/webhooks/authenticate.webhooks.doc.d.ts.map +1 -1
- package/build/ts/server/authenticate/webhooks/authenticate.webhooks.doc.js +13 -0
- package/build/ts/server/authenticate/webhooks/authenticate.webhooks.doc.js.map +1 -1
- package/build/ts/server/authenticate/webhooks/types.d.ts +13 -14
- package/build/ts/server/authenticate/webhooks/types.d.ts.map +1 -1
- package/build/ts/server/boundary/index.d.ts +1 -1
- package/build/ts/server/boundary/index.js +1 -1
- package/build/ts/server/clients/admin/types.d.ts +85 -14
- package/build/ts/server/clients/admin/types.d.ts.map +1 -1
- package/build/ts/server/clients/storefront/types.d.ts +47 -0
- package/build/ts/server/clients/storefront/types.d.ts.map +1 -1
- package/build/ts/server/clients/types.d.ts +14 -1
- package/build/ts/server/clients/types.d.ts.map +1 -1
- package/build/ts/server/future/flags.d.ts +3 -1
- package/build/ts/server/future/flags.d.ts.map +1 -1
- package/build/ts/server/future/flags.js +20 -0
- package/build/ts/server/future/flags.js.map +1 -1
- package/build/ts/server/shopify-app.d.ts.map +1 -1
- package/build/ts/server/shopify-app.js +5 -1
- package/build/ts/server/shopify-app.js.map +1 -1
- package/build/ts/server/types.d.ts +35 -6
- package/build/ts/server/types.d.ts.map +1 -1
- package/build/ts/server/types.js.map +1 -1
- package/build/ts/server/version.d.ts +1 -1
- package/build/ts/server/version.js +1 -1
- package/package.json +9 -8
|
@@ -31,12 +31,17 @@ export interface AdminApiContext<Resources extends ShopifyRestResources = Shopif
|
|
|
31
31
|
* import { authenticate } from "../shopify.server";
|
|
32
32
|
*
|
|
33
33
|
* export const loader = async ({ request }: LoaderFunctionArgs) => {
|
|
34
|
-
* const {
|
|
35
|
-
*
|
|
34
|
+
* const {
|
|
35
|
+
* admin,
|
|
36
|
+
* session,
|
|
37
|
+
* } = await authenticate.admin(request);
|
|
38
|
+
*
|
|
39
|
+
* return json(
|
|
40
|
+
* admin.rest.resources.Order.count({ session }),
|
|
41
|
+
* );
|
|
36
42
|
* };
|
|
37
43
|
* ```
|
|
38
44
|
*
|
|
39
|
-
*
|
|
40
45
|
* ```ts
|
|
41
46
|
* // /app/shopify.server.ts
|
|
42
47
|
* import { shopifyApp } from "@shopify/shopify-app-remix/server";
|
|
@@ -50,7 +55,6 @@ export interface AdminApiContext<Resources extends ShopifyRestResources = Shopif
|
|
|
50
55
|
* export const authenticate = shopify.authenticate;
|
|
51
56
|
* ```
|
|
52
57
|
*
|
|
53
|
-
*
|
|
54
58
|
* @example
|
|
55
59
|
* <caption>Performing a GET request to the REST API.</caption>
|
|
56
60
|
* <description>Use `admin.rest.get` to make custom requests to make a request to to the `customer/count` endpoint</description>
|
|
@@ -61,9 +65,16 @@ export interface AdminApiContext<Resources extends ShopifyRestResources = Shopif
|
|
|
61
65
|
* import { authenticate } from "../shopify.server";
|
|
62
66
|
*
|
|
63
67
|
* export const loader = async ({ request }: LoaderFunctionArgs) => {
|
|
64
|
-
* const {
|
|
65
|
-
*
|
|
68
|
+
* const {
|
|
69
|
+
* admin,
|
|
70
|
+
* session,
|
|
71
|
+
* } = await authenticate.admin(request);
|
|
72
|
+
*
|
|
73
|
+
* const response = await admin.rest.get({
|
|
74
|
+
* path: "/customers/count.json",
|
|
75
|
+
* });
|
|
66
76
|
* const customers = await response.json();
|
|
77
|
+
*
|
|
67
78
|
* return json({ customers });
|
|
68
79
|
* };
|
|
69
80
|
* ```
|
|
@@ -80,6 +91,7 @@ export interface AdminApiContext<Resources extends ShopifyRestResources = Shopif
|
|
|
80
91
|
* export default shopify;
|
|
81
92
|
* export const authenticate = shopify.authenticate;
|
|
82
93
|
* ```
|
|
94
|
+
*
|
|
83
95
|
* @example
|
|
84
96
|
* <caption>Performing a POST request to the REST API.</caption>
|
|
85
97
|
* <description>Use `admin.rest.post` to make custom requests to make a request to to the `customers.json` endpoint to send a welcome email</description>
|
|
@@ -89,7 +101,11 @@ export interface AdminApiContext<Resources extends ShopifyRestResources = Shopif
|
|
|
89
101
|
* import { authenticate } from "../shopify.server";
|
|
90
102
|
*
|
|
91
103
|
* export const loader = async ({ request }: LoaderFunctionArgs) => {
|
|
92
|
-
* const {
|
|
104
|
+
* const {
|
|
105
|
+
* admin,
|
|
106
|
+
* session,
|
|
107
|
+
* } = await authenticate.admin(request);
|
|
108
|
+
*
|
|
93
109
|
* const response = admin.rest.post({
|
|
94
110
|
* path: "customers/7392136888625/send_invite.json",
|
|
95
111
|
* body: {
|
|
@@ -101,7 +117,8 @@ export interface AdminApiContext<Resources extends ShopifyRestResources = Shopif
|
|
|
101
117
|
* custom_message: "My awesome new store",
|
|
102
118
|
* },
|
|
103
119
|
* },
|
|
104
|
-
*
|
|
120
|
+
* });
|
|
121
|
+
*
|
|
105
122
|
* const customerInvite = await response.json();
|
|
106
123
|
* return json({ customerInvite });
|
|
107
124
|
* };
|
|
@@ -131,10 +148,11 @@ export interface AdminApiContext<Resources extends ShopifyRestResources = Shopif
|
|
|
131
148
|
* <caption>Querying the GraphQL API.</caption>
|
|
132
149
|
* <description>Use `admin.graphql` to make query / mutation requests.</description>
|
|
133
150
|
* ```ts
|
|
151
|
+
* // /app/routes/**\/*.ts
|
|
134
152
|
* import { ActionFunctionArgs } from "@remix-run/node";
|
|
135
153
|
* import { authenticate } from "../shopify.server";
|
|
136
154
|
*
|
|
137
|
-
* export async
|
|
155
|
+
* export const action = async ({ request }: ActionFunctionArgs) => {
|
|
138
156
|
* const { admin } = await authenticate.admin(request);
|
|
139
157
|
*
|
|
140
158
|
* const response = await admin.graphql(
|
|
@@ -146,11 +164,17 @@ export interface AdminApiContext<Resources extends ShopifyRestResources = Shopif
|
|
|
146
164
|
* }
|
|
147
165
|
* }
|
|
148
166
|
* }`,
|
|
149
|
-
* {
|
|
167
|
+
* {
|
|
168
|
+
* variables: {
|
|
169
|
+
* input: { title: "Product Name" },
|
|
170
|
+
* },
|
|
171
|
+
* },
|
|
150
172
|
* );
|
|
151
173
|
*
|
|
152
174
|
* const productData = await response.json();
|
|
153
|
-
* return json({
|
|
175
|
+
* return json({
|
|
176
|
+
* productId: productData.data?.productCreate?.product?.id,
|
|
177
|
+
* });
|
|
154
178
|
* }
|
|
155
179
|
* ```
|
|
156
180
|
*
|
|
@@ -159,11 +183,58 @@ export interface AdminApiContext<Resources extends ShopifyRestResources = Shopif
|
|
|
159
183
|
* import { shopifyApp } from "@shopify/shopify-app-remix/server";
|
|
160
184
|
*
|
|
161
185
|
* const shopify = shopifyApp({
|
|
162
|
-
*
|
|
163
|
-
* // ...etc
|
|
186
|
+
* // ...
|
|
164
187
|
* });
|
|
165
188
|
* export default shopify;
|
|
166
|
-
* export const
|
|
189
|
+
* export const authenticate = shopify.authenticate;
|
|
190
|
+
* ```
|
|
191
|
+
*
|
|
192
|
+
* @example
|
|
193
|
+
* <caption>Handling GraphQL errors.</caption>
|
|
194
|
+
* <description>Catch `GraphqlQueryError` errors to see error messages from the API.</description>
|
|
195
|
+
* ```ts
|
|
196
|
+
* // /app/routes/**\/*.ts
|
|
197
|
+
* import { ActionFunctionArgs } from "@remix-run/node";
|
|
198
|
+
* import { authenticate } from "../shopify.server";
|
|
199
|
+
*
|
|
200
|
+
* export const action = async ({ request }: ActionFunctionArgs) => {
|
|
201
|
+
* const { admin } = await authenticate.admin(request);
|
|
202
|
+
*
|
|
203
|
+
* try {
|
|
204
|
+
* const response = await admin.graphql(
|
|
205
|
+
* `#graphql
|
|
206
|
+
* query incorrectQuery {
|
|
207
|
+
* products(first: 10) {
|
|
208
|
+
* nodes {
|
|
209
|
+
* not_a_field
|
|
210
|
+
* }
|
|
211
|
+
* }
|
|
212
|
+
* }`,
|
|
213
|
+
* );
|
|
214
|
+
*
|
|
215
|
+
* return json({ data: await response.json() });
|
|
216
|
+
* } catch (error) {
|
|
217
|
+
* if (error instanceof GraphqlQueryError) {
|
|
218
|
+
* // error.body.errors:
|
|
219
|
+
* // { graphQLErrors: [
|
|
220
|
+
* // { message: "Field 'not_a_field' doesn't exist on type 'Product'" }
|
|
221
|
+
* // ] }
|
|
222
|
+
* return json({ errors: error.body?.errors }, { status: 500 });
|
|
223
|
+
* }
|
|
224
|
+
* return json({ message: "An error occurred" }, { status: 500 });
|
|
225
|
+
* }
|
|
226
|
+
* }
|
|
227
|
+
* ```
|
|
228
|
+
*
|
|
229
|
+
* ```ts
|
|
230
|
+
* // /app/shopify.server.ts
|
|
231
|
+
* import { shopifyApp } from "@shopify/shopify-app-remix/server";
|
|
232
|
+
*
|
|
233
|
+
* const shopify = shopifyApp({
|
|
234
|
+
* // ...
|
|
235
|
+
* });
|
|
236
|
+
* export default shopify;
|
|
237
|
+
* export const authenticate = shopify.authenticate;
|
|
167
238
|
* ```
|
|
168
239
|
*/
|
|
169
240
|
graphql: GraphQLClient<AdminOperations>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../src/server/clients/admin/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAE,oBAAoB,EAAC,MAAM,sBAAsB,CAAC;AACnE,OAAO,EAAC,eAAe,EAAC,MAAM,2BAA2B,CAAC;AAE1D,OAAO,EAAC,WAAW,EAAC,MAAM,aAAa,CAAC;AACxC,OAAO,EAAC,aAAa,EAAC,MAAM,UAAU,CAAC;AAEvC,OAAO,KAAK,EAAC,uBAAuB,EAAC,MAAM,QAAQ,CAAC;AAEpD,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,WAAW,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;IACjB,iBAAiB,CAAC,EAAE,sBAAsB,CAAC;CAC5C;AAED,MAAM,MAAM,sBAAsB,GAAG,CAAC,GAAG,EAAE;IACzC,KAAK,EAAE,GAAG,CAAC;IACX,MAAM,EAAE,WAAW,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;CAClB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAEpB,MAAM,WAAW,eAAe,CAC9B,SAAS,SAAS,oBAAoB,GAAG,oBAAoB;IAE7D
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../src/server/clients/admin/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAE,oBAAoB,EAAC,MAAM,sBAAsB,CAAC;AACnE,OAAO,EAAC,eAAe,EAAC,MAAM,2BAA2B,CAAC;AAE1D,OAAO,EAAC,WAAW,EAAC,MAAM,aAAa,CAAC;AACxC,OAAO,EAAC,aAAa,EAAC,MAAM,UAAU,CAAC;AAEvC,OAAO,KAAK,EAAC,uBAAuB,EAAC,MAAM,QAAQ,CAAC;AAEpD,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,WAAW,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;IACjB,iBAAiB,CAAC,EAAE,sBAAsB,CAAC;CAC5C;AAED,MAAM,MAAM,sBAAsB,GAAG,CAAC,GAAG,EAAE;IACzC,KAAK,EAAE,GAAG,CAAC;IACX,MAAM,EAAE,WAAW,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;CAClB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAEpB,MAAM,WAAW,eAAe,CAC9B,SAAS,SAAS,oBAAoB,GAAG,oBAAoB;IAE7D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA0HG;IACH,IAAI,EAAE,uBAAuB,CAAC,SAAS,CAAC,CAAC;IAEzC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAkGG;IACH,OAAO,EAAE,aAAa,CAAC,eAAe,CAAC,CAAC;CACzC"}
|
|
@@ -24,6 +24,53 @@ export interface StorefrontContext {
|
|
|
24
24
|
* return json(await response.json());
|
|
25
25
|
* }
|
|
26
26
|
* ```
|
|
27
|
+
*
|
|
28
|
+
* @example
|
|
29
|
+
* <caption>Handling GraphQL errors.</caption>
|
|
30
|
+
* <description>Catch `GraphqlQueryError` errors to see error messages from the API.</description>
|
|
31
|
+
* ```ts
|
|
32
|
+
* // /app/routes/**\/*.ts
|
|
33
|
+
* import { ActionFunctionArgs } from "@remix-run/node";
|
|
34
|
+
* import { authenticate } from "../shopify.server";
|
|
35
|
+
*
|
|
36
|
+
* export const action = async ({ request }: ActionFunctionArgs) => {
|
|
37
|
+
* const { storefront } = await authenticate.public.appProxy(request);
|
|
38
|
+
*
|
|
39
|
+
* try {
|
|
40
|
+
* const response = await storefront.graphql(
|
|
41
|
+
* `#graphql
|
|
42
|
+
* query incorrectQuery {
|
|
43
|
+
* products(first: 10) {
|
|
44
|
+
* nodes {
|
|
45
|
+
* not_a_field
|
|
46
|
+
* }
|
|
47
|
+
* }
|
|
48
|
+
* }`,
|
|
49
|
+
* );
|
|
50
|
+
*
|
|
51
|
+
* return json({ data: await response.json() });
|
|
52
|
+
* } catch (error) {
|
|
53
|
+
* if (error instanceof GraphqlQueryError) {
|
|
54
|
+
* // { errors: { graphQLErrors: [
|
|
55
|
+
* // { message: "Field 'not_a_field' doesn't exist on type 'Product'" }
|
|
56
|
+
* // ] } }
|
|
57
|
+
* return json({ errors: error.body?.errors }, { status: 500 });
|
|
58
|
+
* }
|
|
59
|
+
* return json({ message: "An error occurred" }, { status: 500 });
|
|
60
|
+
* }
|
|
61
|
+
* }
|
|
62
|
+
* ```
|
|
63
|
+
*
|
|
64
|
+
* ```ts
|
|
65
|
+
* // /app/shopify.server.ts
|
|
66
|
+
* import { shopifyApp } from "@shopify/shopify-app-remix/server";
|
|
67
|
+
*
|
|
68
|
+
* const shopify = shopifyApp({
|
|
69
|
+
* // ...
|
|
70
|
+
* });
|
|
71
|
+
* export default shopify;
|
|
72
|
+
* export const authenticate = shopify.authenticate;
|
|
73
|
+
* ```
|
|
27
74
|
*/
|
|
28
75
|
graphql: GraphQLClient<StorefrontOperations>;
|
|
29
76
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../src/server/clients/storefront/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,oBAAoB,EAAC,MAAM,gCAAgC,CAAC;AAEpE,OAAO,EAAC,aAAa,EAAC,MAAM,UAAU,CAAC;AAEvC,MAAM,WAAW,iBAAiB;IAChC
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../src/server/clients/storefront/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,oBAAoB,EAAC,MAAM,gCAAgC,CAAC;AAEpE,OAAO,EAAC,aAAa,EAAC,MAAM,UAAU,CAAC;AAEvC,MAAM,WAAW,iBAAiB;IAChC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAsEG;IACH,OAAO,EAAE,aAAa,CAAC,oBAAoB,CAAC,CAAC;CAC9C"}
|
|
@@ -1,10 +1,23 @@
|
|
|
1
1
|
import type { AllOperations, ReturnData, FetchResponseBody, ApiClientRequestOptions, ResponseWithType } from '@shopify/admin-api-client';
|
|
2
2
|
import { ApiVersion } from '@shopify/shopify-api';
|
|
3
3
|
export interface GraphQLQueryOptions<Operation extends keyof Operations, Operations extends AllOperations> {
|
|
4
|
+
/**
|
|
5
|
+
* The variables to pass to the operation.
|
|
6
|
+
*/
|
|
4
7
|
variables?: ApiClientRequestOptions<Operation, Operations>['variables'];
|
|
8
|
+
/**
|
|
9
|
+
* The version of the API to use for the request.
|
|
10
|
+
*/
|
|
5
11
|
apiVersion?: ApiVersion;
|
|
12
|
+
/**
|
|
13
|
+
* Additional headers to include in the request.
|
|
14
|
+
*/
|
|
6
15
|
headers?: Record<string, any>;
|
|
16
|
+
/**
|
|
17
|
+
* The total number of times to try the request if it fails.
|
|
18
|
+
*/
|
|
7
19
|
tries?: number;
|
|
8
20
|
}
|
|
9
|
-
export type
|
|
21
|
+
export type GraphQLResponse<Operation extends keyof Operations, Operations extends AllOperations> = ResponseWithType<FetchResponseBody<ReturnData<Operation, Operations>>>;
|
|
22
|
+
export type GraphQLClient<Operations extends AllOperations> = <Operation extends keyof Operations>(query: Operation, options?: GraphQLQueryOptions<Operation, Operations>) => Promise<GraphQLResponse<Operation, Operations>>;
|
|
10
23
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/server/clients/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EACb,UAAU,EACV,iBAAiB,EACjB,uBAAuB,EACvB,gBAAgB,EACjB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAC,UAAU,EAAC,MAAM,sBAAsB,CAAC;AAEhD,MAAM,WAAW,mBAAmB,CAClC,SAAS,SAAS,MAAM,UAAU,EAClC,UAAU,SAAS,aAAa;IAEhC,SAAS,CAAC,EAAE,uBAAuB,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC,WAAW,CAAC,CAAC;IACxE,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,MAAM,aAAa,CAAC,UAAU,SAAS,aAAa,IAAI,CAC5D,SAAS,SAAS,MAAM,UAAU,EAElC,KAAK,EAAE,SAAS,EAChB,OAAO,CAAC,EAAE,mBAAmB,CAAC,SAAS,EAAE,UAAU,CAAC,KACjD,OAAO,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/server/clients/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EACb,UAAU,EACV,iBAAiB,EACjB,uBAAuB,EACvB,gBAAgB,EACjB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAC,UAAU,EAAC,MAAM,sBAAsB,CAAC;AAEhD,MAAM,WAAW,mBAAmB,CAClC,SAAS,SAAS,MAAM,UAAU,EAClC,UAAU,SAAS,aAAa;IAEhC;;OAEG;IACH,SAAS,CAAC,EAAE,uBAAuB,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC,WAAW,CAAC,CAAC;IACxE;;OAEG;IACH,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC9B;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,MAAM,eAAe,CACzB,SAAS,SAAS,MAAM,UAAU,EAClC,UAAU,SAAS,aAAa,IAC9B,gBAAgB,CAAC,iBAAiB,CAAC,UAAU,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC;AAE3E,MAAM,MAAM,aAAa,CAAC,UAAU,SAAS,aAAa,IAAI,CAC5D,SAAS,SAAS,MAAM,UAAU,EAElC,KAAK,EAAE,SAAS,EAChB,OAAO,CAAC,EAAE,mBAAmB,CAAC,SAAS,EAAE,UAAU,CAAC,KACjD,OAAO,CAAC,eAAe,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import type { ConfigParams, ShopifyRestResources } from '@shopify/shopify-api';
|
|
1
|
+
import type { ConfigParams, Shopify, ShopifyRestResources } from '@shopify/shopify-api';
|
|
2
|
+
import { AppConfig } from '../config-types';
|
|
2
3
|
export interface FutureFlags {
|
|
3
4
|
/**
|
|
4
5
|
* When enabled, returns the same `admin` context (`AdminApiContext`) from `authenticate.webhook` that is returned from `authenticate.admin`.
|
|
@@ -32,4 +33,5 @@ export interface ApiFutureFlags<Future extends FutureFlagOptions> {
|
|
|
32
33
|
export type ApiConfigWithFutureFlags<Future extends FutureFlagOptions> = ConfigParams<ShopifyRestResources, ApiFutureFlags<Future>>;
|
|
33
34
|
export type FutureFlagOptions = FutureFlags | undefined;
|
|
34
35
|
export type FeatureEnabled<Future extends FutureFlagOptions, Flag extends keyof FutureFlags> = Future extends FutureFlags ? Future[Flag] extends true ? true : false : false;
|
|
36
|
+
export declare function logDisabledFutureFlags(config: AppConfig, logger: Shopify['logger']): void;
|
|
35
37
|
//# sourceMappingURL=flags.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"flags.d.ts","sourceRoot":"","sources":["../../../../src/server/future/flags.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"flags.d.ts","sourceRoot":"","sources":["../../../../src/server/future/flags.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,YAAY,EACZ,OAAO,EACP,oBAAoB,EACrB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAC,SAAS,EAAC,MAAM,iBAAiB,CAAC;AAG1C,MAAM,WAAW,WAAW;IAC1B;;;;OAIG;IACH,sBAAsB,CAAC,EAAE,OAAO,CAAC;IAEjC;;;;OAIG;IACH,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAEhC;;OAEG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAE7B;;;;;;;OAOG;IACH,gCAAgC,CAAC,EAAE,OAAO,CAAC;CAC5C;AAID,MAAM,WAAW,cAAc,CAAC,MAAM,SAAS,iBAAiB;IAC9D,mBAAmB,EAAE,MAAM,SAAS,WAAW,GAC3C,MAAM,CAAC,oBAAoB,CAAC,GAC5B,KAAK,CAAC;CACX;AAED,MAAM,MAAM,wBAAwB,CAAC,MAAM,SAAS,iBAAiB,IACnE,YAAY,CAAC,oBAAoB,EAAE,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC;AAE7D,MAAM,MAAM,iBAAiB,GAAG,WAAW,GAAG,SAAS,CAAC;AAExD,MAAM,MAAM,cAAc,CACxB,MAAM,SAAS,iBAAiB,EAChC,IAAI,SAAS,MAAM,WAAW,IAC5B,MAAM,SAAS,WAAW,GAC1B,MAAM,CAAC,IAAI,CAAC,SAAS,IAAI,GACvB,IAAI,GACJ,KAAK,GACP,KAAK,CAAC;AAEV,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC,QAiC1B"}
|
|
@@ -1,4 +1,24 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
// When adding new flags, you should also add them to the `TEST_FUTURE_FLAGS` object in `test-config.ts` to ensure that
|
|
3
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.logDisabledFutureFlags = void 0;
|
|
5
|
+
function logDisabledFutureFlags(config, logger) {
|
|
6
|
+
var logFlag = function (flag, message) {
|
|
7
|
+
return logger.info("Future flag ".concat(flag, " is disabled.\n\n ").concat(message, "\n"));
|
|
8
|
+
};
|
|
9
|
+
if (!config.future.v3_authenticatePublic) {
|
|
10
|
+
logFlag('v3_authenticatePublic', 'Enable this flag to allow appProxy and checkout in `shopify.authenticate.public`.');
|
|
11
|
+
}
|
|
12
|
+
if (!config.future.v3_lineItemBilling) {
|
|
13
|
+
logFlag('v3_lineItemBilling', 'Enable this flag to allow billing plans with multiple line items.');
|
|
14
|
+
}
|
|
15
|
+
if (!config.future.v3_webhookAdminContext) {
|
|
16
|
+
logFlag('v3_webhookAdminContext', 'Enable this flag to use the standard Admin context when calling `shopify.authenticate.webhook`.');
|
|
17
|
+
}
|
|
18
|
+
if (!config.future.unstable_newEmbeddedAuthStrategy) {
|
|
19
|
+
logFlag('unstable_newEmbeddedAuthStrategy', 'Enable this to use OAuth token exchange instead of auth code to generate API access tokens.' +
|
|
20
|
+
'\n Your app must be using Shopify managed install: https://shopify.dev/docs/apps/auth/installation');
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
exports.logDisabledFutureFlags = logDisabledFutureFlags;
|
|
4
24
|
//# sourceMappingURL=flags.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"flags.js","sourceRoot":"","sources":["../../../../src/server/future/flags.ts"],"names":[],"mappings":";AAAA,uHAAuH"}
|
|
1
|
+
{"version":3,"file":"flags.js","sourceRoot":"","sources":["../../../../src/server/future/flags.ts"],"names":[],"mappings":";AAAA,uHAAuH;;;AAgEvH,SAAgB,sBAAsB,CACpC,MAAiB,EACjB,MAAyB;IAEzB,IAAM,OAAO,GAAG,UAAC,IAAY,EAAE,OAAe;QAC5C,OAAA,MAAM,CAAC,IAAI,CAAC,sBAAe,IAAI,gCAAsB,OAAO,OAAI,CAAC;IAAjE,CAAiE,CAAC;IAEpE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,qBAAqB,EAAE,CAAC;QACzC,OAAO,CACL,uBAAuB,EACvB,mFAAmF,CACpF,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,kBAAkB,EAAE,CAAC;QACtC,OAAO,CACL,oBAAoB,EACpB,mEAAmE,CACpE,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,sBAAsB,EAAE,CAAC;QAC1C,OAAO,CACL,wBAAwB,EACxB,iGAAiG,CAClG,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,gCAAgC,EAAE,CAAC;QACpD,OAAO,CACL,kCAAkC,EAClC,6FAA6F;YAC3F,qGAAqG,CACxG,CAAC;IACJ,CAAC;AACH,CAAC;AAnCD,wDAmCC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shopify-app.d.ts","sourceRoot":"","sources":["../../../src/server/shopify-app.ts"],"names":[],"mappings":"AAAA,OAAO,uCAAuC,CAAC;AAC/C,OAAO,EAIL,oBAAoB,EAErB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAC,cAAc,EAAC,MAAM,sCAAsC,CAAC;AAEpE,OAAO,EAAiB,KAAK,YAAY,EAAC,MAAM,gBAAgB,CAAC;AACjE,OAAO,EAIL,KAAK,UAAU,EAKhB,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"shopify-app.d.ts","sourceRoot":"","sources":["../../../src/server/shopify-app.ts"],"names":[],"mappings":"AAAA,OAAO,uCAAuC,CAAC;AAC/C,OAAO,EAIL,oBAAoB,EAErB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAC,cAAc,EAAC,MAAM,sCAAsC,CAAC;AAEpE,OAAO,EAAiB,KAAK,YAAY,EAAC,MAAM,gBAAgB,CAAC;AACjE,OAAO,EAIL,KAAK,UAAU,EAKhB,MAAM,SAAS,CAAC;AAgBjB,OAAO,EAAC,iBAAiB,EAAyB,MAAM,gBAAgB,CAAC;AAEzE;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,UAAU,CACxB,MAAM,SAAS,YAAY,CAAC,SAAS,EAAE,OAAO,EAAE,MAAM,CAAC,EACvD,SAAS,SAAS,oBAAoB,EACtC,OAAO,SAAS,cAAc,EAC9B,MAAM,SAAS,iBAAiB,GAAG,MAAM,CAAC,QAAQ,CAAC,EACnD,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC,CAqDjD"}
|
|
@@ -19,6 +19,8 @@ var auth_code_flow_1 = require("./authenticate/admin/strategies/auth-code-flow")
|
|
|
19
19
|
var token_exchange_1 = require("./authenticate/admin/strategies/token-exchange");
|
|
20
20
|
var idempotent_promise_handler_1 = require("./authenticate/helpers/idempotent-promise-handler");
|
|
21
21
|
var authenticate_3 = require("./authenticate/flow/authenticate");
|
|
22
|
+
var authenticate_4 = require("./authenticate/fulfillment-service/authenticate");
|
|
23
|
+
var flags_1 = require("./future/flags");
|
|
22
24
|
/**
|
|
23
25
|
* Creates an object your app will use to interact with Shopify.
|
|
24
26
|
*
|
|
@@ -59,6 +61,7 @@ function shopifyApp(appConfig) {
|
|
|
59
61
|
admin: authStrategy,
|
|
60
62
|
flow: (0, authenticate_3.authenticateFlowFactory)(params),
|
|
61
63
|
public: (0, public_1.authenticatePublicFactory)(params),
|
|
64
|
+
fulfillmentService: (0, authenticate_4.authenticateFulfillmentServiceFactory)(params),
|
|
62
65
|
webhook: (0, authenticate_2.authenticateWebhookFactory)(params),
|
|
63
66
|
},
|
|
64
67
|
unauthenticated: {
|
|
@@ -70,6 +73,7 @@ function shopifyApp(appConfig) {
|
|
|
70
73
|
isSingleMerchantApp(shopify, appConfig)) {
|
|
71
74
|
shopify.login = (0, login_1.loginFactory)(params);
|
|
72
75
|
}
|
|
76
|
+
(0, flags_1.logDisabledFutureFlags)(config, logger);
|
|
73
77
|
return shopify;
|
|
74
78
|
}
|
|
75
79
|
exports.shopifyApp = shopifyApp;
|
|
@@ -100,7 +104,7 @@ function deriveApi(appConfig) {
|
|
|
100
104
|
}
|
|
101
105
|
return (0, shopify_api_1.shopifyApi)(tslib_1.__assign(tslib_1.__assign({}, appConfig), { hostName: appUrl.host, hostScheme: appUrl.protocol.replace(':', ''), userAgentPrefix: userAgentPrefix, isEmbeddedApp: (_a = appConfig.isEmbeddedApp) !== null && _a !== void 0 ? _a : true, apiVersion: (_b = appConfig.apiVersion) !== null && _b !== void 0 ? _b : shopify_api_1.LATEST_API_VERSION, isCustomStoreApp: appConfig.distribution === types_1.AppDistribution.ShopifyAdmin, future: {
|
|
102
106
|
v10_lineItemBilling: (_c = appConfig.future) === null || _c === void 0 ? void 0 : _c.v3_lineItemBilling,
|
|
103
|
-
} }));
|
|
107
|
+
}, _logDisabledFutureFlags: false }));
|
|
104
108
|
}
|
|
105
109
|
function deriveConfig(appConfig, apiConfig) {
|
|
106
110
|
var _a, _b, _c, _d;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shopify-app.js","sourceRoot":"","sources":["../../../src/server/shopify-app.ts"],"names":[],"mappings":";;;;AAAA,iDAA+C;AAC/C,oDAM8B;AAI9B,iCASiB;AACjB,qCAAwD;AACxD,oDAAgE;AAChE,kEAAsE;AACtE,qEAAgF;AAChF,qDAAiD;AACjD,kDAAyE;AACzE,oDAAwD;AACxD,iDAA2E;AAC3E,gDAAgE;AAChE,2DAAqF;AACrF,iFAAoF;AACpF,iFAAqF;AACrF,gGAA2F;AAC3F,iEAAyE;
|
|
1
|
+
{"version":3,"file":"shopify-app.js","sourceRoot":"","sources":["../../../src/server/shopify-app.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,23 +7,18 @@ import type { AuthenticateAdmin } from './authenticate/admin/types';
|
|
|
7
7
|
import type { Unauthenticated } from './unauthenticated/types';
|
|
8
8
|
import type { AuthenticateFlow } from './authenticate/flow/types';
|
|
9
9
|
import type { ApiConfigWithFutureFlags, ApiFutureFlags, FutureFlagOptions } from './future/flags';
|
|
10
|
+
import { AuthenticateFulfillmentService } from './authenticate/fulfillment-service/types';
|
|
10
11
|
export interface BasicParams<Future extends FutureFlagOptions = FutureFlagOptions> {
|
|
11
12
|
api: Shopify<ApiConfigWithFutureFlags<Future>, ShopifyRestResources, ApiFutureFlags<Future>>;
|
|
12
13
|
config: AppConfig;
|
|
13
14
|
logger: Shopify['logger'];
|
|
14
15
|
}
|
|
15
|
-
export type JSONValue = string | number | boolean | null | JSONObject | JSONArray;
|
|
16
16
|
export declare enum AppDistribution {
|
|
17
17
|
AppStore = "app_store",
|
|
18
18
|
SingleMerchant = "single_merchant",
|
|
19
19
|
ShopifyAdmin = "shopify_admin"
|
|
20
20
|
}
|
|
21
21
|
export type MandatoryTopics = 'CUSTOMERS_DATA_REQUEST' | 'CUSTOMERS_REDACT' | 'SHOP_REDACT';
|
|
22
|
-
interface JSONObject {
|
|
23
|
-
[x: string]: JSONValue;
|
|
24
|
-
}
|
|
25
|
-
interface JSONArray extends Array<JSONValue> {
|
|
26
|
-
}
|
|
27
22
|
type RegisterWebhooks = (options: RegisterWebhooksOptions) => Promise<RegisterReturn | void>;
|
|
28
23
|
export declare enum LoginErrorType {
|
|
29
24
|
MissingShop = "MISSING_SHOP",
|
|
@@ -109,6 +104,40 @@ interface Authenticate<Config extends AppConfigArg> {
|
|
|
109
104
|
* ```
|
|
110
105
|
*/
|
|
111
106
|
flow: AuthenticateFlow<RestResourcesType<Config>>;
|
|
107
|
+
/**
|
|
108
|
+
* Authenticate a request from a fulfillment service and get back an authenticated context.
|
|
109
|
+
*
|
|
110
|
+
* @example
|
|
111
|
+
* <caption>Shopify session for the fulfillment service request.</caption>
|
|
112
|
+
* <description>Use the session associated with this request to use the Admin GraphQL API </description>
|
|
113
|
+
* ```ts
|
|
114
|
+
* // /app/routes/fulfillment_order_notification.ts
|
|
115
|
+
* import { ActionFunctionArgs } from "@remix-run/node";
|
|
116
|
+
* import { authenticate } from "../shopify.server";
|
|
117
|
+
*
|
|
118
|
+
* export async function action({ request }: ActionFunctionArgs) {
|
|
119
|
+
* const { admin } = await authenticate.fulfillmentService(request);
|
|
120
|
+
*
|
|
121
|
+
* const response = await admin.graphql(
|
|
122
|
+
* `#graphql
|
|
123
|
+
* mutation acceptFulfillmentRequest {
|
|
124
|
+
* fulfillmentOrderAcceptFulfillmentRequest(
|
|
125
|
+
* id: "gid://shopify/FulfillmentOrder/5014440902678",
|
|
126
|
+
* message: "Reminder that tomorrow is a holiday. We won't be able to ship this until Monday."){
|
|
127
|
+
* fulfillmentOrder {
|
|
128
|
+
* status
|
|
129
|
+
* requestStatus
|
|
130
|
+
* }
|
|
131
|
+
* }
|
|
132
|
+
* }
|
|
133
|
+
* );
|
|
134
|
+
*
|
|
135
|
+
* const productData = await response.json();
|
|
136
|
+
* return json({ data: productData.data });
|
|
137
|
+
* }
|
|
138
|
+
* ```
|
|
139
|
+
* */
|
|
140
|
+
fulfillmentService: AuthenticateFulfillmentService<RestResourcesType<Config>>;
|
|
112
141
|
/**
|
|
113
142
|
* Authenticate a public request and get back a session token.
|
|
114
143
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/server/types.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,OAAO,EACP,oBAAoB,EACrB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAC,cAAc,EAAC,MAAM,sCAAsC,CAAC;AAEpE,OAAO,KAAK,EAAC,SAAS,EAAE,YAAY,EAAC,MAAM,gBAAgB,CAAC;AAC5D,OAAO,KAAK,EACV,mBAAmB,EACnB,uBAAuB,EACxB,MAAM,+BAA+B,CAAC;AACvC,OAAO,KAAK,EAAC,kBAAkB,EAAC,MAAM,6BAA6B,CAAC;AACpE,OAAO,KAAK,EAAC,iBAAiB,EAAC,MAAM,4BAA4B,CAAC;AAClE,OAAO,KAAK,EAAC,eAAe,EAAC,MAAM,yBAAyB,CAAC;AAC7D,OAAO,KAAK,EAAC,gBAAgB,EAAC,MAAM,2BAA2B,CAAC;AAChE,OAAO,KAAK,EACV,wBAAwB,EACxB,cAAc,EACd,iBAAiB,EAClB,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/server/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/server/types.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/server/types.ts"],"names":[],"mappings":";;;AAmCA,+CAA+C;AAC/C,sFAAsF;AACtF,IAAY,eAIX;AAJD,WAAY,eAAe;IACzB,yCAAsB,CAAA;IACtB,qDAAkC,CAAA;IAClC,iDAA8B,CAAA;AAChC,CAAC,EAJW,eAAe,+BAAf,eAAe,QAI1B;AAWD,IAAY,cAGX;AAHD,WAAY,cAAc;IACxB,8CAA4B,CAAA;IAC5B,8CAA4B,CAAA;AAC9B,CAAC,EAHW,cAAc,8BAAd,cAAc,QAGzB"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const SHOPIFY_REMIX_LIBRARY_VERSION = "2.
|
|
1
|
+
export declare const SHOPIFY_REMIX_LIBRARY_VERSION = "2.8.0";
|
|
2
2
|
//# sourceMappingURL=version.d.ts.map
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@shopify/shopify-app-remix",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.8.0",
|
|
4
4
|
"description": "Shopify Remix - to simplify the building of Shopify Apps with Remix",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -50,25 +50,26 @@
|
|
|
50
50
|
"Storefront API"
|
|
51
51
|
],
|
|
52
52
|
"devDependencies": {
|
|
53
|
-
"@remix-run/react": "^2.
|
|
54
|
-
"@shopify/generate-docs": "^0.13.
|
|
53
|
+
"@remix-run/react": "^2.8.1",
|
|
54
|
+
"@shopify/generate-docs": "^0.13.2",
|
|
55
55
|
"@shopify/polaris": "^12.18.0",
|
|
56
56
|
"@shopify/react-testing": "^5.1.3",
|
|
57
|
-
"@shopify/shopify-app-session-storage-memory": "^3.0.
|
|
57
|
+
"@shopify/shopify-app-session-storage-memory": "^3.0.3",
|
|
58
58
|
"@types/jsonwebtoken": "^9.0.5",
|
|
59
59
|
"@types/react": "^18.2.18",
|
|
60
|
-
"@types/semver": "^7.5.
|
|
60
|
+
"@types/semver": "^7.5.8",
|
|
61
61
|
"jest-fetch-mock": "^3.0.3",
|
|
62
62
|
"jsonwebtoken": "^9.0.2",
|
|
63
63
|
"react": "^18.2.0",
|
|
64
|
-
"react-dom": "^18.2.0"
|
|
64
|
+
"react-dom": "^18.2.0",
|
|
65
|
+
"react-router-dom": "^6.22.3"
|
|
65
66
|
},
|
|
66
67
|
"dependencies": {
|
|
67
68
|
"@remix-run/node": "^2.6.0",
|
|
68
69
|
"@remix-run/server-runtime": "^2.5.1",
|
|
69
70
|
"@shopify/admin-api-client": "^0.2.3",
|
|
70
|
-
"@shopify/shopify-api": "^9.
|
|
71
|
-
"@shopify/shopify-app-session-storage": "^2.1.
|
|
71
|
+
"@shopify/shopify-api": "^9.7.1",
|
|
72
|
+
"@shopify/shopify-app-session-storage": "^2.1.3",
|
|
72
73
|
"@shopify/storefront-api-client": "^0.2.3",
|
|
73
74
|
"isbot": "^3.7.1",
|
|
74
75
|
"semver": "^7.6.0"
|