@teincfood/core 0.1.0

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.
Files changed (120) hide show
  1. package/README.md +44 -0
  2. package/dist/adapters/auth.d.ts +13 -0
  3. package/dist/adapters/auth.js +14 -0
  4. package/dist/adapters/business.d.ts +13 -0
  5. package/dist/adapters/business.js +14 -0
  6. package/dist/adapters/connectivity.d.ts +17 -0
  7. package/dist/adapters/connectivity.js +38 -0
  8. package/dist/adapters/devices.d.ts +5 -0
  9. package/dist/adapters/devices.js +14 -0
  10. package/dist/adapters/http.d.ts +30 -0
  11. package/dist/adapters/http.js +37 -0
  12. package/dist/adapters/image-cache.d.ts +8 -0
  13. package/dist/adapters/image-cache.js +12 -0
  14. package/dist/adapters/kv-types.d.ts +5 -0
  15. package/dist/adapters/kv-types.js +2 -0
  16. package/dist/adapters/kv.d.ts +20 -0
  17. package/dist/adapters/kv.js +81 -0
  18. package/dist/adapters/local-node.d.ts +34 -0
  19. package/dist/adapters/local-node.js +40 -0
  20. package/dist/adapters/pending-orders.d.ts +17 -0
  21. package/dist/adapters/pending-orders.js +31 -0
  22. package/dist/adapters/query-keys.d.ts +17 -0
  23. package/dist/adapters/query-keys.js +20 -0
  24. package/dist/adapters/services.d.ts +62 -0
  25. package/dist/adapters/services.js +95 -0
  26. package/dist/adapters/sqlite.d.ts +20 -0
  27. package/dist/adapters/sqlite.js +23 -0
  28. package/dist/db/connection.d.ts +8 -0
  29. package/dist/db/connection.js +87 -0
  30. package/dist/db/migrations.d.ts +9 -0
  31. package/dist/db/migrations.js +106 -0
  32. package/dist/db/operations.d.ts +45 -0
  33. package/dist/db/operations.js +192 -0
  34. package/dist/index.d.ts +50 -0
  35. package/dist/index.js +118 -0
  36. package/dist/reference/api.d.ts +10 -0
  37. package/dist/reference/api.js +24 -0
  38. package/dist/reference/events.d.ts +54 -0
  39. package/dist/reference/events.js +144 -0
  40. package/dist/reference/operations.d.ts +11 -0
  41. package/dist/reference/operations.js +46 -0
  42. package/dist/reference/service.d.ts +27 -0
  43. package/dist/reference/service.js +270 -0
  44. package/dist/reference/types.d.ts +47 -0
  45. package/dist/reference/types.js +12 -0
  46. package/dist/repositories/order.repository.d.ts +44 -0
  47. package/dist/repositories/order.repository.js +132 -0
  48. package/dist/repositories/pos.repository.d.ts +20 -0
  49. package/dist/repositories/pos.repository.js +28 -0
  50. package/dist/sync/command-builder.d.ts +17 -0
  51. package/dist/sync/command-builder.js +30 -0
  52. package/dist/sync/command-queue.service.d.ts +41 -0
  53. package/dist/sync/command-queue.service.js +253 -0
  54. package/dist/sync/engine.d.ts +53 -0
  55. package/dist/sync/engine.js +216 -0
  56. package/dist/sync/order-number.d.ts +20 -0
  57. package/dist/sync/order-number.js +58 -0
  58. package/dist/sync/order-snapshots.service.d.ts +46 -0
  59. package/dist/sync/order-snapshots.service.js +151 -0
  60. package/dist/sync/pending-orders.service.d.ts +45 -0
  61. package/dist/sync/pending-orders.service.js +163 -0
  62. package/dist/sync/transport-local-node.d.ts +14 -0
  63. package/dist/sync/transport-local-node.js +67 -0
  64. package/dist/sync/transport-rest.d.ts +17 -0
  65. package/dist/sync/transport-rest.js +112 -0
  66. package/dist/sync/types.d.ts +102 -0
  67. package/dist/sync/types.js +13 -0
  68. package/dist/sync/use-sync-reconciliation.d.ts +10 -0
  69. package/dist/sync/use-sync-reconciliation.js +106 -0
  70. package/dist/types/api/auth.api.d.ts +61 -0
  71. package/dist/types/api/auth.api.js +3 -0
  72. package/dist/types/api/business.api.d.ts +137 -0
  73. package/dist/types/api/business.api.js +3 -0
  74. package/dist/types/api/conversation.api.d.ts +46 -0
  75. package/dist/types/api/conversation.api.js +2 -0
  76. package/dist/types/api/error.api.d.ts +8 -0
  77. package/dist/types/api/error.api.js +2 -0
  78. package/dist/types/api/fleet.api.d.ts +98 -0
  79. package/dist/types/api/fleet.api.js +3 -0
  80. package/dist/types/api/index.d.ts +11 -0
  81. package/dist/types/api/index.js +27 -0
  82. package/dist/types/api/kiosk.api.d.ts +4 -0
  83. package/dist/types/api/kiosk.api.js +2 -0
  84. package/dist/types/api/menu.api.d.ts +90 -0
  85. package/dist/types/api/menu.api.js +2 -0
  86. package/dist/types/api/pagination.d.ts +10 -0
  87. package/dist/types/api/pagination.js +2 -0
  88. package/dist/types/api/rider.api.d.ts +179 -0
  89. package/dist/types/api/rider.api.js +2 -0
  90. package/dist/types/api/seller.api.d.ts +164 -0
  91. package/dist/types/api/seller.api.js +2 -0
  92. package/dist/types/api/wallet.api.d.ts +27 -0
  93. package/dist/types/api/wallet.api.js +2 -0
  94. package/dist/types/pos.types.d.ts +33 -0
  95. package/dist/types/pos.types.js +5 -0
  96. package/dist/utils/constants.d.ts +85 -0
  97. package/dist/utils/constants.js +72 -0
  98. package/dist/utils/copyToClipBoard.d.ts +5 -0
  99. package/dist/utils/copyToClipBoard.js +23 -0
  100. package/dist/utils/currency.d.ts +9 -0
  101. package/dist/utils/currency.js +37 -0
  102. package/dist/utils/error.d.ts +4 -0
  103. package/dist/utils/error.js +73 -0
  104. package/dist/utils/formatCurrency.d.ts +4 -0
  105. package/dist/utils/formatCurrency.js +16 -0
  106. package/dist/utils/formatDate.d.ts +8 -0
  107. package/dist/utils/formatDate.js +42 -0
  108. package/dist/utils/phone.d.ts +10 -0
  109. package/dist/utils/phone.js +71 -0
  110. package/dist/utils/responsive.d.ts +13 -0
  111. package/dist/utils/responsive.js +21 -0
  112. package/dist/utils/storage.d.ts +15 -0
  113. package/dist/utils/storage.js +60 -0
  114. package/dist/utils/sync-logger.d.ts +22 -0
  115. package/dist/utils/sync-logger.js +79 -0
  116. package/dist/utils/uuid.d.ts +7 -0
  117. package/dist/utils/uuid.js +47 -0
  118. package/dist/utils/validation.d.ts +31 -0
  119. package/dist/utils/validation.js +170 -0
  120. package/package.json +49 -0
