key46-koa-shopify-graphql-proxy
v1.0.1
Published
A wrapper around koa-better-http-proxy which allows easy proxying of graphql requests from an embedded shopify app.
Downloads
5
Readme
@shopify/koa-shopify-graphql-proxy
A wrapper around koa-better-http-proxy which allows easy proxying of graphql requests from an embedded shopify app.
Installation
$ yarn add @shopify/koa-shopify-graphql-proxy
Usage
The module exports a proxy middleware as it's default export. It expects that you have other middleware set up (such as koa-shopify-auth) to authenticate requests with Shopify, and have session data stored on ctx.session
.
Basic
Attaching the middleware will proxy any requests sent to /graphql
on your app to the current logged in shop found in session.
// server/index.js
import koa from 'koa';
import session from 'koa-session';
import createShopifyAuth from '@shopify/koa-shopify-auth';
import proxy from '@shopify/koa-shopify-graphql-proxy';
const app = koa();
app.use(session());
app.use(
createShopifyAuth({
/* your config here */
}),
);
app.use(proxy());
This allows client side scripts to query a logged in merchant's shop without needing to know the users access token.
fetch('/graphql', {credentials: 'include', body: mySerializedGraphQL});
Custom path
If you have your own /graphql
route and don't want to clobber it, you can use a library like (koa-mount
)[https://github.com/koajs/mount] to namespace the middleware.
// server/index
import mount from 'koa-mount';
//....
app.use(mount('/shopify', proxy());
// client/some-component.js
fetch('/shopify/graphql', {credentials: 'include', body: mySerializedGraphQL});
Private app
If you have a private shopify app, you can than skip over the auth step and use this library directly for setting up graphql proxy.
// server/index.js
import koa from 'koa';
import session from 'koa-session';
import proxy from '@shopify/koa-shopify-graphql-proxy';
const app = koa();
app.use(session());
app.use(
proxy({
shop: '<my-shop-name>.myshopify.com',
password: '<your-app-password>',
}),
);