@spree/storefront-api-v2-sdk
Version:
Node module to easily integrate your JavaScript or TypeScript application with Spree API V2. You can create an entirely custom Storefront in JS/TS with this package including one page checkout, Single Page Apps, PWAs and so on
233 lines (203 loc) • 9.5 kB
text/typescript
import Http from '../Http'
import type {
AddItem,
CouponCode,
EstimateShippingMethods,
SetQuantity,
AssociateCart,
ChangeCurrency,
EstimateShippingRates
} from '../interfaces/endpoints/CartClass'
import type {
EstimatedShippingRates,
EstimatedShippingRatesResult,
IEstimatedShippingMethods,
IEstimatedShippingMethodsResult
} from '../interfaces/EstimatedShippingMethod'
import type { IOrder, IOrderResult } from '../interfaces/Order'
import type { NoContentResponse, NoContentResult } from '../interfaces/NoContent'
import type { IQuery } from '../interfaces/Query'
import type { IToken } from '../interfaces/Token'
import routes from '../routes'
import squashAndPreparePositionalArguments from '../helpers/squashAndPreparePositionalArguments'
import type {
AddItemOptions,
ApplyCouponCodeOptions,
AssociateGuestCartOptions,
ChangeCurrencyOptions,
CreateOptions,
EmptyCartOptions,
EstimateShippingRatesOptions,
RemoveAllCouponsOptions,
RemoveCouponCodeOptions,
RemoveItemOptions,
RemoveOptions,
SetQuantityOptions,
ShowOptions
} from '../interfaces/Cart'
export default class Cart extends Http {
public async show(options: ShowOptions): Promise<IOrderResult>
/**
* @deprecated Use the combined options signature instead.
*/
public async show(token: IToken, params?: IQuery): Promise<IOrderResult>
public async show(...allArguments: any[]): Promise<IOrderResult> {
const [tokenOrOptions, positionalParams = {}] = allArguments
const { token, params } = squashAndPreparePositionalArguments([tokenOrOptions, positionalParams], [])
return await this.spreeResponse<IOrder>('get', routes.cartPath(), token, params)
}
public async create(options?: CreateOptions): Promise<IOrderResult>
/**
* @deprecated Use the combined options signature instead.
*/
public async create(token?: IToken, params?: IQuery): Promise<IOrderResult>
public async create(...allArguments: any[]): Promise<IOrderResult> {
const [tokenOrOptions = {}, positionalParams = {}] = allArguments
const { token, params } = squashAndPreparePositionalArguments([tokenOrOptions, positionalParams], [])
return await this.spreeResponse<IOrder>('post', routes.cartPath(), token, params)
}
public async addItem(options: AddItemOptions): Promise<IOrderResult>
/**
* @deprecated Use the combined options signature instead.
*/
public async addItem(token: IToken, params: AddItem): Promise<IOrderResult>
public async addItem(...allArguments: any[]): Promise<IOrderResult> {
const [tokenOrOptions, positionalParams] = allArguments
const { token, params } = squashAndPreparePositionalArguments([tokenOrOptions, positionalParams], [])
return await this.spreeResponse<IOrder>('post', routes.cartAddItemPath(), token, params)
}
public async removeItem(options: RemoveItemOptions): Promise<IOrderResult>
/**
* @deprecated Use the combined options signature instead.
*/
public async removeItem(token: IToken, id: string, params?: IQuery): Promise<IOrderResult>
public async removeItem(...allArguments: any[]): Promise<IOrderResult> {
const [tokenOrOptions, positionalId, positionalParams = {}] = allArguments
const { id, token, params } = squashAndPreparePositionalArguments(
[{ id: positionalId }, tokenOrOptions, positionalParams],
['id']
)
return await this.spreeResponse<IOrder>('delete', routes.cartRemoveItemPath(id), token, params)
}
public async emptyCart(options: EmptyCartOptions): Promise<IOrderResult>
/**
* @deprecated Use the combined options signature instead.
*/
public async emptyCart(token: IToken, params?: IQuery): Promise<IOrderResult>
public async emptyCart(...allArguments: any[]): Promise<IOrderResult> {
const [tokenOrOptions, positionalParams = {}] = allArguments
const { token, params } = squashAndPreparePositionalArguments([tokenOrOptions, positionalParams], [])
return await this.spreeResponse<IOrder>('patch', routes.cartEmptyPath(), token, params)
}
public async remove(options: RemoveOptions): Promise<NoContentResult>
/**
* @deprecated Use the combined options signature instead.
*/
public async remove(token: IToken): Promise<NoContentResult>
public async remove(...allArguments: any[]): Promise<NoContentResult> {
const [tokenOrOptions] = allArguments
const { token, params } = squashAndPreparePositionalArguments([tokenOrOptions], [])
return await this.spreeResponse<NoContentResponse>('delete', routes.cartPath(), token, params)
}
public async setQuantity(options: SetQuantityOptions): Promise<IOrderResult>
/**
* @deprecated Use the combined options signature instead.
*/
public async setQuantity(token: IToken, params: SetQuantity): Promise<IOrderResult>
public async setQuantity(...allArguments: any[]): Promise<IOrderResult> {
const [tokenOrOptions, positionalParams] = allArguments
const { token, params } = squashAndPreparePositionalArguments([tokenOrOptions, positionalParams], [])
return await this.spreeResponse<IOrder>('patch', routes.cartSetItemQuantity(), token, params)
}
public async applyCouponCode(options: ApplyCouponCodeOptions): Promise<IOrderResult>
/**
* @deprecated Use the combined options signature instead.
*/
public async applyCouponCode(token: IToken, params: CouponCode): Promise<IOrderResult>
public async applyCouponCode(...allArguments: any[]): Promise<IOrderResult> {
const [tokenOrOptions, positionalParams] = allArguments
const { token, params } = squashAndPreparePositionalArguments([tokenOrOptions, positionalParams], [])
return await this.spreeResponse<IOrder>('patch', routes.cartApplyCodePath(), token, params)
}
public async removeCouponCode(options: RemoveCouponCodeOptions): Promise<IOrderResult>
/**
* @deprecated Use the combined options signature instead.
*/
public async removeCouponCode(token: IToken, code: string, params?: IQuery): Promise<IOrderResult>
public async removeCouponCode(...allArguments: any[]): Promise<IOrderResult> {
const [tokenOrOptions, positionalCode = null, positionalParams = {}] = allArguments
const { code, token, params } = squashAndPreparePositionalArguments(
[{ code: positionalCode }, tokenOrOptions, positionalParams],
['code']
)
let route: string
if (code) {
route = routes.cartRemoveCodePath(code)
} else {
route = routes.cartRemoveAllCoupons()
}
return await this.spreeResponse<IOrder>('delete', route, token, params)
}
public async removeAllCoupons(options: RemoveAllCouponsOptions): Promise<IOrderResult>
/**
* @deprecated Use the combined options signature instead.
*/
public async removeAllCoupons(token: IToken, params: IQuery): Promise<IOrderResult>
public async removeAllCoupons(...allArguments: any[]): Promise<IOrderResult> {
const [tokenOrOptions, positionalParams] = allArguments
const { token, params } = squashAndPreparePositionalArguments([tokenOrOptions, positionalParams], [])
return await this.spreeResponse<IOrder>('delete', routes.cartRemoveAllCoupons(), token, params)
}
/**
* @deprecated Use {@link estimateShippingRates} instead.
*/
public async estimateShippingMethods(
token: IToken,
params: EstimateShippingMethods
): Promise<IEstimatedShippingMethodsResult> {
return await this.spreeResponse<IEstimatedShippingMethods>(
'get',
routes.cartEstimateShippingMethodsPath(),
token,
params
)
}
public async estimateShippingRates(options: EstimateShippingRatesOptions): Promise<EstimatedShippingRatesResult>
/**
* @deprecated Use the combined options signature instead.
*/
public async estimateShippingRates(
token: IToken,
params: EstimateShippingRates
): Promise<EstimatedShippingRatesResult>
public async estimateShippingRates(...allArguments: any[]): Promise<EstimatedShippingRatesResult> {
const [tokenOrOptions, positionalParams] = allArguments
const { token, params } = squashAndPreparePositionalArguments([tokenOrOptions, positionalParams], [])
return await this.spreeResponse<EstimatedShippingRates>(
'get',
routes.cartEstimateShippingRatesPath(),
token,
params
)
}
public async associateGuestCart(options: AssociateGuestCartOptions): Promise<IOrderResult>
/**
* @deprecated Use the combined options signature instead.
*/
public async associateGuestCart(token: IToken, params: AssociateCart): Promise<IOrderResult>
public async associateGuestCart(...allArguments: any[]): Promise<IOrderResult> {
const [tokenOrOptions, positionalParams] = allArguments
const { token, params } = squashAndPreparePositionalArguments([tokenOrOptions, positionalParams], [])
return await this.spreeResponse<IOrder>('patch', routes.cartAssociatePath(), token, params)
}
public async changeCurrency(options: ChangeCurrencyOptions): Promise<IOrderResult>
/**
* @deprecated Use the combined options signature instead.
*/
public async changeCurrency(token: IToken, params: ChangeCurrency): Promise<IOrderResult>
public async changeCurrency(...allArguments: any[]): Promise<IOrderResult> {
const [tokenOrOptions, positionalParams] = allArguments
const { token, params } = squashAndPreparePositionalArguments([tokenOrOptions, positionalParams], [])
return await this.spreeResponse<IOrder>('patch', routes.cartChangeCurrencyPath(), token, params)
}
}