package/README.md ADDED
@@ -0,0 +1,44 @@
1
+ # @teincfood/core
2
+
3
+ TeincFood shared offline-first core — single source of truth for mobile (`TeincFoodBusiness`) and desktop (`TeincFoodDesktop`).
4
+
5
+ ## What lives here (v0.1.0 backbone)
6
+
7
+ - `types/api/*` — snake_case API contracts matching backend
8
+ - `utils/*` — currency, error, format, uuid, order-number (async), etc.
9
+ - `sync/*` — engine, command-queue, transports, routing-policy, pending-orders
10
+ - `db/*` — migrations + operations (driver-agnostic, takes a `SqliteDriver`)
11
+ - `reference/*` — versioned reference-data cache
12
+ - `repositories/*` — order/pos repositories
13
+ - `adapters/*` — platform seams (KV, SQLite, HTTP, etc.)
14
+
15
+ ## Adapters
16
+
17
+ Apps supply platform adapters via `createTeincCore({ storage, db, http, ... })`:
18
+
19
+ - `KVStorage` — async `getItem/setItem/removeItem` (MMKV-wrapped on mobile, `plugin-store` on desktop)
20
+ - `SqliteDriver` — `execAsync/runAsync/getFirstAsync/getAllAsync/withTransactionAsync`
21
+ - `HttpClient` — axios instance with auth interceptors (token plumbing stays app-side)
22
+ - `LanTransport` — `{ isAvailable(), execute(command) }`
23
+
24
+ ## Usage
25
+
26
+ ```ts
27
+ import { createTeincCore } from "@teincfood/core";
28
+ const core = createTeincCore({ storage, db, http });
29
+ ```
30
+
31
+ Apps re-export types via `export * from "@teincfood/core"` barrels to avoid churn.
32
+
33
+ ## Publishing
34
+
35
+ ```bash
36
+ yarn build
37
+ npm publish --access public
38
+ ```
39
+
40
+ ## Roadmap
41
+
42
+ - v0.2 services/stores/hooks
43
+ - v0.3 LAN protocol + orchestrator + restart/diagnostics
44
+ - v0.4 phoenix/events
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Auth store stub.
3
+ */
4
+ export interface AuthUser {
5
+ id: string;
6
+ email?: string;
7
+ }
8
+ export declare function setAuthUser(u: AuthUser | null): void;
9
+ export declare const useAuthStore: {
10
+ getState: () => {
11
+ user: AuthUser | null;
12
+ };
13
+ };
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ /**
3
+ * Auth store stub.
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.useAuthStore = void 0;
7
+ exports.setAuthUser = setAuthUser;
8
+ let user = null;
9
+ function setAuthUser(u) {
10
+ user = u;
11
+ }
12
+ exports.useAuthStore = {
13
+ getState: () => ({ user }),
14
+ };
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Business store stub.
3
+ */
4
+ export declare function setActiveBusiness(b: {
5
+ id: string;
6
+ } | null): void;
7
+ export declare const useBusinessStore: {
8
+ getState: () => {
9
+ activeBusiness: {
10
+ id: string;
11
+ } | null;
12
+ };
13
+ };
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ /**
3
+ * Business store stub.
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.useBusinessStore = void 0;
7
+ exports.setActiveBusiness = setActiveBusiness;
8
+ let activeBusiness = null;
9
+ function setActiveBusiness(b) {
10
+ activeBusiness = b;
11
+ }
12
+ exports.useBusinessStore = {
13
+ getState: () => ({ activeBusiness }),
14
+ };
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Connectivity adapter — replaces zustand connectivity store.
3
+ * Host apps inject real connectivity state; core defaults to offline-unknown.
4
+ */
5
+ export type CloudReachable = "reachable" | "unreachable" | "unknown";
6
+ export interface ConnectivityState {
7
+ isOnline: boolean;
8
+ isCloudReachable: CloudReachable;
9
+ }
10
+ export declare function getConnectivityState(): ConnectivityState;
11
+ export declare function setConnectivityState(patch: Partial<ConnectivityState>): void;
12
+ export declare function setCloudReachable(value: CloudReachable): void;
13
+ export declare function setOnline(value: boolean): void;
14
+ export declare function subscribeConnectivity(listener: (s: ConnectivityState) => void): () => void;
15
+ export declare const connectivityStoreShim: {
16
+ getState: typeof getConnectivityState;
17
+ };
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+ /**
3
+ * Connectivity adapter — replaces zustand connectivity store.
4
+ * Host apps inject real connectivity state; core defaults to offline-unknown.
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.connectivityStoreShim = void 0;
8
+ exports.getConnectivityState = getConnectivityState;
9
+ exports.setConnectivityState = setConnectivityState;
10
+ exports.setCloudReachable = setCloudReachable;
11
+ exports.setOnline = setOnline;
12
+ exports.subscribeConnectivity = subscribeConnectivity;
13
+ let state = {
14
+ isOnline: true,
15
+ isCloudReachable: "unknown",
16
+ };
17
+ const listeners = new Set();
18
+ function getConnectivityState() {
19
+ return { ...state };
20
+ }
21
+ function setConnectivityState(patch) {
22
+ state = { ...state, ...patch };
23
+ listeners.forEach((l) => l({ ...state }));
24
+ }
25
+ function setCloudReachable(value) {
26
+ setConnectivityState({ isCloudReachable: value });
27
+ }
28
+ function setOnline(value) {
29
+ setConnectivityState({ isOnline: value });
30
+ }
31
+ function subscribeConnectivity(listener) {
32
+ listeners.add(listener);
33
+ return () => listeners.delete(listener);
34
+ }
35
+ // Compatibility shim for code that previously used useConnectivityStore.getState()
36
+ exports.connectivityStoreShim = {
37
+ getState: getConnectivityState,
38
+ };
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Devices service stub.
3
+ */
4
+ export declare function setAppInstanceId(id: string): void;
5
+ export declare function getAppInstanceId(): string;
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ /**
3
+ * Devices service stub.
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.setAppInstanceId = setAppInstanceId;
7
+ exports.getAppInstanceId = getAppInstanceId;
8
+ let appInstanceId = "core-device-id";
9
+ function setAppInstanceId(id) {
10
+ appInstanceId = id;
11
+ }
12
+ function getAppInstanceId() {
13
+ return appInstanceId;
14
+ }
@@ -0,0 +1,30 @@
1
+ /**
2
+ * HTTP adapter — provides ApiError and a minimal api client interface.
3
+ * Host apps inject a real HTTP client (axios/fetch) via setHttpClient().
4
+ */
5
+ export declare class ApiError extends Error {
6
+ status: number;
7
+ code?: string;
8
+ data?: unknown;
9
+ constructor(message: string, status: number, code?: string, data?: unknown);
10
+ }
11
+ export interface HttpClient {
12
+ get<T>(url: string, config?: unknown): Promise<{
13
+ data: T;
14
+ }>;
15
+ post<T>(url: string, body?: unknown, config?: unknown): Promise<{
16
+ data: T;
17
+ }>;
18
+ put<T>(url: string, body?: unknown, config?: unknown): Promise<{
19
+ data: T;
20
+ }>;
21
+ patch<T>(url: string, body?: unknown, config?: unknown): Promise<{
22
+ data: T;
23
+ }>;
24
+ delete<T>(url: string, config?: unknown): Promise<{
25
+ data: T;
26
+ }>;
27
+ }
28
+ export declare function setHttpClient(c: HttpClient): void;
29
+ export declare function getHttpClient(): HttpClient;
30
+ export declare const api: HttpClient;
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ /**
3
+ * HTTP adapter — provides ApiError and a minimal api client interface.
4
+ * Host apps inject a real HTTP client (axios/fetch) via setHttpClient().
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.api = exports.ApiError = void 0;
8
+ exports.setHttpClient = setHttpClient;
9
+ exports.getHttpClient = getHttpClient;
10
+ class ApiError extends Error {
11
+ constructor(message, status, code, data) {
12
+ super(message);
13
+ this.name = "ApiError";
14
+ this.status = status;
15
+ this.code = code;
16
+ this.data = data;
17
+ }
18
+ }
19
+ exports.ApiError = ApiError;
20
+ let client = null;
21
+ function setHttpClient(c) {
22
+ client = c;
23
+ }
24
+ function getHttpClient() {
25
+ if (!client) {
26
+ throw new Error("HTTP client not injected. Call setHttpClient(client) before making API calls.");
27
+ }
28
+ return client;
29
+ }
30
+ // Default export compatible with `import { api } from "@/services/api"`
31
+ exports.api = {
32
+ get: (...args) => getHttpClient().get(...args),
33
+ post: (...args) => getHttpClient().post(...args),
34
+ put: (...args) => getHttpClient().put(...args),
35
+ patch: (...args) => getHttpClient().patch(...args),
36
+ delete: (...args) => getHttpClient().delete(...args),
37
+ };
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Image cache stub — no-op in core library.
3
+ * Host apps with file-system access inject real impl.
4
+ */
5
+ export declare function cacheImageBatch(_urls: (string | null | undefined)[], _opts?: {
6
+ skipIfCached?: boolean;
7
+ }): Promise<string[]>;
8
+ export declare function pruneImageCache(_urls: (string | null | undefined)[]): Promise<void>;
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ /**
3
+ * Image cache stub — no-op in core library.
4
+ * Host apps with file-system access inject real impl.
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.cacheImageBatch = cacheImageBatch;
8
+ exports.pruneImageCache = pruneImageCache;
9
+ async function cacheImageBatch(_urls, _opts) {
10
+ return [];
11
+ }
12
+ async function pruneImageCache(_urls) { }
@@ -0,0 +1,5 @@
1
+ export interface StateStorage {
2
+ getItem: (name: string) => string | null | Promise<string | null>;
3
+ setItem: (name: string, value: string) => void | Promise<void>;
4
+ removeItem: (name: string) => void | Promise<void>;
5
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,20 @@
1
+ /**
2
+ * KV storage adapter — async get/set/remove with in-memory fallback for tests.
3
+ * Host apps can inject a persistent backend via setKVDriver().
4
+ */
5
+ export interface KVDriver {
6
+ getItem(key: string): Promise<string | null> | string | null;
7
+ setItem(key: string, value: string): Promise<void> | void;
8
+ removeItem(key: string): Promise<void> | void;
9
+ }
10
+ export declare function setKVDriver(d: KVDriver): void;
11
+ export declare function getKVDriver(): KVDriver;
12
+ export declare function kvGetItem(key: string): Promise<string | null>;
13
+ export declare function kvSetItem(key: string, value: string): Promise<void>;
14
+ export declare function kvRemoveItem(key: string): Promise<void>;
15
+ export declare function getItem<T>(key: string): Promise<T | null>;
16
+ export declare function setItem<T>(key: string, value: T): Promise<void>;
17
+ export declare function removeItem(key: string): Promise<void>;
18
+ export declare function getItemSync<T>(key: string): T | null;
19
+ export declare function setItemSync<T>(key: string, value: T): void;
20
+ export declare function removeItemSync(key: string): void;
@@ -0,0 +1,81 @@
1
+ "use strict";
2
+ /**
3
+ * KV storage adapter — async get/set/remove with in-memory fallback for tests.
4
+ * Host apps can inject a persistent backend via setKVDriver().
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.setKVDriver = setKVDriver;
8
+ exports.getKVDriver = getKVDriver;
9
+ exports.kvGetItem = kvGetItem;
10
+ exports.kvSetItem = kvSetItem;
11
+ exports.kvRemoveItem = kvRemoveItem;
12
+ exports.getItem = getItem;
13
+ exports.setItem = setItem;
14
+ exports.removeItem = removeItem;
15
+ exports.getItemSync = getItemSync;
16
+ exports.setItemSync = setItemSync;
17
+ exports.removeItemSync = removeItemSync;
18
+ const memory = new Map();
19
+ let driver = null;
20
+ function setKVDriver(d) {
21
+ driver = d;
22
+ }
23
+ function getKVDriver() {
24
+ if (driver)
25
+ return driver;
26
+ return {
27
+ getItem: (key) => memory.get(key) ?? null,
28
+ setItem: (key, value) => {
29
+ memory.set(key, value);
30
+ },
31
+ removeItem: (key) => {
32
+ memory.delete(key);
33
+ },
34
+ };
35
+ }
36
+ async function kvGetItem(key) {
37
+ const v = await getKVDriver().getItem(key);
38
+ return v ?? null;
39
+ }
40
+ async function kvSetItem(key, value) {
41
+ await getKVDriver().setItem(key, value);
42
+ }
43
+ async function kvRemoveItem(key) {
44
+ await getKVDriver().removeItem(key);
45
+ }
46
+ // Typed JSON helpers (mirrors old storage.ts sync API but async)
47
+ async function getItem(key) {
48
+ const raw = await kvGetItem(key);
49
+ if (raw == null)
50
+ return null;
51
+ try {
52
+ return JSON.parse(raw);
53
+ }
54
+ catch {
55
+ return null;
56
+ }
57
+ }
58
+ async function setItem(key, value) {
59
+ await kvSetItem(key, JSON.stringify(value));
60
+ }
61
+ async function removeItem(key) {
62
+ await kvRemoveItem(key);
63
+ }
64
+ // Synchronous fallbacks for legacy callers that used MMKV sync API
65
+ function getItemSync(key) {
66
+ const raw = memory.get(key);
67
+ if (raw == null)
68
+ return null;
69
+ try {
70
+ return JSON.parse(raw);
71
+ }
72
+ catch {
73
+ return null;
74
+ }
75
+ }
76
+ function setItemSync(key, value) {
77
+ memory.set(key, JSON.stringify(value));
78
+ }
79
+ function removeItemSync(key) {
80
+ memory.delete(key);
81
+ }
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Local Node stubs — minimal interfaces so core compiles without RN.
3
+ * Host apps with LAN support replace these via setters.
4
+ */
5
+ import type { Command, DomainEvent } from "../sync/types";
6
+ export interface LocalNodeClient {
7
+ execute(command: Command): Promise<DomainEvent[]>;
8
+ publishEvent?(event: DomainEvent): void | Promise<void>;
9
+ }
10
+ export interface ElectedNode {
11
+ deviceId: string;
12
+ }
13
+ export declare function setLocalNodeState(s: {
14
+ isLocalNodeEnabled?: boolean;
15
+ isConnectedToNode?: boolean;
16
+ isLocalNode?: boolean;
17
+ electedNode?: ElectedNode | null;
18
+ client?: LocalNodeClient | null;
19
+ }): void;
20
+ export declare const localNodeService: {
21
+ isLocalNode: () => boolean;
22
+ isConnectedToNode: () => boolean;
23
+ getElectedNode: () => ElectedNode | null;
24
+ getClient: () => LocalNodeClient | null;
25
+ broadcastToClients: (_event: DomainEvent) => void;
26
+ handleNodeCommand: (_command: Command) => Promise<DomainEvent | null>;
27
+ };
28
+ export declare const useLocalNodeStore: {
29
+ getState: () => {
30
+ isLocalNodeEnabled: boolean;
31
+ isConnectedToNode: boolean;
32
+ electedNode: ElectedNode | null;
33
+ };
34
+ };
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ /**
3
+ * Local Node stubs — minimal interfaces so core compiles without RN.
4
+ * Host apps with LAN support replace these via setters.
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.useLocalNodeStore = exports.localNodeService = void 0;
8
+ exports.setLocalNodeState = setLocalNodeState;
9
+ let isLocalEnabled = false;
10
+ let isConnected = false;
11
+ let isLocalNodeFlag = false;
12
+ let electedNode = null;
13
+ let client = null;
14
+ function setLocalNodeState(s) {
15
+ if (s.isLocalNodeEnabled !== undefined)
16
+ isLocalEnabled = s.isLocalNodeEnabled;
17
+ if (s.isConnectedToNode !== undefined)
18
+ isConnected = s.isConnectedToNode;
19
+ if (s.isLocalNode !== undefined)
20
+ isLocalNodeFlag = s.isLocalNode;
21
+ if (s.electedNode !== undefined)
22
+ electedNode = s.electedNode;
23
+ if (s.client !== undefined)
24
+ client = s.client;
25
+ }
26
+ exports.localNodeService = {
27
+ isLocalNode: () => isLocalNodeFlag,
28
+ isConnectedToNode: () => isConnected,
29
+ getElectedNode: () => electedNode,
30
+ getClient: () => client,
31
+ broadcastToClients: (_event) => { },
32
+ handleNodeCommand: async (_command) => null,
33
+ };
34
+ exports.useLocalNodeStore = {
35
+ getState: () => ({
36
+ isLocalNodeEnabled: isLocalEnabled,
37
+ isConnectedToNode: isConnected,
38
+ electedNode,
39
+ }),
40
+ };
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Pending orders store stub.
3
+ */
4
+ import type { SellerOrder } from "../types/api/seller.api";
5
+ export declare const usePendingOrdersStore: {
6
+ getState: () => {
7
+ hydrated: boolean;
8
+ orders: SellerOrder[];
9
+ addOrder: (order: SellerOrder) => void;
10
+ removeByOrderNumber: (orderNumber: string) => void;
11
+ setHydrated: (v: boolean) => void;
12
+ };
13
+ setState: (patch: Partial<{
14
+ orders: SellerOrder[];
15
+ hydrated: boolean;
16
+ }>) => void;
17
+ };
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ /**
3
+ * Pending orders store stub.
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.usePendingOrdersStore = void 0;
7
+ let orders = [];
8
+ let hydrated = false;
9
+ exports.usePendingOrdersStore = {
10
+ getState: () => ({
11
+ hydrated,
12
+ orders,
13
+ addOrder: (order) => {
14
+ if (!orders.find((o) => o.order_number === order.order_number)) {
15
+ orders.push(order);
16
+ }
17
+ },
18
+ removeByOrderNumber: (orderNumber) => {
19
+ orders = orders.filter((o) => o.order_number !== orderNumber);
20
+ },
21
+ setHydrated: (v) => {
22
+ hydrated = v;
23
+ },
24
+ }),
25
+ setState: (patch) => {
26
+ if (patch.orders !== undefined)
27
+ orders = patch.orders;
28
+ if (patch.hydrated !== undefined)
29
+ hydrated = patch.hydrated;
30
+ },
31
+ };
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Query key stubs for reconciliation bridge.
3
+ * Real host apps expose these; core only needs shape for invalidateQueries.
4
+ */
5
+ export declare const POS_KEYS: {
6
+ all: readonly ["pos"];
7
+ orders: (businessId: string) => readonly ["pos", "orders", string];
8
+ };
9
+ export declare const SELLER_KEYS: {
10
+ all: readonly ["seller"];
11
+ };
12
+ export declare const MENU_KEYS: {
13
+ all: readonly ["menu"];
14
+ };
15
+ export declare const REFERENCE_KEYS: {
16
+ all: readonly ["reference"];
17
+ };
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ /**
3
+ * Query key stubs for reconciliation bridge.
4
+ * Real host apps expose these; core only needs shape for invalidateQueries.
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.REFERENCE_KEYS = exports.MENU_KEYS = exports.SELLER_KEYS = exports.POS_KEYS = void 0;
8
+ exports.POS_KEYS = {
9
+ all: ["pos"],
10
+ orders: (businessId) => ["pos", "orders", businessId],
11
+ };
12
+ exports.SELLER_KEYS = {
13
+ all: ["seller"],
14
+ };
15
+ exports.MENU_KEYS = {
16
+ all: ["menu"],
17
+ };
18
+ exports.REFERENCE_KEYS = {
19
+ all: ["reference"],
20
+ };
@@ -0,0 +1,62 @@
1
+ /**
2
+ * Service stubs for pos/seller/kiosk/menu/business/roles.
3
+ * Host apps can replace via setServiceImpls; core defaults to no-op that throws helpful error.
4
+ */
5
+ export declare const posService: {
6
+ createPOSOrder: (_businessId: string, _payload: unknown) => Promise<{
7
+ data: unknown;
8
+ }>;
9
+ fetchPOSOrderPreview: (_businessId: string, _payload: unknown) => Promise<unknown>;
10
+ fetchBusinessOrders: (_businessId: string, _params?: unknown) => Promise<unknown>;
11
+ };
12
+ export declare const sellerService: {
13
+ acceptOrder: (_orderId: string) => Promise<{
14
+ data: unknown;
15
+ }>;
16
+ rejectOrder: (_orderId: string) => Promise<{
17
+ data: unknown;
18
+ }>;
19
+ startPreparingOrder: (_orderId: string) => Promise<{
20
+ data: unknown;
21
+ }>;
22
+ markOrderReady: (_orderId: string) => Promise<{
23
+ data: unknown;
24
+ }>;
25
+ completeOrderPickup: (_orderId: string) => Promise<{
26
+ data: unknown;
27
+ }>;
28
+ cancelOrder: (_orderId: string) => Promise<{
29
+ data: unknown;
30
+ }>;
31
+ confirmHandover: (_deliveryId: string) => Promise<unknown>;
32
+ };
33
+ export declare const kioskService: {
34
+ assignKioskOrderToRider: (_orderId: string, _riderId: string) => Promise<unknown>;
35
+ };
36
+ export declare const menuService: {
37
+ fetchBusinessMenuItems: (_businessId: string, _page: number) => Promise<unknown>;
38
+ fetchBusinessCategories: (_businessId: string) => Promise<unknown>;
39
+ };
40
+ export declare const businessService: {
41
+ fetchBusinessMembers: (_businessId: string) => Promise<unknown>;
42
+ fetchBusinessTaxRules: (_businessId: string) => Promise<unknown>;
43
+ fetchBusinessById: (_businessId: string) => Promise<unknown>;
44
+ fetchOperatingHours: (_businessId: string) => Promise<unknown>;
45
+ };
46
+ export declare const rolesService: {
47
+ fetchBusinessRoles: () => Promise<unknown>;
48
+ };
49
+ export declare function getRegionConfig(_countryCode?: string): {
50
+ currencyCode: string;
51
+ };
52
+ export declare function formatCurrencyByRegion(amountMinor: number, _config: unknown): string;
53
+ export declare const useLocationStore: {
54
+ getState(): {
55
+ currentLocation: {
56
+ countryCode?: string;
57
+ } | null;
58
+ };
59
+ (selector: (s: {
60
+ currentLocation: unknown;
61
+ }) => unknown): unknown;
62
+ };