@final-commerce/command-frame 0.8.0-online.4 → 0.8.0-online.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/CommonTypes.d.ts +14 -0
- package/dist/actions/attach-checkout-contact/action.d.ts +6 -0
- package/dist/actions/attach-checkout-contact/action.js +8 -0
- package/dist/actions/attach-checkout-contact/mock.d.ts +15 -0
- package/dist/actions/attach-checkout-contact/mock.js +22 -0
- package/dist/actions/attach-checkout-contact/types.d.ts +35 -0
- package/dist/actions/attach-checkout-contact/types.js +16 -0
- package/dist/actions/get-outlets/action.js +2 -2
- package/dist/actions/get-outlets/mock.d.ts +12 -0
- package/dist/actions/get-outlets/mock.js +28 -4
- package/dist/actions/get-outlets/types.d.ts +19 -1
- package/dist/actions/set-outlet/action.d.ts +6 -0
- package/dist/actions/set-outlet/action.js +8 -0
- package/dist/actions/set-outlet/mock.d.ts +13 -0
- package/dist/actions/set-outlet/mock.js +24 -0
- package/dist/actions/set-outlet/types.d.ts +31 -0
- package/dist/actions/set-outlet/types.js +21 -0
- package/dist/actions/start-checkout/mock.d.ts +1 -1
- package/dist/actions/start-checkout/mock.js +4 -4
- package/dist/actions/start-checkout/types.d.ts +10 -1
- package/dist/index.d.ts +5 -1
- package/dist/index.js +4 -0
- package/dist/projects/render/mocks.js +6 -0
- package/dist/projects/render/types.d.ts +4 -1
- package/package.json +1 -1
package/dist/CommonTypes.d.ts
CHANGED
|
@@ -156,9 +156,23 @@ export interface CFOutletInfo {
|
|
|
156
156
|
state?: string;
|
|
157
157
|
postCode?: string;
|
|
158
158
|
};
|
|
159
|
+
address2?: string;
|
|
159
160
|
city?: string;
|
|
160
161
|
state?: string;
|
|
161
162
|
country?: string;
|
|
163
|
+
postCode?: string;
|
|
164
|
+
phone?: string;
|
|
165
|
+
/** Short display alias, when the merchant set one (e.g. `DTWN`). */
|
|
166
|
+
alias?: string;
|
|
167
|
+
/**
|
|
168
|
+
* Whether this location can take an ONLINE payment. Storefront only — it is
|
|
169
|
+
* absent on a register, where it has no meaning.
|
|
170
|
+
*
|
|
171
|
+
* `false` means the outlet has no completed payment connection, so starting a
|
|
172
|
+
* checkout against it WILL fail. A pickup picker must not offer it as a
|
|
173
|
+
* selectable location, or must show it as unavailable.
|
|
174
|
+
*/
|
|
175
|
+
connected?: boolean;
|
|
162
176
|
}
|
|
163
177
|
export interface CFContextManage {
|
|
164
178
|
user: unknown;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Attach Checkout Contact action
|
|
3
|
+
* Calls the attachCheckoutContact action on the parent window
|
|
4
|
+
*/
|
|
5
|
+
import { commandFrameClient } from '../../client';
|
|
6
|
+
export const attachCheckoutContact = async (params) => {
|
|
7
|
+
return await commandFrameClient.call('attachCheckoutContact', params);
|
|
8
|
+
};
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { AttachCheckoutContact } from './types';
|
|
2
|
+
/**
|
|
3
|
+
* Standalone mock of attaching contact to an online order.
|
|
4
|
+
*
|
|
5
|
+
* It mirrors the one REFUSAL the real command makes — a missing email — because
|
|
6
|
+
* that is the mistake a builder actually hits, and a mock that accepted anything
|
|
7
|
+
* would let a checkout screen look finished and lose receipts on the published
|
|
8
|
+
* site.
|
|
9
|
+
*
|
|
10
|
+
* It does NOT mirror "no order to attach to". The real command answers
|
|
11
|
+
* `attached: false` there rather than throwing, precisely so a flow can call it
|
|
12
|
+
* optimistically and still let the shopper pay; the mock always has a checkout
|
|
13
|
+
* to attach to, so it reports `true`.
|
|
14
|
+
*/
|
|
15
|
+
export declare const mockAttachCheckoutContact: AttachCheckoutContact;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Standalone mock of attaching contact to an online order.
|
|
3
|
+
*
|
|
4
|
+
* It mirrors the one REFUSAL the real command makes — a missing email — because
|
|
5
|
+
* that is the mistake a builder actually hits, and a mock that accepted anything
|
|
6
|
+
* would let a checkout screen look finished and lose receipts on the published
|
|
7
|
+
* site.
|
|
8
|
+
*
|
|
9
|
+
* It does NOT mirror "no order to attach to". The real command answers
|
|
10
|
+
* `attached: false` there rather than throwing, precisely so a flow can call it
|
|
11
|
+
* optimistically and still let the shopper pay; the mock always has a checkout
|
|
12
|
+
* to attach to, so it reports `true`.
|
|
13
|
+
*/
|
|
14
|
+
export const mockAttachCheckoutContact = async (params) => {
|
|
15
|
+
console.log('[Mock] attachCheckoutContact called', params);
|
|
16
|
+
if (!params)
|
|
17
|
+
throw new Error('Params required');
|
|
18
|
+
if (!params.email || !params.email.trim()) {
|
|
19
|
+
throw new Error('attachCheckoutContact: email is required — it is where the receipt goes');
|
|
20
|
+
}
|
|
21
|
+
return { attached: true, timestamp: new Date().toISOString() };
|
|
22
|
+
};
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Guest contact for the order. There is no shopper account, so this is the only
|
|
3
|
+
* way to reach them — `email` is where the receipt goes and is required.
|
|
4
|
+
*/
|
|
5
|
+
export interface AttachCheckoutContactParams {
|
|
6
|
+
email: string;
|
|
7
|
+
name?: string;
|
|
8
|
+
phone?: string;
|
|
9
|
+
/** Defaults to the outlet the storefront booted against. */
|
|
10
|
+
outletId?: string;
|
|
11
|
+
}
|
|
12
|
+
export interface AttachCheckoutContactResponse {
|
|
13
|
+
/**
|
|
14
|
+
* `false` means there was nothing to attach to — no checkout had been started
|
|
15
|
+
* for this cart. It is NOT a failure to record the contact on an order that
|
|
16
|
+
* exists, and it never means the shopper was charged.
|
|
17
|
+
*/
|
|
18
|
+
attached: boolean;
|
|
19
|
+
timestamp: string;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Put the shopper's contact on the order `startCheckout` already created.
|
|
23
|
+
*
|
|
24
|
+
* Call it BEFORE paying, whenever the email is known — on blur, on submit, or
|
|
25
|
+
* as the shopper leaves the contact step. It reuses the order's idempotency
|
|
26
|
+
* key, so it updates that order rather than creating a second one.
|
|
27
|
+
*
|
|
28
|
+
* SAFE TO CALL TWICE. The server only ever ADDS contact to an order that has
|
|
29
|
+
* none, so a later call cannot redirect a receipt that was already addressed.
|
|
30
|
+
*
|
|
31
|
+
* NEVER THROWS FOR A MISSING ORDER. Failing to record an email must not stop a
|
|
32
|
+
* payment the shopper is trying to make, so the caller gets `attached: false`
|
|
33
|
+
* and can carry on to pay.
|
|
34
|
+
*/
|
|
35
|
+
export type AttachCheckoutContact = (params: AttachCheckoutContactParams) => Promise<AttachCheckoutContactResponse>;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
// Attach Checkout Contact Types
|
|
2
|
+
//
|
|
3
|
+
// The second half of the online checkout. `startCheckout` creates the order and
|
|
4
|
+
// mounts the payment fields the moment a shopper ARRIVES; this puts their email
|
|
5
|
+
// on that same order once they have typed it.
|
|
6
|
+
//
|
|
7
|
+
// WHY THESE ARE TWO COMMANDS. The card fields cannot render without a payment
|
|
8
|
+
// session, a session needs a server-priced amount, and an amount needs an order.
|
|
9
|
+
// So the order has to exist before the shopper has typed anything. Demanding an
|
|
10
|
+
// email first is what forced the old "fill the form, then see the card fields"
|
|
11
|
+
// checkout — and it also meant every cart edit minted a NEW order, because the
|
|
12
|
+
// idempotency key moved with the cart.
|
|
13
|
+
//
|
|
14
|
+
// Served ONLY by the storefront runtime (a published website), like
|
|
15
|
+
// `startCheckout` itself. On a register it does not exist.
|
|
16
|
+
export {};
|
|
@@ -1,2 +1,14 @@
|
|
|
1
1
|
import { GetOutlets } from "./types";
|
|
2
|
+
/**
|
|
3
|
+
* A second location that CANNOT take an online payment.
|
|
4
|
+
*
|
|
5
|
+
* The shared demo data has exactly one outlet, so without this a pickup picker
|
|
6
|
+
* built against mocks would never render the case that matters: an outlet a
|
|
7
|
+
* shopper must not be allowed to check out against. `setOutlet` refuses this id,
|
|
8
|
+
* so the two mocks tell the same story.
|
|
9
|
+
*
|
|
10
|
+
* Mock-only, and deliberately NOT added to `MOCK_OUTLETS` — that array is shared
|
|
11
|
+
* with every other outlet mock and `MOCK_OUTLET`.
|
|
12
|
+
*/
|
|
13
|
+
export declare const MOCK_UNCONNECTED_OUTLET_ID = "outlet-mock-unconnected";
|
|
2
14
|
export declare const mockGetOutlets: GetOutlets;
|
|
@@ -1,16 +1,40 @@
|
|
|
1
1
|
import { MOCK_OUTLETS, safeSerialize } from "../../demo/database";
|
|
2
|
-
|
|
3
|
-
|
|
2
|
+
/**
|
|
3
|
+
* A second location that CANNOT take an online payment.
|
|
4
|
+
*
|
|
5
|
+
* The shared demo data has exactly one outlet, so without this a pickup picker
|
|
6
|
+
* built against mocks would never render the case that matters: an outlet a
|
|
7
|
+
* shopper must not be allowed to check out against. `setOutlet` refuses this id,
|
|
8
|
+
* so the two mocks tell the same story.
|
|
9
|
+
*
|
|
10
|
+
* Mock-only, and deliberately NOT added to `MOCK_OUTLETS` — that array is shared
|
|
11
|
+
* with every other outlet mock and `MOCK_OUTLET`.
|
|
12
|
+
*/
|
|
13
|
+
export const MOCK_UNCONNECTED_OUTLET_ID = "outlet-mock-unconnected";
|
|
14
|
+
const UNCONNECTED_OUTLET = {
|
|
15
|
+
_id: MOCK_UNCONNECTED_OUTLET_ID,
|
|
16
|
+
name: "Airport (not connected)",
|
|
17
|
+
address: "2 Terminal Road",
|
|
18
|
+
city: "San Francisco",
|
|
19
|
+
state: "CA",
|
|
20
|
+
country: "US",
|
|
21
|
+
postCode: "94128",
|
|
22
|
+
connected: false
|
|
23
|
+
};
|
|
24
|
+
export const mockGetOutlets = async (params) => {
|
|
25
|
+
console.log("[Mock] getOutlets called", params);
|
|
4
26
|
const outlets = safeSerialize(MOCK_OUTLETS).map((o) => ({
|
|
5
27
|
_id: o._id || o.id,
|
|
6
28
|
name: o.name || "",
|
|
7
29
|
address: o.address,
|
|
8
30
|
city: o.city,
|
|
9
31
|
state: o.state,
|
|
10
|
-
country: o.country
|
|
32
|
+
country: o.country,
|
|
33
|
+
connected: true
|
|
11
34
|
}));
|
|
35
|
+
const all = [...outlets, UNCONNECTED_OUTLET];
|
|
12
36
|
return {
|
|
13
|
-
outlets,
|
|
37
|
+
outlets: params?.connectedOnly ? all.filter((o) => o.connected) : all,
|
|
14
38
|
timestamp: new Date().toISOString()
|
|
15
39
|
};
|
|
16
40
|
};
|
|
@@ -1,6 +1,24 @@
|
|
|
1
1
|
import { CFOutletInfo } from "../../CommonTypes";
|
|
2
|
+
export interface GetOutletsParams {
|
|
3
|
+
/**
|
|
4
|
+
* Return only locations that can take an online payment. Storefront only.
|
|
5
|
+
* Default `false`, so a flow sees every outlet and decides how to present
|
|
6
|
+
* the ones it cannot sell from.
|
|
7
|
+
*/
|
|
8
|
+
connectedOnly?: boolean;
|
|
9
|
+
}
|
|
2
10
|
export interface GetOutletsResponse {
|
|
3
11
|
outlets: CFOutletInfo[];
|
|
4
12
|
timestamp: string;
|
|
5
13
|
}
|
|
6
|
-
|
|
14
|
+
/**
|
|
15
|
+
* List the company's outlets.
|
|
16
|
+
*
|
|
17
|
+
* ON A STOREFRONT this is the pickup picker's source. Each outlet carries
|
|
18
|
+
* `connected`, and an outlet with `connected: false` cannot take a payment, so
|
|
19
|
+
* `setOutlet` refuses it — filter those out rather than relying on the refusal.
|
|
20
|
+
*
|
|
21
|
+
* There are no coordinates on an outlet, so "closest branch" is not something
|
|
22
|
+
* this can answer; sort on the address fields or let the shopper choose.
|
|
23
|
+
*/
|
|
24
|
+
export type GetOutlets = (params?: GetOutletsParams) => Promise<GetOutletsResponse>;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { SetOutlet } from './types';
|
|
2
|
+
/**
|
|
3
|
+
* Standalone mock of switching location.
|
|
4
|
+
*
|
|
5
|
+
* It mirrors the two REFUSALS the real command makes — a missing id, and an
|
|
6
|
+
* outlet that cannot take a payment — because those are the mistakes a builder
|
|
7
|
+
* actually hits. A mock that accepted anything would let a location picker look
|
|
8
|
+
* finished and then strand a shopper at a dead payment step on the real site.
|
|
9
|
+
*
|
|
10
|
+
* The unconnected id comes from the `getOutlets` mock rather than being repeated
|
|
11
|
+
* here, so the two cannot drift into telling different stories.
|
|
12
|
+
*/
|
|
13
|
+
export declare const mockSetOutlet: SetOutlet;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { MOCK_UNCONNECTED_OUTLET_ID } from '../get-outlets/mock';
|
|
2
|
+
/**
|
|
3
|
+
* Standalone mock of switching location.
|
|
4
|
+
*
|
|
5
|
+
* It mirrors the two REFUSALS the real command makes — a missing id, and an
|
|
6
|
+
* outlet that cannot take a payment — because those are the mistakes a builder
|
|
7
|
+
* actually hits. A mock that accepted anything would let a location picker look
|
|
8
|
+
* finished and then strand a shopper at a dead payment step on the real site.
|
|
9
|
+
*
|
|
10
|
+
* The unconnected id comes from the `getOutlets` mock rather than being repeated
|
|
11
|
+
* here, so the two cannot drift into telling different stories.
|
|
12
|
+
*/
|
|
13
|
+
export const mockSetOutlet = async (params) => {
|
|
14
|
+
console.log('[Mock] setOutlet called', params);
|
|
15
|
+
if (!params)
|
|
16
|
+
throw new Error('Params required');
|
|
17
|
+
if (!params.outletId || !params.outletId.trim()) {
|
|
18
|
+
throw new Error('setOutlet: outletId is required');
|
|
19
|
+
}
|
|
20
|
+
if (params.outletId === MOCK_UNCONNECTED_OUTLET_ID) {
|
|
21
|
+
throw new Error(`setOutlet: outlet ${params.outletId} cannot take an online payment — offer only outlets with connected: true`);
|
|
22
|
+
}
|
|
23
|
+
return { outletId: params.outletId, rehydrated: true, timestamp: new Date().toISOString() };
|
|
24
|
+
};
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
export interface SetOutletParams {
|
|
2
|
+
/** An `id` from `getOutlets`. */
|
|
3
|
+
outletId: string;
|
|
4
|
+
}
|
|
5
|
+
export interface SetOutletResponse {
|
|
6
|
+
/** The location now in effect. */
|
|
7
|
+
outletId: string;
|
|
8
|
+
/**
|
|
9
|
+
* `true` when the catalog and tax tables were re-pulled for this location.
|
|
10
|
+
*
|
|
11
|
+
* `false` means the switch took effect but the refresh could not reach the
|
|
12
|
+
* server — the shop is running on what it already had cached. Totals may be
|
|
13
|
+
* the previous location's until the next refresh pass lands, so a flow can
|
|
14
|
+
* tell the shopper to try again rather than quietly showing stale tax.
|
|
15
|
+
*/
|
|
16
|
+
rehydrated: boolean;
|
|
17
|
+
timestamp: string;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Switch the shop to another of the company's locations.
|
|
21
|
+
*
|
|
22
|
+
* REFUSES AN OUTLET THAT CANNOT TAKE A PAYMENT, and one that does not belong to
|
|
23
|
+
* this company, rather than letting either fail later at the payment step. Check
|
|
24
|
+
* `connected` from `getOutlets` and do not offer those, so this refusal is a
|
|
25
|
+
* backstop rather than something a shopper ever sees.
|
|
26
|
+
*
|
|
27
|
+
* The cart survives the switch. Its lines are kept and re-priced; a line that is
|
|
28
|
+
* not purchasable at the new location is not silently dropped here, it is
|
|
29
|
+
* reported when the checkout is next priced.
|
|
30
|
+
*/
|
|
31
|
+
export type SetOutlet = (params: SetOutletParams) => Promise<SetOutletResponse>;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
// Set Outlet Types
|
|
2
|
+
//
|
|
3
|
+
// Choose which of the company's locations this shop is ordering from.
|
|
4
|
+
//
|
|
5
|
+
// WHAT IT ACTUALLY CHANGES. An outlet decides three things, and a shop that lets
|
|
6
|
+
// a shopper pick one has to move all three together:
|
|
7
|
+
//
|
|
8
|
+
// tax rates follow the outlet's own address, so the total moves
|
|
9
|
+
// availability stock is counted per location, and a product can be hidden at one
|
|
10
|
+
// fulfilment the order records where the goods come from, so the right
|
|
11
|
+
// location's stock is the one that is drawn down
|
|
12
|
+
//
|
|
13
|
+
// So this is not a display preference. It re-pulls the catalog for the new
|
|
14
|
+
// location, re-hydrates the tax tables, and re-prices the cart. The totals a
|
|
15
|
+
// flow reads afterwards are the new location's.
|
|
16
|
+
//
|
|
17
|
+
// SAFE MID-CHECKOUT. Checkout starts when a shopper ARRIVES, so by the time
|
|
18
|
+
// anyone changes their mind an order usually already exists. That order is
|
|
19
|
+
// re-priced and moved to the new outlet in place, keeping its id and its receipt
|
|
20
|
+
// id, rather than being abandoned and replaced.
|
|
21
|
+
export {};
|
|
@@ -2,7 +2,7 @@ import { StartCheckout } from './types';
|
|
|
2
2
|
/**
|
|
3
3
|
* Standalone mock of the storefront checkout.
|
|
4
4
|
*
|
|
5
|
-
* It mirrors the REFUSALS of the real command (empty cart,
|
|
5
|
+
* It mirrors the REFUSALS of the real command (empty cart,
|
|
6
6
|
* container not on the page) in the same order, because those are what a
|
|
7
7
|
* builder actually hits first — a mock that accepted anything would let a
|
|
8
8
|
* checkout screen look finished and fail on the published site.
|
|
@@ -2,7 +2,7 @@ import { MOCK_CART, MOCK_COMPANY, mockPublishEvent } from '../../demo/database';
|
|
|
2
2
|
/**
|
|
3
3
|
* Standalone mock of the storefront checkout.
|
|
4
4
|
*
|
|
5
|
-
* It mirrors the REFUSALS of the real command (empty cart,
|
|
5
|
+
* It mirrors the REFUSALS of the real command (empty cart,
|
|
6
6
|
* container not on the page) in the same order, because those are what a
|
|
7
7
|
* builder actually hits first — a mock that accepted anything would let a
|
|
8
8
|
* checkout screen look finished and fail on the published site.
|
|
@@ -17,9 +17,9 @@ export const mockStartCheckout = async (params) => {
|
|
|
17
17
|
console.log('[Mock] startCheckout called', params);
|
|
18
18
|
if (!params)
|
|
19
19
|
throw new Error('Params required');
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
20
|
+
// No email check: contact is optional now, because checkout starts on arrival.
|
|
21
|
+
// Refusing here would make "start on arrival" fail in PREVIEW while working on
|
|
22
|
+
// the published site, which is the worst way for this to be wrong.
|
|
23
23
|
if (!params.container || typeof params.container !== 'string') {
|
|
24
24
|
throw new Error('startCheckout: container must be a CSS selector string (e.g. "#card-fields") — a DOM element cannot cross the command boundary');
|
|
25
25
|
}
|
|
@@ -8,7 +8,16 @@ export interface StartCheckoutContact {
|
|
|
8
8
|
phone?: string;
|
|
9
9
|
}
|
|
10
10
|
export interface StartCheckoutParams {
|
|
11
|
-
|
|
11
|
+
/**
|
|
12
|
+
* OPTIONAL, because checkout starts when the shopper ARRIVES rather than when
|
|
13
|
+
* they submit a form. The card fields cannot render without a payment session,
|
|
14
|
+
* a session needs a server-priced amount, and an amount needs an order — so the
|
|
15
|
+
* order has to exist before they have typed anything.
|
|
16
|
+
*
|
|
17
|
+
* Supply it afterwards with `attachCheckoutContact`, which re-sends the same
|
|
18
|
+
* idempotency key and so reaches the SAME order.
|
|
19
|
+
*/
|
|
20
|
+
contact?: StartCheckoutContact;
|
|
12
21
|
/**
|
|
13
22
|
* CSS SELECTOR for the element the payment fields mount into, e.g.
|
|
14
23
|
* `'#card-fields'`. The element must already be in the DOM when this is
|
package/dist/index.d.ts
CHANGED
|
@@ -46,6 +46,8 @@ export declare const command: {
|
|
|
46
46
|
readonly createPaymentLink: import(".").CreatePaymentLink;
|
|
47
47
|
readonly chargeMoto: import(".").ChargeMoto;
|
|
48
48
|
readonly startCheckout: import(".").StartCheckout;
|
|
49
|
+
readonly attachCheckoutContact: import(".").AttachCheckoutContact;
|
|
50
|
+
readonly setOutlet: import(".").SetOutlet;
|
|
49
51
|
readonly resumeCheckout: import(".").ResumeCheckout;
|
|
50
52
|
readonly addCustomerNote: import(".").AddCustomerNote;
|
|
51
53
|
readonly removeCustomerNote: import(".").RemoveCustomerNote;
|
|
@@ -135,7 +137,7 @@ export type { AddProduct, AddProductParams, AddProductResponse } from './actions
|
|
|
135
137
|
export type { EditProduct, EditProductParams, EditProductResponse } from './actions/edit-product/types';
|
|
136
138
|
export type { EditProductVariants, EditProductVariantsParams, EditProductVariantsResponse, } from './actions/edit-product-variants/types';
|
|
137
139
|
export type { DeleteProduct, DeleteProductParams, DeleteProductResponse } from './actions/delete-product/types';
|
|
138
|
-
export type { GetOutlets, GetOutletsResponse } from './actions/get-outlets/types';
|
|
140
|
+
export type { GetOutlets, GetOutletsParams, GetOutletsResponse } from './actions/get-outlets/types';
|
|
139
141
|
export type { GetStations, GetStationsParams, GetStationsResponse } from './actions/get-stations/types';
|
|
140
142
|
export type { GetSmartGridLayout, GetSmartGridLayoutParams, GetSmartGridLayoutResponse, } from './actions/get-smart-grid-layout/types';
|
|
141
143
|
export type { SaveSmartGridLayout, SaveSmartGridLayoutParams, SaveSmartGridLayoutResponse, } from './actions/save-smart-grid-layout/types';
|
|
@@ -185,6 +187,8 @@ export type { IntegrationPayment, IntegrationPaymentParams, IntegrationPaymentRe
|
|
|
185
187
|
export type { CreatePaymentLink, CreatePaymentLinkParams, CreatePaymentLinkResponse, } from './actions/create-payment-link/types';
|
|
186
188
|
export type { ChargeMoto, ChargeMotoParams, ChargeMotoResponse, ChargeMotoCardFields, } from './actions/charge-moto/types';
|
|
187
189
|
export type { StartCheckout, StartCheckoutParams, StartCheckoutResponse, StartCheckoutContact, StartCheckoutOrder, } from './actions/start-checkout/types';
|
|
190
|
+
export type { AttachCheckoutContact, AttachCheckoutContactParams, AttachCheckoutContactResponse, } from './actions/attach-checkout-contact/types';
|
|
191
|
+
export type { SetOutlet, SetOutletParams, SetOutletResponse } from './actions/set-outlet/types';
|
|
188
192
|
export type { ResumeCheckout, ResumeCheckoutParams, ResumeCheckoutResponse, ResumeCheckoutResult, } from './actions/resume-checkout/types';
|
|
189
193
|
export type { AddCustomerNote, AddCustomerNoteParams, AddCustomerNoteResponse, } from './actions/add-customer-note/types';
|
|
190
194
|
export type { RemoveCustomerNote, RemoveCustomerNoteParams, RemoveCustomerNoteResponse, } from './actions/remove-customer-note/types';
|
package/dist/index.js
CHANGED
|
@@ -46,6 +46,8 @@ import { integrationPayment } from './actions/integration-payment/action';
|
|
|
46
46
|
import { createPaymentLink } from './actions/create-payment-link/action';
|
|
47
47
|
import { chargeMoto } from './actions/charge-moto/action';
|
|
48
48
|
import { startCheckout } from './actions/start-checkout/action';
|
|
49
|
+
import { attachCheckoutContact } from './actions/attach-checkout-contact/action';
|
|
50
|
+
import { setOutlet } from './actions/set-outlet/action';
|
|
49
51
|
import { resumeCheckout } from './actions/resume-checkout/action';
|
|
50
52
|
// Customer Actions
|
|
51
53
|
import { addCustomerNote } from './actions/add-customer-note/action';
|
|
@@ -187,6 +189,8 @@ export const command = {
|
|
|
187
189
|
createPaymentLink,
|
|
188
190
|
chargeMoto,
|
|
189
191
|
startCheckout,
|
|
192
|
+
attachCheckoutContact,
|
|
193
|
+
setOutlet,
|
|
190
194
|
resumeCheckout,
|
|
191
195
|
// Customer Actions
|
|
192
196
|
addCustomerNote,
|
|
@@ -34,6 +34,9 @@ import { mockGetCashRoundingAmount } from '../../actions/get-cash-rounding-amoun
|
|
|
34
34
|
import { mockCreatePaymentLink } from '../../actions/create-payment-link/mock';
|
|
35
35
|
import { mockChargeMoto } from '../../actions/charge-moto/mock';
|
|
36
36
|
import { mockStartCheckout } from '../../actions/start-checkout/mock';
|
|
37
|
+
import { mockAttachCheckoutContact } from '../../actions/attach-checkout-contact/mock';
|
|
38
|
+
import { mockGetOutlets } from '../../actions/get-outlets/mock';
|
|
39
|
+
import { mockSetOutlet } from '../../actions/set-outlet/mock';
|
|
37
40
|
import { mockResumeCheckout } from '../../actions/resume-checkout/mock';
|
|
38
41
|
import { mockGetTimeClockStatus } from '../../actions/get-time-clock-status/mock';
|
|
39
42
|
import { mockClearCart } from '../../actions/clear-cart/mock';
|
|
@@ -135,6 +138,9 @@ export const RENDER_MOCKS = {
|
|
|
135
138
|
createPaymentLink: mockCreatePaymentLink,
|
|
136
139
|
chargeMoto: mockChargeMoto,
|
|
137
140
|
startCheckout: mockStartCheckout,
|
|
141
|
+
attachCheckoutContact: mockAttachCheckoutContact,
|
|
142
|
+
getOutlets: mockGetOutlets,
|
|
143
|
+
setOutlet: mockSetOutlet,
|
|
138
144
|
resumeCheckout: mockResumeCheckout,
|
|
139
145
|
clearCart: mockClearCart,
|
|
140
146
|
deleteParkedOrder: mockDeleteParkedOrder,
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { ExampleFunction, GetProducts, AddCustomSale, EditCustomSale, GetCustomers, AssignCustomer, AddCustomer, EditCustomer, GetCategories, GetOrders, GetRefunds, GetTaxTables, AddProductDiscount, AddProductToCart, RemoveProductFromCart, UpdateCartItemQuantity, AddCartDiscount, GetContext, GetFinalContext, AddProductNote, AddProductFee, GetProductModifierSelections, SetProductModifierSelections, SetActiveProductFee, SetActiveProductDiscount, GetActiveProduct, SetActiveProduct, AdjustInventory, AddOrderNote, AddCartFee, ClearCart, ParkOrder, ResumeParkedOrder, DeleteParkedOrder, VoidOrder, InitiateRefund, CashPayment, GetCashRoundingAmount, TapToPayPayment, TerminalPayment, ExtensionPayment, RedeemPayment, AddNonRevenueItem, AddCustomerNote, RemoveCustomerNote, RemoveCustomerFromCart, GoToStationHome, OpenCashDrawer, ShowNotification, ShowConfirmation, AuthenticateUser, PartialPayment, SwitchUser, SetRefundStockAction, SelectAllRefundItems, ResetRefundDetails, CalculateRefundTotal, GetRemainingRefundableQuantities, ProcessPartialRefund, RedeemRefund, GetRefundPlan, CheckPermission, GetCurrentCart, Print, SetActiveOrder, GetCustomTables, GetCustomTableData, UpsertCustomTableData, DeleteCustomTableData, GetCustomExtensions, GetCurrentCompanyCustomExtensions, GetCustomExtensionCustomTables, GetCustomTableFields, GetSecretsKeys, GetSecretVal, SetSecretVal, GetUsers, GetRoles, RemoveCartDiscount, GetActiveOrder, GetActiveCustomer, SetActiveCustomer, GetActiveOutlet, GetActiveStation, GetActiveSession, GetActiveUser, SetActiveUser, SetActiveRefund, RemoveProductDiscount, RemoveProductFee, RemoveProductNote, RemoveCartFee, RemoveOrderNote, RemoveCustomSale, RemoveNonRevenueItem, CanTransition, GetAvailableTransitions, ApplyTransition, IntegrationPayment, GetSmartGridLayout, SaveSmartGridLayout, SendEmail, SendSms, CreatePaymentLink, ChargeMoto, StartCheckout, ResumeCheckout, GetTimeClockStatus } from '../../index';
|
|
1
|
+
import type { ExampleFunction, GetProducts, AddCustomSale, EditCustomSale, GetCustomers, AssignCustomer, AddCustomer, EditCustomer, GetCategories, GetOrders, GetRefunds, GetTaxTables, AddProductDiscount, AddProductToCart, RemoveProductFromCart, UpdateCartItemQuantity, AddCartDiscount, GetContext, GetFinalContext, AddProductNote, AddProductFee, GetProductModifierSelections, SetProductModifierSelections, SetActiveProductFee, SetActiveProductDiscount, GetActiveProduct, SetActiveProduct, AdjustInventory, AddOrderNote, AddCartFee, ClearCart, ParkOrder, ResumeParkedOrder, DeleteParkedOrder, VoidOrder, InitiateRefund, CashPayment, GetCashRoundingAmount, TapToPayPayment, TerminalPayment, ExtensionPayment, RedeemPayment, AddNonRevenueItem, AddCustomerNote, RemoveCustomerNote, RemoveCustomerFromCart, GoToStationHome, OpenCashDrawer, ShowNotification, ShowConfirmation, AuthenticateUser, PartialPayment, SwitchUser, SetRefundStockAction, SelectAllRefundItems, ResetRefundDetails, CalculateRefundTotal, GetRemainingRefundableQuantities, ProcessPartialRefund, RedeemRefund, GetRefundPlan, CheckPermission, GetCurrentCart, Print, SetActiveOrder, GetCustomTables, GetCustomTableData, UpsertCustomTableData, DeleteCustomTableData, GetCustomExtensions, GetCurrentCompanyCustomExtensions, GetCustomExtensionCustomTables, GetCustomTableFields, GetSecretsKeys, GetSecretVal, SetSecretVal, GetUsers, GetRoles, RemoveCartDiscount, GetActiveOrder, GetActiveCustomer, SetActiveCustomer, GetActiveOutlet, GetActiveStation, GetActiveSession, GetActiveUser, SetActiveUser, SetActiveRefund, RemoveProductDiscount, RemoveProductFee, RemoveProductNote, RemoveCartFee, RemoveOrderNote, RemoveCustomSale, RemoveNonRevenueItem, CanTransition, GetAvailableTransitions, ApplyTransition, IntegrationPayment, GetSmartGridLayout, SaveSmartGridLayout, SendEmail, SendSms, CreatePaymentLink, ChargeMoto, StartCheckout, AttachCheckoutContact, GetOutlets, SetOutlet, ResumeCheckout, GetTimeClockStatus } from '../../index';
|
|
2
2
|
export interface RenderProviderActions {
|
|
3
3
|
exampleFunction: ExampleFunction;
|
|
4
4
|
getProducts: GetProducts;
|
|
@@ -51,6 +51,9 @@ export interface RenderProviderActions {
|
|
|
51
51
|
* a register, because the two declare different things to the card networks.
|
|
52
52
|
*/
|
|
53
53
|
startCheckout: StartCheckout;
|
|
54
|
+
attachCheckoutContact: AttachCheckoutContact;
|
|
55
|
+
getOutlets: GetOutlets;
|
|
56
|
+
setOutlet: SetOutlet;
|
|
54
57
|
/**
|
|
55
58
|
* The RETURN LEG of an online checkout, after a redirect payment method or
|
|
56
59
|
* 3-D Secure sent the shopper away and back. Storefront-only, like
|