import Axios from "axios"; import * as qs from "qs"; /* * XXX: We're copying code from @spree/storefront-api-v2-sdk/src/Http.ts * because we don't know how to mix Typescript :D */ export class Sutty { constructor(host = "http://localhost:3000") { this.host = host; this.axios = Axios.create({ baseURL: this.host, headers: { "Content-Type": "application/json" }, paramsSerializer: (params) => qs.stringify(params, { arrayFormat: "brackets" }), }); } async getCheckoutURL(tokens = {}) { const headers = this.spreeOrderHeaders(tokens); const axiosConfig = { url: "api/v2/storefront/checkout_redirect.json", params: {}, method: "get", headers, }; return await this.axios(axiosConfig); } async assignOrderOwnership(tokens = {}, params = {}) { const headers = this.spreeOrderHeaders(tokens); const axiosConfig = { url: "api/v2/storefront/assign_order_ownership.json", params, method: "post", headers, }; return await this.axios(axiosConfig); } async assignOrderShippingAddress(tokens = {}, params = {}) { const headers = this.spreeOrderHeaders(tokens); const axiosConfig = { url: "api/v2/storefront/assign_order_shipping_address.json", params, method: "post", headers, }; return await this.axios(axiosConfig); } async assignOrderBillingAddress(tokens = {}, params = {}) { const headers = this.spreeOrderHeaders(tokens); const axiosConfig = { url: "api/v2/storefront/assign_order_billing_address.json", params, method: "post", headers, }; return await this.axios(axiosConfig); } spreeOrderHeaders(tokens) { const header = {}; if (tokens.orderToken) { header["X-Spree-Order-Token"] = tokens.orderToken; } if (tokens.bearerToken) { header["Authorization"] = `Bearer ${tokens.bearerToken}`; } return header; } }