@final-commerce/command-frame 0.1.47 → 0.1.49

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.
@@ -1,24 +1,16 @@
1
+ import { MOCK_OUTLETS, safeSerialize } from "../../demo/database";
1
2
  export const mockGetOutlets = async () => {
2
3
  console.log("[Mock] getOutlets called");
4
+ const outlets = safeSerialize(MOCK_OUTLETS).map((o) => ({
5
+ _id: o._id || o.id,
6
+ name: o.name || "",
7
+ address: o.address,
8
+ city: o.city,
9
+ state: o.state,
10
+ country: o.country
11
+ }));
3
12
  return {
4
- outlets: [
5
- {
6
- _id: "mock_outlet_001",
7
- name: "Main Store",
8
- address: "123 Commerce St",
9
- city: "New York",
10
- state: "NY",
11
- country: "US",
12
- },
13
- {
14
- _id: "mock_outlet_002",
15
- name: "Downtown Branch",
16
- address: "456 Market Ave",
17
- city: "San Francisco",
18
- state: "CA",
19
- country: "US",
20
- },
21
- ],
22
- timestamp: new Date().toISOString(),
13
+ outlets,
14
+ timestamp: new Date().toISOString()
23
15
  };
24
16
  };
@@ -1,20 +1,9 @@
1
- export const mockGetStations = async (params) => {
2
- console.log("[Mock] getStations called", params);
1
+ import { MOCK_STATIONS, safeSerialize } from "../../demo/database";
2
+ export const mockGetStations = async (_params) => {
3
+ console.log("[Mock] getStations called", _params);
4
+ const stations = safeSerialize(MOCK_STATIONS);
3
5
  return {
4
- stations: [
5
- {
6
- _id: "mock_station_001",
7
- name: "POS Terminal 1",
8
- status: "active",
9
- sequenceNumber: 1,
10
- },
11
- {
12
- _id: "mock_station_002",
13
- name: "POS Terminal 2",
14
- status: "active",
15
- sequenceNumber: 2,
16
- },
17
- ],
18
- timestamp: new Date().toISOString(),
6
+ stations,
7
+ timestamp: new Date().toISOString()
19
8
  };
20
9
  };
@@ -3,7 +3,19 @@
3
3
  * Stores mock data that mimics the Render environment
4
4
  */
5
5
  import { CFActiveCompany, CFActiveUser, CFActiveStation, CFActiveOutlet, CFActiveOrder, CFCustomer, CFProduct, CFActiveCart, CFCategory } from "../CommonTypes";
6
- export * from './mocks';
6
+ export * from "./mocks";
7
+ /** Replace mock catalog / context data in place (same array references mock handlers use). */
8
+ export interface MockDatabaseConfig {
9
+ company?: Partial<CFActiveCompany>;
10
+ outlets?: CFActiveOutlet[];
11
+ stations?: CFActiveStation[];
12
+ users?: CFActiveUser[];
13
+ customers?: CFCustomer[];
14
+ categories?: CFCategory[];
15
+ products?: CFProduct[];
16
+ orders?: CFActiveOrder[];
17
+ parkedOrders?: CFActiveOrder[];
18
+ }
7
19
  export declare const MOCK_COMPANY: CFActiveCompany;
8
20
  export declare const MOCK_OUTLET_MAIN: CFActiveOutlet;
9
21
  export declare const MOCK_STATION_1: CFActiveStation;
@@ -44,11 +56,16 @@ export declare const MOCK_CATEGORIES: CFCategory[];
44
56
  export declare const MOCK_PRODUCTS: CFProduct[];
45
57
  export declare const MOCK_ORDERS: CFActiveOrder[];
46
58
  export declare const MOCK_PARKED_ORDERS: CFActiveOrder[];
47
- export declare const MOCK_USER: CFActiveUser;
48
- export declare const MOCK_STATION: CFActiveStation;
49
- export declare const MOCK_OUTLET: CFActiveOutlet;
59
+ export declare let MOCK_USER: CFActiveUser;
60
+ export declare let MOCK_STATION: CFActiveStation;
61
+ export declare let MOCK_OUTLET: CFActiveOutlet;
50
62
  export declare let MOCK_CART: CFActiveCart;
51
63
  export declare const resetMockCart: () => void;
64
+ /**
65
+ * Replace in-memory mock data used by default mock handlers. Arrays are mutated in place
66
+ * so existing imports from this module keep working.
67
+ */
68
+ export declare function setMockDatabase(config: Partial<MockDatabaseConfig>): void;
52
69
  export declare const safeSerialize: <T>(data: T) => T;
53
70
  type MockEventCallback = (event: any) => void;
54
71
  export declare const mockPublishEvent: (topic: string, eventType: string, data: any) => void;
@@ -3,7 +3,7 @@
3
3
  * Stores mock data that mimics the Render environment
4
4
  */
5
5
  import { CFProductType, CFUserTypes, CurrencyCode, } from "../CommonTypes";
6
- export * from './mocks';
6
+ export * from "./mocks";
7
7
  // Asset Imports - Using Remote URLs to avoid build complexity with asset copying
8
8
  const ASSETS_BASE_URL = "https://raw.githubusercontent.com/Final-Commerce/command-frame/refs/heads/main/src/demo/assets";
9
9
  const logo = `${ASSETS_BASE_URL}/logo.png`;
@@ -31,7 +31,6 @@ export const MOCK_COMPANY = {
31
31
  decimals: { $numberInt: "2" }
32
32
  }
33
33
  };
