lin3s-sylius-shop-api-client
Version:
JavaScript client on top of SyliusShopApiPlugin to build integrations with ease.
142 lines (106 loc) • 3.75 kB
Markdown
# SyliusShopApiClient
JavaScript client on top of [SyliusShopApiPlugin](https://github.com/Sylius/SyliusShopApiPlugin) to build integrations
with ease.
## Installation
**Download the package:**
* Using npm
`$ npm install lin3s-sylius-shop-api-client`
* Using yarn
`$ yarn add lin3s-sylius-shop-api-client`
**Import the client:**
* Using `import`:
`import createSyliusApiClient from 'lin3s-sylius-shop-api-client';`
* Using `require()`:
`const createSyliusApiClient = require('lin3s-sylius-shop-api-client');`
**Initialize the client**
```js
const api = createSyliusApiClient({
baseUrl: 'localhost',
channel: 'default',
cookieDomain: '.myapp.com',
locale: 'en_US',
cartCookieExpiration: 604800000,
userCookieExpiration: 2592000000,
cartTokenCookie: 'cart-token',
})
```
## Usage
For example to use the `productsByTaxonSlug` using the parameters as described in the API docs bellow (`{slug}` =
an object containing slug property and its value):
```js
const products = api.taxon.productsByTaxonSlug({slug: 'some-slug'});
```
**Adding custom endpoints**
In case a new endpoint is created in shop-api you can still use the configuration of the client. Your custom function
will receive the config via parameters and it must return a function. This function has to be passed in the constructor.
An example:
```js
import axios from 'axios';
// You can make use of requestConfig helpers and session values
import createSyliusShopApiClient, {requestConfig} from 'lin3s-sylius-shop-api-client';
const myCustomEndpoint = config => () => new Promise(resolve => {
axios.get(`${config.baseUrl}/shop-api/my-custom-endpoint`)
.then(response => resolve(response.data));
});
const api = createSyliusApiClient({
baseUrl: 'localhost',
channel: 'default',
locale: 'en_US',
customEndpoints: {
myCustomEndpoint
}
});
// Usage
const response = api.custom.myCustomEndpoint();
api.Session.Cart.remove();
```
## API
### Cart `api.cart`
|Method|Params|Status|
|---|---|---|
|**api.cart.pickup**|~|✅|
|**api.cart.summary**|{cartId} (optional)|✅|
|**api.cart.drop**||❌|
|**api.cart.addItem**|{productCode, variantCode, quantity}|✅|
|**api.cart.addItems**|[{productCode, variantCode, quantity}]|❌|
|**api.cart.changeItemQuantity**||✅|
|**api.cart.removeItem**|{orderItemId}|✅|
|**api.cart.estimatedShippingCost**||❌|
|**api.cart.addCoupon**||✅|
|**api.cart.removeCoupon**||✅|
### Checkout `api.checkout`
|Method|Params|Status|
|---|---|---|
|**api.checkout.summary**||❌|
|**api.checkout.address**|{shippingAddress, billingAddress}|✅|
|**api.checkout.chooseShippingMethod**|{shipmentId, methodCode}|✅|
|**api.checkout.choosePaymentMethod**|{paymentId, methodCode}|✅|
|**api.checkout.availableShippingMethods**|~|✅|
|**api.checkout.availablePaymentMethods**|~|✅|
|**api.checkout.complete**|{notes}|✅|
### Product `api.product`
|Method|Params|Status|
|---|---|---|
|**api.product.bySlug**|{slug}|✅|
|**api.product.byCode**||❌|
|**api.product.reviewsBySlug**||❌|
|**api.product.reviewsByCode**||❌|
|**api.product.addReviewBySlug**||❌|
|**api.product.addReviewByCode**||❌|
### Taxon `api.taxon`
|Method|Params|Status|
|---|---|---|
|**api.taxon.all**||✅|
|**api.taxon.byCode**||❌|
|**api.taxon.productsByTaxonCode**||❌|
|**api.taxon.productsByTaxonSlug**|{slug}|✅|
### User `api.user`
|Method|Params|Status|
|---|---|---|
|**api.user.register**|{email, firstname, lastname, plainPassword}|✅|
|**api.user.resendVerificationLink**||❌|
|**api.user.verifyAccount**||❌|
|**api.user.requestPasswordReset**|{email}|✅|
|**api.user.passwordReset**|{password}|✅|
|**api.user.login**|{_username, _password}|✅|
|**api.user.me**|~|✅|