Shopfront Embedded Bridge Sale API
Base Sale
The Shopfront Embedded Bridge Sale API revolves around a Sale object, this can be obtained and created in multiple ways depending on what you're attempting to do.
The device your embedded application is running on must always be a register in order to use the Sale API.
If you want to modify the current sale that is on the register, you'll want to look at the Current Sale object.
If you want to create an arbitrary sale or find information about sales provided back from Shopfront through the Fulfilment API, you'll want to look at the Sale object.
Both of these objects extend from this BaseSale object. It contains the following methods that can be used to modify
the sale.
getProducts
This will return all products that are currently on the sale. For more information about products,
refer to the SaleProduct section.
Returns
Array<SaleProduct>
getPayments
This will return all payments that are currently on the sale. For more information about payment,
refer to the SalePayment section.
Returns
Array<SalePayment>
getCustomer
This will return the customer that is currently attached to the sale, if there is no customer, it
will return null. For more information on the customer, refer to the SaleCustomer section.
Returns
SaleCustomer | null
getRegister
This will return the ID of the register that is currently attached to the sale. Rarely, there can be a circumstance where there is no register currently attached the sale, this typically happens when you obtain a sale and the user then swaps to no longer being in a register.
Returns
string | undefined
getClientId
This returns the current client ID which is attached to the sale, this ID is not guaranteed to be unique across the
Vendor as integrations can manually specify a client ID. If no client ID is provided for the sale, this will return
null
Returns
string | null
getSaleTotal
This is a shortcut method to obtain the total price for the sale.
Returns
number
getPaidTotal
This is a shortcut method to obtain the total amount of the sale which has already been paid for.
Returns
number
getSavingsTotal
Returns the total amount of savings that the sale has had applied to it.
Returns
number
getDiscountTotal
Returns the total discount that the sale has had applied to it.
Returns
number
getLinkedTo
Get the sale this is linked to, if it is not currently linked to a sale, this will be an empty string.
Returns
string
getRefundReason
Get the reason for providing a refund, if there is no reason, this will be an empty string.
Returns
string
getPriceSet
Determine the current price set which is being used on the sale, if it's the default price set this will be null.
Returns
string | null
getExternalNote
Get the external sale note that is visible to customers.
Returns
string
getInternalNote
Similar to getExternalNote, this returns the internal note that is not visible to customers.
Returns
string
getOrderReference
Get the order reference that is set for this sale, this is visible to customers.
Returns
string
getMetaData
Get the meta data which has been applied to this sale. By default, Shopfront doesn't apply any, but this can be used to attach arbitrary data from integrations to the sale.
Returns
Record<string, unknown>
addProduct
Add a product to the sale, if the sale is the current sale on the sell screen this product will automatically be consolidated into another if the following occurs:
- Another product with the same ID already exists,
- The product is a "normal" product (i.e. not a basket or package),
- The product's price has not been modified,
- The Vendor uses the "consolidate products" setting
| Field | Type | Description |
|---|---|---|
| product | SaleProduct | The product to add |
Returns
Promise<void>
Add Product
import { SaleProduct } from "@shopfront/bridge";
const productToAdd = new SaleProduct("11e6...", 6);
await currentSale.addProduct(productToAdd);
removeProduct
Remove a product from the sale, we would highly suggest passing in a product that has been retrieved
using the getProducts method.
| Field | Type | Description |
|---|---|---|
| product | SaleProduct | The product to remove |
Returns
Promise<void>
Remove Product
const products = currentSale.getProducts();
// Remove the second product line
const productToRemove = products[1];
await currentSale.removeProduct(productToRemove);
addPayment
Add a payment to the sell screen.
If you specify a payment with a status, it will bypass the payment gateway (i.e. it won't request that the user takes money from the customer).
If you don't specify a cashout amount, it will automatically determine if the payment method normally requests cashout (from the payment method settings).
| Field | Type | Description |
|---|---|---|
| payment | SalePayment | The payment to add |
Returns
Promise<void>
Add Payment
import { SalePayment } from "@shopfront/bridge";
const payment = new SalePayment("11e6...", 10.99);
await currentSale.addPayment(payment);
addCustomer
Add a customer to the sale.
If there is already a customer on the sale, this will override that customer.
| Field | Type | Description |
|---|---|---|
| customer | SaleCustomer | The customer to add |
Returns
Promise<void>
Add Customer
import { SaleCustomer } from "@shopfront/bridge";
const customer = new SaleCustomer("11e6...");
await currentSale.addCustomer(customer);
removeCustomer
Remove a customer from the sale.
If there is no customer currently on the sale, this will be ignored.
If there are "on account" or loyalty payments still on the sale, this will be ignored.
Returns
Promise<void>
setExternalNote
Set the external note for the sale (this is visible by the customer).
| Field | Type | Description |
|---|---|---|
| note | string | The note to apply to the sale |
| append | boolean? | Whether to append the note to the current note (defaults to false) |
Returns
Promise<void>
setInternalNote
Set the internal note for the sale.
| Field | Type | Description |
|---|---|---|
| note | string | The note to apply to the sale |
| append | boolean? | Whether to append the note to the current note (defaults to false) |
Returns
Promise<void>
setOrderReference
Set the order reference for the sale (this is visible by the customer).
| Field | Type | Description |
|---|---|---|
| reference | string | The reference to apply to the sale |
Returns
Promise<void>
setMetaData
Set the meta data for the sale, this will override the previous meta data so we would highly suggest merging it with the current meta data in case another integration has already modified the meta data.
| Field | Type | Description |
|---|---|---|
| metaData | Record<string, unknown> | The meta data to apply to the sale |
Returns
Promise<void>
updateProduct
Update a product which already exists on the sale, we would highly suggest passing in a product that has been retrieved
using the getProducts method.
| Field | Type | Description |
|---|---|---|
| product | SaleProduct | The product to add |
Returns
Promise<void>
Sale
This represents an arbitrary sale in Shopfront that may or may not have already been processed. It's guaranteed to not be the current sale which is on the screen (to modify that, see the Current Sale).
Whilst it's currently possible to create sales directly by initializing a new instance of this class, it is not supported and functionality may change in the future without notice. We suggest only using this class when Shopfront passes you the Sale explicitly (such as when the Fulfilment API is used).
It extends the BaseSale object and additionally implements the below methods.
removePayment
Remove a payment from the sale, we would highly suggest passing in a product that has been retrieved
using the getPayments method.
| Field | Type | Description |
|---|---|---|
| payment | SalePayment | The payment to remove |
Returns
Promise<void>
create
Create the sale in Shopfront, this adds the sale to the upload queue and prepares it to be uploaded at a future point, it is not guaranteed that the sale will upload instantly (e.g. the current device may not have internet).
We would highly suggest checking the success return value and looking at the message if the sale was unsuccessful
as it means there was a validation error with the sale.
| Field | Type | Description |
|---|---|---|
| application | Application | The application instance currently in communication with Shopfront |
Returns
Promise<{ success: boolean; message?: string }>
Current Sale
If the device your embedded application is running on is a register, you're able to modify the current sale in progress using the Embedded Sale API.
To get started, you'll want to get the current sale by calling application.getCurrentSale().
This method returns a promise that returns the sale currently on the sell screen (or if your
application isn't embedded on a register then it returns false).
The current sale extends the BaseSale object and additionally implements the below methods
which can be used once the current sale has been obtained.
Sale
import { Bridge } from "@shopfront/bridge";
const application = Bridge.createApplication({
// Your application details...
});
const currentSale = await application.getCurrentSale();
refreshSale
This refreshes the sale to be the latest that exists on the sell screen, it will automatically be called by any method that mutates the sale.
Returns
Promise<void>
cancelSale
Cancel the current sale, this will appear as a cancelled sale in the sales history and will appear in action reports. It will also prevent further mutation of the sale.
Returns
Promise<void>
reversePayment
Reverse a payment on the sell screen. This is used to issue a refund to the customer.
The sale amount for the payment should be a positive figure.
| Field | Type | Description |
|---|---|---|
| payment | SalePayment | The payment to remove |
Returns
Promise<void>
Reverse Payment
const payments = currentSale.getPayments();
// Reverse the first payment
await currentSale.reversePayment(payments[0]);
SaleProduct
The SaleProduct class is a representation of a product from Shopfront's internal sale state.
A SaleProduct will always have an id and a quantity whether created by you or from Shopfront.
Constructor
| Field | Type | Description |
|---|---|---|
| id | string | The ID of the product |
| quantity | number | The quantity of the product |
| price | number? | The price of the product, if not specified it will be automatically calculated |
| indexAddress | Array |
The location of the product on the sell screen |
getId
Get the ID of the product
Returns
string
getMapped
Retrieve the original mapping ID of this product. This is typically only available when using the Fulfilment API.
Returns
string | undefined
getQuantity
Get the quantity of the product
Returns
number
getPrice
Get the price of the product
Returns
number | undefined
getIndexAddress
Get the index address of the product.
This is the internal address of where the product is in the sale. (e.g. if the address is [1, 3] it's the fourth product contained in the second sale line).
Returns
Array<number>
getName
Get the name of the product.
Returns
string | undefined
getType
Get the type of product this is.
Returns
"Normal" | "Basket" | "Package" | "Component" | "Voucher" | undefined
getTaxRateAmount
Get the tax rate amount.
This is the rate of the tax rate (e.g. 10 is a tax rate of 10%).
Returns
number | undefined
getNote
Get the sale note attached to this product.
Returns
string
getContains
Get the products that this product contains.
Returns
Array<SaleProduct>
getEdited
Get whether this product has been "edited".
Typically, being edited just means that the product has been discounted.
Returns
boolean
getCaseQuantity
Get the case quantity for this product.
Returns
number
getMetaData
Get the meta data that has been applied to this product
Returns
Record<string, unknown>
setMetaData
Set a meta data value for the product, this will override any value stored at the provided key if applicable.
| Field | Type | Description |
|---|---|---|
| key | string | The key of the meta data to update |
| value | unknown | The value to update the meta data with |
Note: You can specify
name.display.preandname.display.post(each dot is a nested object) to add additional information onto the receipts, sales history and sell screen
SalePayment
The SalePayment class is a representation of a payment from Shopfront's internal sale state.
A SalePayment will always have an id and an amount whether created by you or from Shopfront.
Constructor
| Field | Type | Description |
|---|---|---|
| id | string | The ID of the payment method |
| amount | number | The amount to be paid on this method |
| cashout | number? | The amount of cash to be paid out from this method (added to the amount). If not provided then it uses the payment methods default cashout setting. |
| status | SalePaymentStatus? | The status of the payment method, if provided it bypasses the payment gateway |
getId
Get the ID of the payment method.
Returns
string
getType
Get the type of payment method this is.
Returns
string
getStatus
Get the status of the payment.
Returns
SalePaymentStatus | undefined
getAmount
Get the value of this payment.
Returns
number
getCashout
Get the cashout amount paid (or to be paid) for this payment.
Returns
number
getRounding
Get the amount of rounding applied to this payment.
Returns
number
SaleCustomer
The SaleCustomer class is a representation of a customer from Shopfront's internal sale state.
A SaleCustomer will always have an id whether created by you or from Shopfront.
Constructor
| Field | Type | Description |
|---|---|---|
| id | string | The ID of the customer |
getId
Get the ID of the customer
Returns
string