34
- const COMPANY_ID = MOCK_COMPANY.id;
35
34
  // --- OUTLETS ---
36
35
  export const MOCK_OUTLET_MAIN = {
37
36
  id: "outlet_main",
@@ -74,7 +73,7 @@ export const MOCK_USER_MARIO = {
74
73
  permissions: []
75
74
  },
76
75
  outlets: [MOCK_OUTLET_MAIN.id],
77
- companies: [COMPANY_ID]
76
+ companies: [MOCK_COMPANY.id]
78
77
  };
79
78
  export const MOCK_USER_LUIGI = {
80
79
  id: "user_luigi",
@@ -87,12 +86,12 @@ export const MOCK_USER_LUIGI = {
87
86
  permissions: []
88
87
  },
89
88
  outlets: [MOCK_OUTLET_MAIN.id],
90
- companies: [COMPANY_ID]
89
+ companies: [MOCK_COMPANY.id]
91
90
  };
92
91
  // --- CUSTOMERS ---
93
92
  export const MOCK_CUSTOMER_1 = {
94
93
  _id: "cust_giuseppe",
95
- companyId: COMPANY_ID,
94
+ companyId: MOCK_COMPANY.id,
96
95
  email: "giuseppe@example.com",
97
96
  firstName: "Giuseppe",
98
97
  lastName: "Verdi",
@@ -110,7 +109,7 @@ export const MOCK_CUSTOMER_1 = {
110
109
  };
111
110
  export const MOCK_CUSTOMER_2 = {
112
111
  _id: "cust_sofia",
113
- companyId: COMPANY_ID,
112
+ companyId: MOCK_COMPANY.id,
114
113
  email: "sofia@example.com",
115
114
  firstName: "Sofia",
116
115
  lastName: "Loren",
@@ -120,7 +119,7 @@ export const MOCK_CUSTOMER_2 = {
120
119
  };
121
120
  export const MOCK_CUSTOMER_3 = {
122
121
  _id: "cust_alessandro",
123
- companyId: COMPANY_ID,
122
+ companyId: MOCK_COMPANY.id,
124
123
  email: "alessandro@example.com",
125
124
  firstName: "Alessandro",
126
125
  lastName: "Volta",
@@ -130,7 +129,7 @@ export const MOCK_CUSTOMER_3 = {
130
129
  };
131
130
  export const MOCK_CUSTOMER_4 = {
132
131
  _id: "cust_isabella",
133
- companyId: COMPANY_ID,
132
+ companyId: MOCK_COMPANY.id,
134
133
  email: "isabella@example.com",
135
134
  firstName: "Isabella",
136
135
  lastName: "Rossellini",
@@ -140,7 +139,7 @@ export const MOCK_CUSTOMER_4 = {
140
139
  };
141
140
  export const MOCK_CUSTOMER_5 = {
142
141
  _id: "cust_leonardo",
143
- companyId: COMPANY_ID,
142
+ companyId: MOCK_COMPANY.id,
144
143
  email: "leonardo@example.com",
145
144
  firstName: "Leonardo",
146
145
  lastName: "Da Vinci",
@@ -153,35 +152,35 @@ export const MOCK_CATEGORY_PASTES = {
153
152
  _id: "cat_pastes",
154
153
  name: "Pastes",
155
154
  externalId: "ext_cat_pastes",
156
- companyId: COMPANY_ID,
155
+ companyId: MOCK_COMPANY.id,
157
156
  parentId: null
158
157
  };
159
158
  export const MOCK_CATEGORY_SPECIALTY = {
160
159
  _id: "cat_specialty",
161
160
  name: "Specialty",
162
161
  externalId: "ext_cat_specialty",
163
- companyId: COMPANY_ID,
162
+ companyId: MOCK_COMPANY.id,
164
163
  parentId: "cat_pastes"
165
164
  };
166
165
  export const MOCK_CATEGORY_BASIC = {
167
166
  _id: "cat_basic",
168
167
  name: "Basic",
169
168
  externalId: "ext_cat_basic",
170
- companyId: COMPANY_ID,
169
+ companyId: MOCK_COMPANY.id,
171
170
  parentId: "cat_pastes"
172
171
  };
173
172
  export const MOCK_CATEGORY_VEGAN = {
174
173
  _id: "cat_vegan",
175
174
  name: "Vegan",
176
175
  externalId: "ext_cat_vegan",
177
- companyId: COMPANY_ID,
176
+ companyId: MOCK_COMPANY.id,
178
177
  parentId: null
179
178
  };
180
179
  export const MOCK_CATEGORY_SPICY = {
181
180
  _id: "cat_spicy",
182
181
  name: "Spicy",
183
182
  externalId: "ext_cat_spicy",
184
- companyId: COMPANY_ID,
183
+ companyId: MOCK_COMPANY.id,
185
184
  parentId: null
186
185
  };
187
186
  // --- PRODUCTS ---
@@ -192,7 +191,7 @@ const createSimpleProduct = (id, name, price, image, categories, description) =>
192
191
  return {
193
192
  _id: id,
194
193
  name,
195
- companyId: COMPANY_ID,
194
+ companyId: MOCK_COMPANY.id,
196
195
  externalId: `ext_${id}`,
197
196
  sku,
198
197
  currency: CurrencyCode.USD,
@@ -227,7 +226,7 @@ const createVariableProduct = (id, name, basePrice, largePrice, image, categorie
227
226
  return {
228
227
  _id: id,
229
228
  name,
230
- companyId: COMPANY_ID,
229
+ companyId: MOCK_COMPANY.id,
231
230
  externalId: `ext_${id}`,
232
231
  sku: skuBase,
233
232
  currency: CurrencyCode.USD,
@@ -315,7 +314,7 @@ export const MOCK_ORDER_1 = {
315
314
  currency: CurrencyCode.USD,
316
315
  minorUnits: 2,
317
316
  receiptId: "1001-0001",
318
- companyId: COMPANY_ID,
317
+ companyId: MOCK_COMPANY.id,
319
318
  externalId: null,
320
319
  status: "completed",
321
320
  customer: MOCK_CUSTOMER_1,
@@ -365,7 +364,7 @@ export const MOCK_ORDER_2 = {
365
364
  currency: CurrencyCode.USD,
366
365
  minorUnits: 2,
367
366
  receiptId: "1001-0002",
368
- companyId: COMPANY_ID,
367
+ companyId: MOCK_COMPANY.id,
369
368
  externalId: null,
370
369
  status: "completed",
371
370
  customer: MOCK_CUSTOMER_2,
@@ -445,10 +444,10 @@ export const MOCK_PRODUCTS = [
445
444
  ];
446
445
  export const MOCK_ORDERS = [MOCK_ORDER_1, MOCK_ORDER_2];
447
446
  export const MOCK_PARKED_ORDERS = [];
448
- // Compatibility Exports
449
- export const MOCK_USER = MOCK_USERS[0];
450
- export const MOCK_STATION = MOCK_STATIONS[0];
451
- export const MOCK_OUTLET = MOCK_OUTLETS[0];
447
+ // Compatibility Exports (reassigned by setMockDatabase)
448
+ export let MOCK_USER = MOCK_USERS[0];
449
+ export let MOCK_STATION = MOCK_STATIONS[0];
450
+ export let MOCK_OUTLET = MOCK_OUTLETS[0];
452
451
  export let MOCK_CART = {
453
452
  total: 0,
454
453
  subtotal: 0,
@@ -472,6 +471,62 @@ export const resetMockCart = () => {
472
471
  customer: null
473
472
  };
474
473
  };
474
+ function resolveMockOrderCurrency() {
475
+ const raw = MOCK_COMPANY.settings?.currency;
476
+ if (typeof raw === "string" && Object.values(CurrencyCode).includes(raw)) {
477
+ return raw;
478
+ }
479
+ return CurrencyCode.USD;
480
+ }
481
+ /**
482
+ * Replace in-memory mock data used by default mock handlers. Arrays are mutated in place
483
+ * so existing imports from this module keep working.
484
+ */
485
+ export function setMockDatabase(config) {
486
+ if (config.company !== undefined) {
487
+ Object.assign(MOCK_COMPANY, config.company);
488
+ }
489
+ if (config.outlets !== undefined) {
490
+ MOCK_OUTLETS.splice(0, MOCK_OUTLETS.length, ...config.outlets);
491
+ }
492
+ if (config.stations !== undefined) {
493
+ MOCK_STATIONS.splice(0, MOCK_STATIONS.length, ...config.stations);
494
+ }
495
+ if (config.users !== undefined) {
496
+ MOCK_USERS.splice(0, MOCK_USERS.length, ...config.users);
497
+ }
498
+ if (config.customers !== undefined) {
499
+ MOCK_CUSTOMERS.splice(0, MOCK_CUSTOMERS.length, ...config.customers);
500
+ }
501
+ if (config.categories !== undefined) {
502
+ MOCK_CATEGORIES.splice(0, MOCK_CATEGORIES.length, ...config.categories);
503
+ }
504
+ if (config.products !== undefined) {
505
+ MOCK_PRODUCTS.splice(0, MOCK_PRODUCTS.length, ...config.products);
506
+ }
507
+ if (config.orders !== undefined) {
508
+ MOCK_ORDERS.splice(0, MOCK_ORDERS.length, ...config.orders);
509
+ }
510
+ if (config.parkedOrders !== undefined) {
511
+ MOCK_PARKED_ORDERS.splice(0, MOCK_PARKED_ORDERS.length, ...config.parkedOrders);
512
+ }
513
+ if (MOCK_OUTLETS.length > 0) {
514
+ Object.assign(MOCK_OUTLET_MAIN, MOCK_OUTLETS[0]);
515
+ if (MOCK_OUTLET_MAIN.id === undefined && MOCK_OUTLET_MAIN._id !== undefined) {
516
+ MOCK_OUTLET_MAIN.id = MOCK_OUTLET_MAIN._id;
517
+ }
518
+ }
519
+ if (MOCK_USERS.length > 0) {
520
+ MOCK_USER = MOCK_USERS[0];
521
+ }
522
+ if (MOCK_STATIONS.length > 0) {
523
+ MOCK_STATION = MOCK_STATIONS[0];
524
+ }
525
+ if (MOCK_OUTLETS.length > 0) {
526
+ MOCK_OUTLET = MOCK_OUTLETS[0];
527
+ }
528
+ resetMockCart();
529
+ }
475
530
  // Helper to simulate safe JSON serialization
476
531
  export const safeSerialize = (data) => {
477
532
  return JSON.parse(JSON.stringify(data));
@@ -502,6 +557,10 @@ export const mockSubscribeToTopic = (topic, callback) => {
502
557
  };
503
558
  // Helper to create order from cart
504
559
  export const createOrderFromCart = (paymentType, amount, processor = "cash") => {
560
+ const primaryOutlet = MOCK_OUTLETS[0] ?? MOCK_OUTLET_MAIN;
561
+ const primaryStation = MOCK_STATIONS[0] ?? MOCK_STATION;
562
+ const employeeUser = MOCK_USERS.find(u => u.type === CFUserTypes.CASHIER) ?? MOCK_USERS[0] ?? MOCK_USER;
563
+ const orderCurrency = resolveMockOrderCurrency();
505
564
  // Generate new Order ID
506
565
  const orderId = `order_${Date.now()}`;
507
566
  const receiptId = `receipt_${Date.now()}`;
@@ -531,10 +590,10 @@ export const createOrderFromCart = (paymentType, amount, processor = "cash") =>
531
590
  const totalNum = MOCK_CART.total;
532
591
  const newOrder = {
533
592
  _id: orderId,
534
- currency: CurrencyCode.USD,
593
+ currency: orderCurrency,
535
594
  minorUnits: 2,
536
595
  receiptId,
537
- companyId: COMPANY_ID,
596
+ companyId: MOCK_COMPANY.id,
538
597
  externalId: null,
539
598
  status: "completed",
540
599
  customer: MOCK_CART.customer ? MOCK_CART.customer : null,
@@ -560,9 +619,9 @@ export const createOrderFromCart = (paymentType, amount, processor = "cash") =>
560
619
  ],
561
620
  source: "pos",
562
621
  posData: {
563
- outlet: MOCK_OUTLET_MAIN.id,
564
- station: MOCK_STATION_1._id,
565
- employee: MOCK_USER_LUIGI.id
622
+ outlet: primaryOutlet.id,
623
+ station: primaryStation._id,
624
+ employee: employeeUser.id
566
625
  },
567
626
  sessionId: `session_${Date.now()}`,
568
627
  metadata: [],
@@ -571,9 +630,9 @@ export const createOrderFromCart = (paymentType, amount, processor = "cash") =>
571
630
  lineItems,
572
631
  customSales: [],
573
632
  balance: 0,
574
- user: MOCK_USER_LUIGI,
575
- outlet: MOCK_OUTLET_MAIN,
576
- station: MOCK_STATION_1,
633
+ user: employeeUser,
634
+ outlet: primaryOutlet,
635
+ station: primaryStation,
577
636
  createdAt: new Date().toISOString()
578
637
  };
579
638
  MOCK_ORDERS.push(newOrder);
package/dist/index.d.ts CHANGED
@@ -149,6 +149,8 @@ export type { SetActiveOrder, SetActiveOrderParams, SetActiveOrderResponse } fro
149
149
  export type { TriggerWebhook, TriggerWebhookPresetType, TriggerWebhookParams, TriggerWebhookResponse } from "./actions/trigger-webhook/types";
150
150
  export type { TriggerZapierWebhook, TriggerZapierWebhookParams, TriggerZapierWebhookResponse } from "./actions/trigger-zapier-webhook/types";
151
151
  export * from "./CommonTypes";
152
+ export { setMockDatabase } from "./demo/database";
153
+ export type { MockDatabaseConfig } from "./demo/database";
152
154
  export { CommandFrameProvider } from "./provider";
153
155
  export type { ActionHandler, ActionHandlers } from "./provider";
154
156
  export * from "./projects/render";
package/dist/index.js CHANGED
@@ -189,6 +189,8 @@ export { EXTENSION_REFUND_REQUEST_ACTION } from "./actions/extension-refund/cons
189
189
  export { installExtensionRefundListener } from "./actions/extension-refund/extension-refund-listener";
190
190
  // Export Common Types
191
191
  export * from "./CommonTypes";
192
+ // Mock database override (standalone / extension dev)
193
+ export { setMockDatabase } from "./demo/database";
192
194
  // Export Provider
193
195
  export { CommandFrameProvider } from "./provider";
194
196
  // Export Render Project
@@ -8,6 +8,7 @@ export declare class ManageClient extends CommandFrameClient {
8
8
  origin?: string;
9
9
  debug?: boolean;
10
10
  mockMode?: boolean;
11
+ mockRegistry?: Partial<ManageProviderActions>;
11
12
  });
12
13
  }
13
14
  export declare const manageClient: ManageClient;
@@ -2,9 +2,13 @@ import { CommandFrameClient } from "../../client";
2
2
  import { MANAGE_MOCKS } from "./mocks";
3
3
  export class ManageClient extends CommandFrameClient {
4
4
  constructor(options = {}) {
5
+ const { mockRegistry: mockRegistryOverrides, ...baseOptions } = options;
5
6
  super({
6
- ...options,
7
- mockRegistry: MANAGE_MOCKS
7
+ ...baseOptions,
8
+ mockRegistry: {
9
+ ...MANAGE_MOCKS,
10
+ ...mockRegistryOverrides
11
+ }
8
12
  });
9
13
  }
10
14
  }
@@ -8,6 +8,7 @@ export declare class RenderClient extends CommandFrameClient {
8
8
  origin?: string;
9
9
  debug?: boolean;
10
10
  mockMode?: boolean;
11
+ mockRegistry?: Partial<RenderProviderActions>;
11
12
  });
12
13
  }
13
14
  export declare const renderClient: RenderClient;
@@ -2,9 +2,13 @@ import { CommandFrameClient } from "../../client";
2
2
  import { RENDER_MOCKS } from "./mocks";
3
3
  export class RenderClient extends CommandFrameClient {
4
4
  constructor(options = {}) {
5
+ const { mockRegistry: mockRegistryOverrides, ...baseOptions } = options;
5
6
  super({
6
- ...options,
7
- mockRegistry: RENDER_MOCKS
7
+ ...baseOptions,
8
+ mockRegistry: {
9
+ ...RENDER_MOCKS,
10
+ ...mockRegistryOverrides
11
+ }
8
12
  });
9
13
  }
10
14
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@final-commerce/command-frame",
3
- "version": "0.1.47",
3
+ "version": "0.1.49",
4
4
  "description": "Commands Frame library",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",