@teincfood/core 0.9.23 → 0.9.24
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/db/operations.d.ts +31 -0
- package/dist/db/operations.js +55 -0
- package/dist/domain/orders/service.js +25 -13
- package/dist/hooks/delivery.hooks.d.ts +24 -24
- package/dist/hooks/realtime-stubs.d.ts +26 -19
- package/dist/hooks/realtime-stubs.js +29 -124
- package/dist/hooks/rider.hooks.d.ts +48 -48
- package/dist/hooks/use-infinite-list.d.ts +24 -24
- package/dist/hooks/wallet.hooks.d.ts +24 -24
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/dist/realtime/events.service.d.ts +9 -0
- package/dist/realtime/events.service.js +37 -7
- package/dist/realtime/realtime-bridge.d.ts +30 -0
- package/dist/realtime/realtime-bridge.js +149 -0
- package/dist/reference/events.d.ts +1 -1
- package/dist/reference/service.d.ts +10 -1
- package/dist/reference/service.js +79 -19
- package/dist/sync/command-queue.service.d.ts +6 -5
- package/dist/sync/command-queue.service.js +10 -14
- package/dist/sync/full-sync.js +9 -5
- package/dist/sync/order-merge.d.ts +25 -0
- package/dist/sync/order-merge.js +61 -0
- package/dist/sync/pending-orders.service.d.ts +2 -2
- package/dist/sync/sync-jobs.service.d.ts +22 -1
- package/dist/sync/sync-jobs.service.js +81 -22
- package/dist/sync/types.d.ts +7 -0
- package/dist/sync/use-sync-reconciliation.js +12 -3
- package/dist/test-helpers/memory-driver.js +26 -5
- package/package.json +2 -2
|
@@ -47,10 +47,10 @@ export declare function useRiderDeliveriesQuery(enabled?: boolean, filters?: {
|
|
|
47
47
|
isRefetching: boolean;
|
|
48
48
|
isStale: boolean;
|
|
49
49
|
isEnabled: boolean;
|
|
50
|
-
refetch: (options?: import("@tanstack/
|
|
51
|
-
fetchStatus: import("@tanstack/
|
|
52
|
-
fetchNextPage: (options?: import("@tanstack/
|
|
53
|
-
fetchPreviousPage: (options?: import("@tanstack/
|
|
50
|
+
refetch: (options?: import("@tanstack/query-core").RefetchOptions) => Promise<import("@tanstack/query-core").QueryObserverResult<import("@tanstack/query-core").InfiniteData<import("./use-infinite-list").ListPage<RiderDelivery>, unknown>, Error>>;
|
|
51
|
+
fetchStatus: import("@tanstack/query-core").FetchStatus;
|
|
52
|
+
fetchNextPage: (options?: import("@tanstack/query-core").FetchNextPageOptions) => Promise<import("@tanstack/query-core").InfiniteQueryObserverResult<import("@tanstack/query-core").InfiniteData<import("./use-infinite-list").ListPage<RiderDelivery>, unknown>, Error>>;
|
|
53
|
+
fetchPreviousPage: (options?: import("@tanstack/query-core").FetchPreviousPageOptions) => Promise<import("@tanstack/query-core").InfiniteQueryObserverResult<import("@tanstack/query-core").InfiniteData<import("./use-infinite-list").ListPage<RiderDelivery>, unknown>, Error>>;
|
|
54
54
|
hasNextPage: boolean;
|
|
55
55
|
hasPreviousPage: boolean;
|
|
56
56
|
isFetchingNextPage: boolean;
|
|
@@ -81,10 +81,10 @@ export declare function useRiderDeliveriesQuery(enabled?: boolean, filters?: {
|
|
|
81
81
|
isRefetching: boolean;
|
|
82
82
|
isStale: boolean;
|
|
83
83
|
isEnabled: boolean;
|
|
84
|
-
refetch: (options?: import("@tanstack/
|
|
85
|
-
fetchStatus: import("@tanstack/
|
|
86
|
-
fetchNextPage: (options?: import("@tanstack/
|
|
87
|
-
fetchPreviousPage: (options?: import("@tanstack/
|
|
84
|
+
refetch: (options?: import("@tanstack/query-core").RefetchOptions) => Promise<import("@tanstack/query-core").QueryObserverResult<import("@tanstack/query-core").InfiniteData<import("./use-infinite-list").ListPage<RiderDelivery>, unknown>, Error>>;
|
|
85
|
+
fetchStatus: import("@tanstack/query-core").FetchStatus;
|
|
86
|
+
fetchNextPage: (options?: import("@tanstack/query-core").FetchNextPageOptions) => Promise<import("@tanstack/query-core").InfiniteQueryObserverResult<import("@tanstack/query-core").InfiniteData<import("./use-infinite-list").ListPage<RiderDelivery>, unknown>, Error>>;
|
|
87
|
+
fetchPreviousPage: (options?: import("@tanstack/query-core").FetchPreviousPageOptions) => Promise<import("@tanstack/query-core").InfiniteQueryObserverResult<import("@tanstack/query-core").InfiniteData<import("./use-infinite-list").ListPage<RiderDelivery>, unknown>, Error>>;
|
|
88
88
|
hasNextPage: boolean;
|
|
89
89
|
hasPreviousPage: boolean;
|
|
90
90
|
isFetchingNextPage: boolean;
|
|
@@ -116,10 +116,10 @@ export declare function useRiderDeliveriesQuery(enabled?: boolean, filters?: {
|
|
|
116
116
|
isRefetching: boolean;
|
|
117
117
|
isStale: boolean;
|
|
118
118
|
isEnabled: boolean;
|
|
119
|
-
refetch: (options?: import("@tanstack/
|
|
120
|
-
fetchStatus: import("@tanstack/
|
|
121
|
-
fetchNextPage: (options?: import("@tanstack/
|
|
122
|
-
fetchPreviousPage: (options?: import("@tanstack/
|
|
119
|
+
refetch: (options?: import("@tanstack/query-core").RefetchOptions) => Promise<import("@tanstack/query-core").QueryObserverResult<import("@tanstack/query-core").InfiniteData<import("./use-infinite-list").ListPage<RiderDelivery>, unknown>, Error>>;
|
|
120
|
+
fetchStatus: import("@tanstack/query-core").FetchStatus;
|
|
121
|
+
fetchNextPage: (options?: import("@tanstack/query-core").FetchNextPageOptions) => Promise<import("@tanstack/query-core").InfiniteQueryObserverResult<import("@tanstack/query-core").InfiniteData<import("./use-infinite-list").ListPage<RiderDelivery>, unknown>, Error>>;
|
|
122
|
+
fetchPreviousPage: (options?: import("@tanstack/query-core").FetchPreviousPageOptions) => Promise<import("@tanstack/query-core").InfiniteQueryObserverResult<import("@tanstack/query-core").InfiniteData<import("./use-infinite-list").ListPage<RiderDelivery>, unknown>, Error>>;
|
|
123
123
|
hasNextPage: boolean;
|
|
124
124
|
hasPreviousPage: boolean;
|
|
125
125
|
isFetchingNextPage: boolean;
|
|
@@ -149,10 +149,10 @@ export declare function useRiderDeliveriesQuery(enabled?: boolean, filters?: {
|
|
|
149
149
|
isRefetching: boolean;
|
|
150
150
|
isStale: boolean;
|
|
151
151
|
isEnabled: boolean;
|
|
152
|
-
refetch: (options?: import("@tanstack/
|
|
153
|
-
fetchStatus: import("@tanstack/
|
|
154
|
-
fetchNextPage: (options?: import("@tanstack/
|
|
155
|
-
fetchPreviousPage: (options?: import("@tanstack/
|
|
152
|
+
refetch: (options?: import("@tanstack/query-core").RefetchOptions) => Promise<import("@tanstack/query-core").QueryObserverResult<import("@tanstack/query-core").InfiniteData<import("./use-infinite-list").ListPage<RiderDelivery>, unknown>, Error>>;
|
|
153
|
+
fetchStatus: import("@tanstack/query-core").FetchStatus;
|
|
154
|
+
fetchNextPage: (options?: import("@tanstack/query-core").FetchNextPageOptions) => Promise<import("@tanstack/query-core").InfiniteQueryObserverResult<import("@tanstack/query-core").InfiniteData<import("./use-infinite-list").ListPage<RiderDelivery>, unknown>, Error>>;
|
|
155
|
+
fetchPreviousPage: (options?: import("@tanstack/query-core").FetchPreviousPageOptions) => Promise<import("@tanstack/query-core").InfiniteQueryObserverResult<import("@tanstack/query-core").InfiniteData<import("./use-infinite-list").ListPage<RiderDelivery>, unknown>, Error>>;
|
|
156
156
|
hasNextPage: boolean;
|
|
157
157
|
hasPreviousPage: boolean;
|
|
158
158
|
isFetchingNextPage: boolean;
|
|
@@ -183,10 +183,10 @@ export declare function useRiderDeliveriesQuery(enabled?: boolean, filters?: {
|
|
|
183
183
|
isRefetching: boolean;
|
|
184
184
|
isStale: boolean;
|
|
185
185
|
isEnabled: boolean;
|
|
186
|
-
refetch: (options?: import("@tanstack/
|
|
187
|
-
fetchStatus: import("@tanstack/
|
|
188
|
-
fetchNextPage: (options?: import("@tanstack/
|
|
189
|
-
fetchPreviousPage: (options?: import("@tanstack/
|
|
186
|
+
refetch: (options?: import("@tanstack/query-core").RefetchOptions) => Promise<import("@tanstack/query-core").QueryObserverResult<import("@tanstack/query-core").InfiniteData<import("./use-infinite-list").ListPage<RiderDelivery>, unknown>, Error>>;
|
|
187
|
+
fetchStatus: import("@tanstack/query-core").FetchStatus;
|
|
188
|
+
fetchNextPage: (options?: import("@tanstack/query-core").FetchNextPageOptions) => Promise<import("@tanstack/query-core").InfiniteQueryObserverResult<import("@tanstack/query-core").InfiniteData<import("./use-infinite-list").ListPage<RiderDelivery>, unknown>, Error>>;
|
|
189
|
+
fetchPreviousPage: (options?: import("@tanstack/query-core").FetchPreviousPageOptions) => Promise<import("@tanstack/query-core").InfiniteQueryObserverResult<import("@tanstack/query-core").InfiniteData<import("./use-infinite-list").ListPage<RiderDelivery>, unknown>, Error>>;
|
|
190
190
|
hasNextPage: boolean;
|
|
191
191
|
hasPreviousPage: boolean;
|
|
192
192
|
isFetchNextPageError: boolean;
|
|
@@ -217,10 +217,10 @@ export declare function useRiderDeliveriesQuery(enabled?: boolean, filters?: {
|
|
|
217
217
|
isRefetching: boolean;
|
|
218
218
|
isStale: boolean;
|
|
219
219
|
isEnabled: boolean;
|
|
220
|
-
refetch: (options?: import("@tanstack/
|
|
221
|
-
fetchStatus: import("@tanstack/
|
|
222
|
-
fetchNextPage: (options?: import("@tanstack/
|
|
223
|
-
fetchPreviousPage: (options?: import("@tanstack/
|
|
220
|
+
refetch: (options?: import("@tanstack/query-core").RefetchOptions) => Promise<import("@tanstack/query-core").QueryObserverResult<import("@tanstack/query-core").InfiniteData<import("./use-infinite-list").ListPage<RiderDelivery>, unknown>, Error>>;
|
|
221
|
+
fetchStatus: import("@tanstack/query-core").FetchStatus;
|
|
222
|
+
fetchNextPage: (options?: import("@tanstack/query-core").FetchNextPageOptions) => Promise<import("@tanstack/query-core").InfiniteQueryObserverResult<import("@tanstack/query-core").InfiniteData<import("./use-infinite-list").ListPage<RiderDelivery>, unknown>, Error>>;
|
|
223
|
+
fetchPreviousPage: (options?: import("@tanstack/query-core").FetchPreviousPageOptions) => Promise<import("@tanstack/query-core").InfiniteQueryObserverResult<import("@tanstack/query-core").InfiniteData<import("./use-infinite-list").ListPage<RiderDelivery>, unknown>, Error>>;
|
|
224
224
|
hasNextPage: boolean;
|
|
225
225
|
hasPreviousPage: boolean;
|
|
226
226
|
isFetchingNextPage: boolean;
|
|
@@ -261,10 +261,10 @@ export declare function useRiderWalletHistoryQuery(enabled?: boolean): {
|
|
|
261
261
|
isRefetching: boolean;
|
|
262
262
|
isStale: boolean;
|
|
263
263
|
isEnabled: boolean;
|
|
264
|
-
refetch: (options?: import("@tanstack/
|
|
265
|
-
fetchStatus: import("@tanstack/
|
|
266
|
-
fetchNextPage: (options?: import("@tanstack/
|
|
267
|
-
fetchPreviousPage: (options?: import("@tanstack/
|
|
264
|
+
refetch: (options?: import("@tanstack/query-core").RefetchOptions) => Promise<import("@tanstack/query-core").QueryObserverResult<import("@tanstack/query-core").InfiniteData<import("./use-infinite-list").ListPage<Record<string, unknown>>, unknown>, Error>>;
|
|
265
|
+
fetchStatus: import("@tanstack/query-core").FetchStatus;
|
|
266
|
+
fetchNextPage: (options?: import("@tanstack/query-core").FetchNextPageOptions) => Promise<import("@tanstack/query-core").InfiniteQueryObserverResult<import("@tanstack/query-core").InfiniteData<import("./use-infinite-list").ListPage<Record<string, unknown>>, unknown>, Error>>;
|
|
267
|
+
fetchPreviousPage: (options?: import("@tanstack/query-core").FetchPreviousPageOptions) => Promise<import("@tanstack/query-core").InfiniteQueryObserverResult<import("@tanstack/query-core").InfiniteData<import("./use-infinite-list").ListPage<Record<string, unknown>>, unknown>, Error>>;
|
|
268
268
|
hasNextPage: boolean;
|
|
269
269
|
hasPreviousPage: boolean;
|
|
270
270
|
isFetchingNextPage: boolean;
|
|
@@ -295,10 +295,10 @@ export declare function useRiderWalletHistoryQuery(enabled?: boolean): {
|
|
|
295
295
|
isRefetching: boolean;
|
|
296
296
|
isStale: boolean;
|
|
297
297
|
isEnabled: boolean;
|
|
298
|
-
refetch: (options?: import("@tanstack/
|
|
299
|
-
fetchStatus: import("@tanstack/
|
|
300
|
-
fetchNextPage: (options?: import("@tanstack/
|
|
301
|
-
fetchPreviousPage: (options?: import("@tanstack/
|
|
298
|
+
refetch: (options?: import("@tanstack/query-core").RefetchOptions) => Promise<import("@tanstack/query-core").QueryObserverResult<import("@tanstack/query-core").InfiniteData<import("./use-infinite-list").ListPage<Record<string, unknown>>, unknown>, Error>>;
|
|
299
|
+
fetchStatus: import("@tanstack/query-core").FetchStatus;
|
|
300
|
+
fetchNextPage: (options?: import("@tanstack/query-core").FetchNextPageOptions) => Promise<import("@tanstack/query-core").InfiniteQueryObserverResult<import("@tanstack/query-core").InfiniteData<import("./use-infinite-list").ListPage<Record<string, unknown>>, unknown>, Error>>;
|
|
301
|
+
fetchPreviousPage: (options?: import("@tanstack/query-core").FetchPreviousPageOptions) => Promise<import("@tanstack/query-core").InfiniteQueryObserverResult<import("@tanstack/query-core").InfiniteData<import("./use-infinite-list").ListPage<Record<string, unknown>>, unknown>, Error>>;
|
|
302
302
|
hasNextPage: boolean;
|
|
303
303
|
hasPreviousPage: boolean;
|
|
304
304
|
isFetchingNextPage: boolean;
|
|
@@ -330,10 +330,10 @@ export declare function useRiderWalletHistoryQuery(enabled?: boolean): {
|
|
|
330
330
|
isRefetching: boolean;
|
|
331
331
|
isStale: boolean;
|
|
332
332
|
isEnabled: boolean;
|
|
333
|
-
refetch: (options?: import("@tanstack/
|
|
334
|
-
fetchStatus: import("@tanstack/
|
|
335
|
-
fetchNextPage: (options?: import("@tanstack/
|
|
336
|
-
fetchPreviousPage: (options?: import("@tanstack/
|
|
333
|
+
refetch: (options?: import("@tanstack/query-core").RefetchOptions) => Promise<import("@tanstack/query-core").QueryObserverResult<import("@tanstack/query-core").InfiniteData<import("./use-infinite-list").ListPage<Record<string, unknown>>, unknown>, Error>>;
|
|
334
|
+
fetchStatus: import("@tanstack/query-core").FetchStatus;
|
|
335
|
+
fetchNextPage: (options?: import("@tanstack/query-core").FetchNextPageOptions) => Promise<import("@tanstack/query-core").InfiniteQueryObserverResult<import("@tanstack/query-core").InfiniteData<import("./use-infinite-list").ListPage<Record<string, unknown>>, unknown>, Error>>;
|
|
336
|
+
fetchPreviousPage: (options?: import("@tanstack/query-core").FetchPreviousPageOptions) => Promise<import("@tanstack/query-core").InfiniteQueryObserverResult<import("@tanstack/query-core").InfiniteData<import("./use-infinite-list").ListPage<Record<string, unknown>>, unknown>, Error>>;
|
|
337
337
|
hasNextPage: boolean;
|
|
338
338
|
hasPreviousPage: boolean;
|
|
339
339
|
isFetchingNextPage: boolean;
|
|
@@ -363,10 +363,10 @@ export declare function useRiderWalletHistoryQuery(enabled?: boolean): {
|
|
|
363
363
|
isRefetching: boolean;
|
|
364
364
|
isStale: boolean;
|
|
365
365
|
isEnabled: boolean;
|
|
366
|
-
refetch: (options?: import("@tanstack/
|
|
367
|
-
fetchStatus: import("@tanstack/
|
|
368
|
-
fetchNextPage: (options?: import("@tanstack/
|
|
369
|
-
fetchPreviousPage: (options?: import("@tanstack/
|
|
366
|
+
refetch: (options?: import("@tanstack/query-core").RefetchOptions) => Promise<import("@tanstack/query-core").QueryObserverResult<import("@tanstack/query-core").InfiniteData<import("./use-infinite-list").ListPage<Record<string, unknown>>, unknown>, Error>>;
|
|
367
|
+
fetchStatus: import("@tanstack/query-core").FetchStatus;
|
|
368
|
+
fetchNextPage: (options?: import("@tanstack/query-core").FetchNextPageOptions) => Promise<import("@tanstack/query-core").InfiniteQueryObserverResult<import("@tanstack/query-core").InfiniteData<import("./use-infinite-list").ListPage<Record<string, unknown>>, unknown>, Error>>;
|
|
369
|
+
fetchPreviousPage: (options?: import("@tanstack/query-core").FetchPreviousPageOptions) => Promise<import("@tanstack/query-core").InfiniteQueryObserverResult<import("@tanstack/query-core").InfiniteData<import("./use-infinite-list").ListPage<Record<string, unknown>>, unknown>, Error>>;
|
|
370
370
|
hasNextPage: boolean;
|
|
371
371
|
hasPreviousPage: boolean;
|
|
372
372
|
isFetchingNextPage: boolean;
|
|
@@ -397,10 +397,10 @@ export declare function useRiderWalletHistoryQuery(enabled?: boolean): {
|
|
|
397
397
|
isRefetching: boolean;
|
|
398
398
|
isStale: boolean;
|
|
399
399
|
isEnabled: boolean;
|
|
400
|
-
refetch: (options?: import("@tanstack/
|
|
401
|
-
fetchStatus: import("@tanstack/
|
|
402
|
-
fetchNextPage: (options?: import("@tanstack/
|
|
403
|
-
fetchPreviousPage: (options?: import("@tanstack/
|
|
400
|
+
refetch: (options?: import("@tanstack/query-core").RefetchOptions) => Promise<import("@tanstack/query-core").QueryObserverResult<import("@tanstack/query-core").InfiniteData<import("./use-infinite-list").ListPage<Record<string, unknown>>, unknown>, Error>>;
|
|
401
|
+
fetchStatus: import("@tanstack/query-core").FetchStatus;
|
|
402
|
+
fetchNextPage: (options?: import("@tanstack/query-core").FetchNextPageOptions) => Promise<import("@tanstack/query-core").InfiniteQueryObserverResult<import("@tanstack/query-core").InfiniteData<import("./use-infinite-list").ListPage<Record<string, unknown>>, unknown>, Error>>;
|
|
403
|
+
fetchPreviousPage: (options?: import("@tanstack/query-core").FetchPreviousPageOptions) => Promise<import("@tanstack/query-core").InfiniteQueryObserverResult<import("@tanstack/query-core").InfiniteData<import("./use-infinite-list").ListPage<Record<string, unknown>>, unknown>, Error>>;
|
|
404
404
|
hasNextPage: boolean;
|
|
405
405
|
hasPreviousPage: boolean;
|
|
406
406
|
isFetchNextPageError: boolean;
|
|
@@ -431,10 +431,10 @@ export declare function useRiderWalletHistoryQuery(enabled?: boolean): {
|
|
|
431
431
|
isRefetching: boolean;
|
|
432
432
|
isStale: boolean;
|
|
433
433
|
isEnabled: boolean;
|
|
434
|
-
refetch: (options?: import("@tanstack/
|
|
435
|
-
fetchStatus: import("@tanstack/
|
|
436
|
-
fetchNextPage: (options?: import("@tanstack/
|
|
437
|
-
fetchPreviousPage: (options?: import("@tanstack/
|
|
434
|
+
refetch: (options?: import("@tanstack/query-core").RefetchOptions) => Promise<import("@tanstack/query-core").QueryObserverResult<import("@tanstack/query-core").InfiniteData<import("./use-infinite-list").ListPage<Record<string, unknown>>, unknown>, Error>>;
|
|
435
|
+
fetchStatus: import("@tanstack/query-core").FetchStatus;
|
|
436
|
+
fetchNextPage: (options?: import("@tanstack/query-core").FetchNextPageOptions) => Promise<import("@tanstack/query-core").InfiniteQueryObserverResult<import("@tanstack/query-core").InfiniteData<import("./use-infinite-list").ListPage<Record<string, unknown>>, unknown>, Error>>;
|
|
437
|
+
fetchPreviousPage: (options?: import("@tanstack/query-core").FetchPreviousPageOptions) => Promise<import("@tanstack/query-core").InfiniteQueryObserverResult<import("@tanstack/query-core").InfiniteData<import("./use-infinite-list").ListPage<Record<string, unknown>>, unknown>, Error>>;
|
|
438
438
|
hasNextPage: boolean;
|
|
439
439
|
hasPreviousPage: boolean;
|
|
440
440
|
isFetchingNextPage: boolean;
|
|
@@ -50,10 +50,10 @@ export declare function useInfiniteList<T>(options: InfiniteListOptions<T>): {
|
|
|
50
50
|
isRefetching: boolean;
|
|
51
51
|
isStale: boolean;
|
|
52
52
|
isEnabled: boolean;
|
|
53
|
-
refetch: (options?: import("@tanstack/
|
|
54
|
-
fetchStatus: import("@tanstack/
|
|
55
|
-
fetchNextPage: (options?: import("@tanstack/
|
|
56
|
-
fetchPreviousPage: (options?: import("@tanstack/
|
|
53
|
+
refetch: (options?: import("@tanstack/query-core").RefetchOptions) => Promise<import("@tanstack/query-core").QueryObserverResult<import("@tanstack/query-core").InfiniteData<ListPage<T>, unknown>, Error>>;
|
|
54
|
+
fetchStatus: import("@tanstack/query-core").FetchStatus;
|
|
55
|
+
fetchNextPage: (options?: import("@tanstack/query-core").FetchNextPageOptions) => Promise<import("@tanstack/query-core").InfiniteQueryObserverResult<import("@tanstack/query-core").InfiniteData<ListPage<T>, unknown>, Error>>;
|
|
56
|
+
fetchPreviousPage: (options?: import("@tanstack/query-core").FetchPreviousPageOptions) => Promise<import("@tanstack/query-core").InfiniteQueryObserverResult<import("@tanstack/query-core").InfiniteData<ListPage<T>, unknown>, Error>>;
|
|
57
57
|
hasNextPage: boolean;
|
|
58
58
|
hasPreviousPage: boolean;
|
|
59
59
|
isFetchingNextPage: boolean;
|
|
@@ -84,10 +84,10 @@ export declare function useInfiniteList<T>(options: InfiniteListOptions<T>): {
|
|
|
84
84
|
isRefetching: boolean;
|
|
85
85
|
isStale: boolean;
|
|
86
86
|
isEnabled: boolean;
|
|
87
|
-
refetch: (options?: import("@tanstack/
|
|
88
|
-
fetchStatus: import("@tanstack/
|
|
89
|
-
fetchNextPage: (options?: import("@tanstack/
|
|
90
|
-
fetchPreviousPage: (options?: import("@tanstack/
|
|
87
|
+
refetch: (options?: import("@tanstack/query-core").RefetchOptions) => Promise<import("@tanstack/query-core").QueryObserverResult<import("@tanstack/query-core").InfiniteData<ListPage<T>, unknown>, Error>>;
|
|
88
|
+
fetchStatus: import("@tanstack/query-core").FetchStatus;
|
|
89
|
+
fetchNextPage: (options?: import("@tanstack/query-core").FetchNextPageOptions) => Promise<import("@tanstack/query-core").InfiniteQueryObserverResult<import("@tanstack/query-core").InfiniteData<ListPage<T>, unknown>, Error>>;
|
|
90
|
+
fetchPreviousPage: (options?: import("@tanstack/query-core").FetchPreviousPageOptions) => Promise<import("@tanstack/query-core").InfiniteQueryObserverResult<import("@tanstack/query-core").InfiniteData<ListPage<T>, unknown>, Error>>;
|
|
91
91
|
hasNextPage: boolean;
|
|
92
92
|
hasPreviousPage: boolean;
|
|
93
93
|
isFetchingNextPage: boolean;
|
|
@@ -119,10 +119,10 @@ export declare function useInfiniteList<T>(options: InfiniteListOptions<T>): {
|
|
|
119
119
|
isRefetching: boolean;
|
|
120
120
|
isStale: boolean;
|
|
121
121
|
isEnabled: boolean;
|
|
122
|
-
refetch: (options?: import("@tanstack/
|
|
123
|
-
fetchStatus: import("@tanstack/
|
|
124
|
-
fetchNextPage: (options?: import("@tanstack/
|
|
125
|
-
fetchPreviousPage: (options?: import("@tanstack/
|
|
122
|
+
refetch: (options?: import("@tanstack/query-core").RefetchOptions) => Promise<import("@tanstack/query-core").QueryObserverResult<import("@tanstack/query-core").InfiniteData<ListPage<T>, unknown>, Error>>;
|
|
123
|
+
fetchStatus: import("@tanstack/query-core").FetchStatus;
|
|
124
|
+
fetchNextPage: (options?: import("@tanstack/query-core").FetchNextPageOptions) => Promise<import("@tanstack/query-core").InfiniteQueryObserverResult<import("@tanstack/query-core").InfiniteData<ListPage<T>, unknown>, Error>>;
|
|
125
|
+
fetchPreviousPage: (options?: import("@tanstack/query-core").FetchPreviousPageOptions) => Promise<import("@tanstack/query-core").InfiniteQueryObserverResult<import("@tanstack/query-core").InfiniteData<ListPage<T>, unknown>, Error>>;
|
|
126
126
|
hasNextPage: boolean;
|
|
127
127
|
hasPreviousPage: boolean;
|
|
128
128
|
isFetchingNextPage: boolean;
|
|
@@ -152,10 +152,10 @@ export declare function useInfiniteList<T>(options: InfiniteListOptions<T>): {
|
|
|
152
152
|
isRefetching: boolean;
|
|
153
153
|
isStale: boolean;
|
|
154
154
|
isEnabled: boolean;
|
|
155
|
-
refetch: (options?: import("@tanstack/
|
|
156
|
-
fetchStatus: import("@tanstack/
|
|
157
|
-
fetchNextPage: (options?: import("@tanstack/
|
|
158
|
-
fetchPreviousPage: (options?: import("@tanstack/
|
|
155
|
+
refetch: (options?: import("@tanstack/query-core").RefetchOptions) => Promise<import("@tanstack/query-core").QueryObserverResult<import("@tanstack/query-core").InfiniteData<ListPage<T>, unknown>, Error>>;
|
|
156
|
+
fetchStatus: import("@tanstack/query-core").FetchStatus;
|
|
157
|
+
fetchNextPage: (options?: import("@tanstack/query-core").FetchNextPageOptions) => Promise<import("@tanstack/query-core").InfiniteQueryObserverResult<import("@tanstack/query-core").InfiniteData<ListPage<T>, unknown>, Error>>;
|
|
158
|
+
fetchPreviousPage: (options?: import("@tanstack/query-core").FetchPreviousPageOptions) => Promise<import("@tanstack/query-core").InfiniteQueryObserverResult<import("@tanstack/query-core").InfiniteData<ListPage<T>, unknown>, Error>>;
|
|
159
159
|
hasNextPage: boolean;
|
|
160
160
|
hasPreviousPage: boolean;
|
|
161
161
|
isFetchingNextPage: boolean;
|
|
@@ -186,10 +186,10 @@ export declare function useInfiniteList<T>(options: InfiniteListOptions<T>): {
|
|
|
186
186
|
isRefetching: boolean;
|
|
187
187
|
isStale: boolean;
|
|
188
188
|
isEnabled: boolean;
|
|
189
|
-
refetch: (options?: import("@tanstack/
|
|
190
|
-
fetchStatus: import("@tanstack/
|
|
191
|
-
fetchNextPage: (options?: import("@tanstack/
|
|
192
|
-
fetchPreviousPage: (options?: import("@tanstack/
|
|
189
|
+
refetch: (options?: import("@tanstack/query-core").RefetchOptions) => Promise<import("@tanstack/query-core").QueryObserverResult<import("@tanstack/query-core").InfiniteData<ListPage<T>, unknown>, Error>>;
|
|
190
|
+
fetchStatus: import("@tanstack/query-core").FetchStatus;
|
|
191
|
+
fetchNextPage: (options?: import("@tanstack/query-core").FetchNextPageOptions) => Promise<import("@tanstack/query-core").InfiniteQueryObserverResult<import("@tanstack/query-core").InfiniteData<ListPage<T>, unknown>, Error>>;
|
|
192
|
+
fetchPreviousPage: (options?: import("@tanstack/query-core").FetchPreviousPageOptions) => Promise<import("@tanstack/query-core").InfiniteQueryObserverResult<import("@tanstack/query-core").InfiniteData<ListPage<T>, unknown>, Error>>;
|
|
193
193
|
hasNextPage: boolean;
|
|
194
194
|
hasPreviousPage: boolean;
|
|
195
195
|
isFetchNextPageError: boolean;
|
|
@@ -220,10 +220,10 @@ export declare function useInfiniteList<T>(options: InfiniteListOptions<T>): {
|
|
|
220
220
|
isRefetching: boolean;
|
|
221
221
|
isStale: boolean;
|
|
222
222
|
isEnabled: boolean;
|
|
223
|
-
refetch: (options?: import("@tanstack/
|
|
224
|
-
fetchStatus: import("@tanstack/
|
|
225
|
-
fetchNextPage: (options?: import("@tanstack/
|
|
226
|
-
fetchPreviousPage: (options?: import("@tanstack/
|
|
223
|
+
refetch: (options?: import("@tanstack/query-core").RefetchOptions) => Promise<import("@tanstack/query-core").QueryObserverResult<import("@tanstack/query-core").InfiniteData<ListPage<T>, unknown>, Error>>;
|
|
224
|
+
fetchStatus: import("@tanstack/query-core").FetchStatus;
|
|
225
|
+
fetchNextPage: (options?: import("@tanstack/query-core").FetchNextPageOptions) => Promise<import("@tanstack/query-core").InfiniteQueryObserverResult<import("@tanstack/query-core").InfiniteData<ListPage<T>, unknown>, Error>>;
|
|
226
|
+
fetchPreviousPage: (options?: import("@tanstack/query-core").FetchPreviousPageOptions) => Promise<import("@tanstack/query-core").InfiniteQueryObserverResult<import("@tanstack/query-core").InfiniteData<ListPage<T>, unknown>, Error>>;
|
|
227
227
|
hasNextPage: boolean;
|
|
228
228
|
hasPreviousPage: boolean;
|
|
229
229
|
isFetchingNextPage: boolean;
|
|
@@ -26,10 +26,10 @@ export declare function useWalletHistoryQuery(enabled?: boolean): {
|
|
|
26
26
|
isRefetching: boolean;
|
|
27
27
|
isStale: boolean;
|
|
28
28
|
isEnabled: boolean;
|
|
29
|
-
refetch: (options?: import("@tanstack/
|
|
30
|
-
fetchStatus: import("@tanstack/
|
|
31
|
-
fetchNextPage: (options?: import("@tanstack/
|
|
32
|
-
fetchPreviousPage: (options?: import("@tanstack/
|
|
29
|
+
refetch: (options?: import("@tanstack/query-core").RefetchOptions) => Promise<import("@tanstack/query-core").QueryObserverResult<import("@tanstack/query-core").InfiniteData<import("./use-infinite-list").ListPage<WalletEntry>, unknown>, Error>>;
|
|
30
|
+
fetchStatus: import("@tanstack/query-core").FetchStatus;
|
|
31
|
+
fetchNextPage: (options?: import("@tanstack/query-core").FetchNextPageOptions) => Promise<import("@tanstack/query-core").InfiniteQueryObserverResult<import("@tanstack/query-core").InfiniteData<import("./use-infinite-list").ListPage<WalletEntry>, unknown>, Error>>;
|
|
32
|
+
fetchPreviousPage: (options?: import("@tanstack/query-core").FetchPreviousPageOptions) => Promise<import("@tanstack/query-core").InfiniteQueryObserverResult<import("@tanstack/query-core").InfiniteData<import("./use-infinite-list").ListPage<WalletEntry>, unknown>, Error>>;
|
|
33
33
|
hasNextPage: boolean;
|
|
34
34
|
hasPreviousPage: boolean;
|
|
35
35
|
isFetchingNextPage: boolean;
|
|
@@ -60,10 +60,10 @@ export declare function useWalletHistoryQuery(enabled?: boolean): {
|
|
|
60
60
|
isRefetching: boolean;
|
|
61
61
|
isStale: boolean;
|
|
62
62
|
isEnabled: boolean;
|
|
63
|
-
refetch: (options?: import("@tanstack/
|
|
64
|
-
fetchStatus: import("@tanstack/
|
|
65
|
-
fetchNextPage: (options?: import("@tanstack/
|
|
66
|
-
fetchPreviousPage: (options?: import("@tanstack/
|
|
63
|
+
refetch: (options?: import("@tanstack/query-core").RefetchOptions) => Promise<import("@tanstack/query-core").QueryObserverResult<import("@tanstack/query-core").InfiniteData<import("./use-infinite-list").ListPage<WalletEntry>, unknown>, Error>>;
|
|
64
|
+
fetchStatus: import("@tanstack/query-core").FetchStatus;
|
|
65
|
+
fetchNextPage: (options?: import("@tanstack/query-core").FetchNextPageOptions) => Promise<import("@tanstack/query-core").InfiniteQueryObserverResult<import("@tanstack/query-core").InfiniteData<import("./use-infinite-list").ListPage<WalletEntry>, unknown>, Error>>;
|
|
66
|
+
fetchPreviousPage: (options?: import("@tanstack/query-core").FetchPreviousPageOptions) => Promise<import("@tanstack/query-core").InfiniteQueryObserverResult<import("@tanstack/query-core").InfiniteData<import("./use-infinite-list").ListPage<WalletEntry>, unknown>, Error>>;
|
|
67
67
|
hasNextPage: boolean;
|
|
68
68
|
hasPreviousPage: boolean;
|
|
69
69
|
isFetchingNextPage: boolean;
|
|
@@ -95,10 +95,10 @@ export declare function useWalletHistoryQuery(enabled?: boolean): {
|
|
|
95
95
|
isRefetching: boolean;
|
|
96
96
|
isStale: boolean;
|
|
97
97
|
isEnabled: boolean;
|
|
98
|
-
refetch: (options?: import("@tanstack/
|
|
99
|
-
fetchStatus: import("@tanstack/
|
|
100
|
-
fetchNextPage: (options?: import("@tanstack/
|
|
101
|
-
fetchPreviousPage: (options?: import("@tanstack/
|
|
98
|
+
refetch: (options?: import("@tanstack/query-core").RefetchOptions) => Promise<import("@tanstack/query-core").QueryObserverResult<import("@tanstack/query-core").InfiniteData<import("./use-infinite-list").ListPage<WalletEntry>, unknown>, Error>>;
|
|
99
|
+
fetchStatus: import("@tanstack/query-core").FetchStatus;
|
|
100
|
+
fetchNextPage: (options?: import("@tanstack/query-core").FetchNextPageOptions) => Promise<import("@tanstack/query-core").InfiniteQueryObserverResult<import("@tanstack/query-core").InfiniteData<import("./use-infinite-list").ListPage<WalletEntry>, unknown>, Error>>;
|
|
101
|
+
fetchPreviousPage: (options?: import("@tanstack/query-core").FetchPreviousPageOptions) => Promise<import("@tanstack/query-core").InfiniteQueryObserverResult<import("@tanstack/query-core").InfiniteData<import("./use-infinite-list").ListPage<WalletEntry>, unknown>, Error>>;
|
|
102
102
|
hasNextPage: boolean;
|
|
103
103
|
hasPreviousPage: boolean;
|
|
104
104
|
isFetchingNextPage: boolean;
|
|
@@ -128,10 +128,10 @@ export declare function useWalletHistoryQuery(enabled?: boolean): {
|
|
|
128
128
|
isRefetching: boolean;
|
|
129
129
|
isStale: boolean;
|
|
130
130
|
isEnabled: boolean;
|
|
131
|
-
refetch: (options?: import("@tanstack/
|
|
132
|
-
fetchStatus: import("@tanstack/
|
|
133
|
-
fetchNextPage: (options?: import("@tanstack/
|
|
134
|
-
fetchPreviousPage: (options?: import("@tanstack/
|
|
131
|
+
refetch: (options?: import("@tanstack/query-core").RefetchOptions) => Promise<import("@tanstack/query-core").QueryObserverResult<import("@tanstack/query-core").InfiniteData<import("./use-infinite-list").ListPage<WalletEntry>, unknown>, Error>>;
|
|
132
|
+
fetchStatus: import("@tanstack/query-core").FetchStatus;
|
|
133
|
+
fetchNextPage: (options?: import("@tanstack/query-core").FetchNextPageOptions) => Promise<import("@tanstack/query-core").InfiniteQueryObserverResult<import("@tanstack/query-core").InfiniteData<import("./use-infinite-list").ListPage<WalletEntry>, unknown>, Error>>;
|
|
134
|
+
fetchPreviousPage: (options?: import("@tanstack/query-core").FetchPreviousPageOptions) => Promise<import("@tanstack/query-core").InfiniteQueryObserverResult<import("@tanstack/query-core").InfiniteData<import("./use-infinite-list").ListPage<WalletEntry>, unknown>, Error>>;
|
|
135
135
|
hasNextPage: boolean;
|
|
136
136
|
hasPreviousPage: boolean;
|
|
137
137
|
isFetchingNextPage: boolean;
|
|
@@ -162,10 +162,10 @@ export declare function useWalletHistoryQuery(enabled?: boolean): {
|
|
|
162
162
|
isRefetching: boolean;
|
|
163
163
|
isStale: boolean;
|
|
164
164
|
isEnabled: boolean;
|
|
165
|
-
refetch: (options?: import("@tanstack/
|
|
166
|
-
fetchStatus: import("@tanstack/
|
|
167
|
-
fetchNextPage: (options?: import("@tanstack/
|
|
168
|
-
fetchPreviousPage: (options?: import("@tanstack/
|
|
165
|
+
refetch: (options?: import("@tanstack/query-core").RefetchOptions) => Promise<import("@tanstack/query-core").QueryObserverResult<import("@tanstack/query-core").InfiniteData<import("./use-infinite-list").ListPage<WalletEntry>, unknown>, Error>>;
|
|
166
|
+
fetchStatus: import("@tanstack/query-core").FetchStatus;
|
|
167
|
+
fetchNextPage: (options?: import("@tanstack/query-core").FetchNextPageOptions) => Promise<import("@tanstack/query-core").InfiniteQueryObserverResult<import("@tanstack/query-core").InfiniteData<import("./use-infinite-list").ListPage<WalletEntry>, unknown>, Error>>;
|
|
168
|
+
fetchPreviousPage: (options?: import("@tanstack/query-core").FetchPreviousPageOptions) => Promise<import("@tanstack/query-core").InfiniteQueryObserverResult<import("@tanstack/query-core").InfiniteData<import("./use-infinite-list").ListPage<WalletEntry>, unknown>, Error>>;
|
|
169
169
|
hasNextPage: boolean;
|
|
170
170
|
hasPreviousPage: boolean;
|
|
171
171
|
isFetchNextPageError: boolean;
|
|
@@ -196,10 +196,10 @@ export declare function useWalletHistoryQuery(enabled?: boolean): {
|
|
|
196
196
|
isRefetching: boolean;
|
|
197
197
|
isStale: boolean;
|
|
198
198
|
isEnabled: boolean;
|
|
199
|
-
refetch: (options?: import("@tanstack/
|
|
200
|
-
fetchStatus: import("@tanstack/
|
|
201
|
-
fetchNextPage: (options?: import("@tanstack/
|
|
202
|
-
fetchPreviousPage: (options?: import("@tanstack/
|
|
199
|
+
refetch: (options?: import("@tanstack/query-core").RefetchOptions) => Promise<import("@tanstack/query-core").QueryObserverResult<import("@tanstack/query-core").InfiniteData<import("./use-infinite-list").ListPage<WalletEntry>, unknown>, Error>>;
|
|
200
|
+
fetchStatus: import("@tanstack/query-core").FetchStatus;
|
|
201
|
+
fetchNextPage: (options?: import("@tanstack/query-core").FetchNextPageOptions) => Promise<import("@tanstack/query-core").InfiniteQueryObserverResult<import("@tanstack/query-core").InfiniteData<import("./use-infinite-list").ListPage<WalletEntry>, unknown>, Error>>;
|
|
202
|
+
fetchPreviousPage: (options?: import("@tanstack/query-core").FetchPreviousPageOptions) => Promise<import("@tanstack/query-core").InfiniteQueryObserverResult<import("@tanstack/query-core").InfiniteData<import("./use-infinite-list").ListPage<WalletEntry>, unknown>, Error>>;
|
|
203
203
|
hasNextPage: boolean;
|
|
204
204
|
hasPreviousPage: boolean;
|
|
205
205
|
isFetchingNextPage: boolean;
|
package/dist/index.d.ts
CHANGED
|
@@ -44,6 +44,7 @@ export { createAppQueryClient, createQueryPersister } from "./providers/query-cl
|
|
|
44
44
|
export { useSellerAnalyticsQuery } from "./hooks/analytics.hooks";
|
|
45
45
|
export { useSellerDashboardQuery } from "./hooks/dashboard.hooks";
|
|
46
46
|
export { useRealtimeInvalidation, useOrderRealtimeUpdates } from "./hooks/realtime-stubs";
|
|
47
|
+
export { useGlobalRealtimeBridge, subscribeGlobalRealtime } from "./realtime/realtime-bridge";
|
|
47
48
|
export { useAcceptFleetInvitationMutation, useAcceptBusinessInvitationMutation, useUserInvitationsQuery, } from "./hooks/members.hooks";
|
|
48
49
|
export { useJoinRequestsQuery } from "./hooks/fleet.hooks";
|
|
49
50
|
export * from "./db/migrations";
|
package/dist/index.js
CHANGED
|
@@ -44,6 +44,7 @@ export { createAppQueryClient, createQueryPersister } from "./providers/query-cl
|
|
|
44
44
|
export { useSellerAnalyticsQuery } from "./hooks/analytics.hooks";
|
|
45
45
|
export { useSellerDashboardQuery } from "./hooks/dashboard.hooks";
|
|
46
46
|
export { useRealtimeInvalidation, useOrderRealtimeUpdates } from "./hooks/realtime-stubs";
|
|
47
|
+
export { useGlobalRealtimeBridge, subscribeGlobalRealtime } from "./realtime/realtime-bridge";
|
|
47
48
|
export { useAcceptFleetInvitationMutation, useAcceptBusinessInvitationMutation, useUserInvitationsQuery, } from "./hooks/members.hooks";
|
|
48
49
|
export { useJoinRequestsQuery } from "./hooks/fleet.hooks";
|
|
49
50
|
// ── DB ──
|
|
@@ -3,11 +3,20 @@ declare class EventsService {
|
|
|
3
3
|
private refCount;
|
|
4
4
|
private topic;
|
|
5
5
|
private joined;
|
|
6
|
+
/**
|
|
7
|
+
* Last event sequence per business. The backend sequence is global, but the
|
|
8
|
+
* watermark is kept per business so switching business (or account) never
|
|
9
|
+
* inherits — and therefore never skips — the other scope's events.
|
|
10
|
+
*/
|
|
11
|
+
private sequences;
|
|
6
12
|
private lastSequence;
|
|
7
13
|
private activeBusinessId;
|
|
14
|
+
private activeUserId;
|
|
8
15
|
private listeners;
|
|
9
16
|
private wildcardListeners;
|
|
10
17
|
private frameHandlerUnsub;
|
|
18
|
+
private currentSequence;
|
|
19
|
+
private setCurrentSequence;
|
|
11
20
|
connect(userId: string, businessId?: string | null): () => void;
|
|
12
21
|
on(eventType: string, callback: EventCallback): () => void;
|
|
13
22
|
onAny(callback: EventCallback): () => void;
|
|
@@ -5,12 +5,30 @@ class EventsService {
|
|
|
5
5
|
this.refCount = 0;
|
|
6
6
|
this.topic = null;
|
|
7
7
|
this.joined = false;
|
|
8
|
+
/**
|
|
9
|
+
* Last event sequence per business. The backend sequence is global, but the
|
|
10
|
+
* watermark is kept per business so switching business (or account) never
|
|
11
|
+
* inherits — and therefore never skips — the other scope's events.
|
|
12
|
+
*/
|
|
13
|
+
this.sequences = new Map();
|
|
8
14
|
this.lastSequence = 0;
|
|
9
15
|
this.activeBusinessId = null;
|
|
16
|
+
this.activeUserId = null;
|
|
10
17
|
this.listeners = new Map();
|
|
11
18
|
this.wildcardListeners = new Set();
|
|
12
19
|
this.frameHandlerUnsub = null;
|
|
13
20
|
}
|
|
21
|
+
currentSequence() {
|
|
22
|
+
if (this.activeBusinessId)
|
|
23
|
+
return this.sequences.get(this.activeBusinessId) ?? 0;
|
|
24
|
+
return this.lastSequence;
|
|
25
|
+
}
|
|
26
|
+
setCurrentSequence(sequence) {
|
|
27
|
+
if (this.activeBusinessId)
|
|
28
|
+
this.sequences.set(this.activeBusinessId, sequence);
|
|
29
|
+
else
|
|
30
|
+
this.lastSequence = sequence;
|
|
31
|
+
}
|
|
14
32
|
connect(userId, businessId) {
|
|
15
33
|
this.refCount++;
|
|
16
34
|
const topic = `events:${userId}`;
|
|
@@ -18,18 +36,26 @@ class EventsService {
|
|
|
18
36
|
this.activeBusinessId = businessId ?? null;
|
|
19
37
|
if (this.refCount === 1 && !this.frameHandlerUnsub) {
|
|
20
38
|
this.topic = topic;
|
|
39
|
+
// A different account has a different authorization scope: sequences
|
|
40
|
+
// from the previous account are not comparable, so start clean.
|
|
41
|
+
if (this.activeUserId !== userId) {
|
|
42
|
+
this.activeUserId = userId;
|
|
43
|
+
this.sequences.clear();
|
|
44
|
+
this.lastSequence = 0;
|
|
45
|
+
}
|
|
21
46
|
this.frameHandlerUnsub = phoenixSocket.onFrame(topic, ([_joinRef, _ref, _topic, event, payload]) => {
|
|
22
47
|
const data = payload;
|
|
23
48
|
const payloadBid = data?.business_id;
|
|
24
49
|
if (this.activeBusinessId && payloadBid && payloadBid !== this.activeBusinessId)
|
|
25
50
|
return;
|
|
26
51
|
const sequence = data?._sequence;
|
|
27
|
-
|
|
52
|
+
const last = this.currentSequence();
|
|
53
|
+
if (typeof sequence === "number" && sequence <= last)
|
|
28
54
|
return;
|
|
29
|
-
if (typeof sequence === "number"
|
|
30
|
-
this.
|
|
55
|
+
if (typeof sequence === "number")
|
|
56
|
+
this.setCurrentSequence(sequence);
|
|
31
57
|
else if (typeof data?._sequence === "number")
|
|
32
|
-
this.
|
|
58
|
+
this.setCurrentSequence(data._sequence);
|
|
33
59
|
// Business-state frames are LOUD (info): when live updates stall,
|
|
34
60
|
// these lines prove whether the backend pushed anything at all.
|
|
35
61
|
if (event.startsWith("order.") ||
|
|
@@ -52,8 +78,9 @@ class EventsService {
|
|
|
52
78
|
this.wildcardListeners.forEach((cb) => cb(data));
|
|
53
79
|
});
|
|
54
80
|
const joinPayload = {};
|
|
55
|
-
|
|
56
|
-
|
|
81
|
+
const joinSequence = this.currentSequence();
|
|
82
|
+
if (joinSequence > 0)
|
|
83
|
+
joinPayload.last_sequence = joinSequence;
|
|
57
84
|
if (this.activeBusinessId)
|
|
58
85
|
joinPayload.business_id = this.activeBusinessId;
|
|
59
86
|
phoenixSocket
|
|
@@ -111,6 +138,9 @@ class EventsService {
|
|
|
111
138
|
}
|
|
112
139
|
onAny(callback) { this.wildcardListeners.add(callback); return () => this.wildcardListeners.delete(callback); }
|
|
113
140
|
isConnected() { return this.joined && phoenixSocket.isConnected(); }
|
|
114
|
-
resetSequence() {
|
|
141
|
+
resetSequence() {
|
|
142
|
+
this.lastSequence = 0;
|
|
143
|
+
this.sequences.clear();
|
|
144
|
+
}
|
|
115
145
|
}
|
|
116
146
|
export const eventsService = new EventsService();
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Global realtime bridge — ONE Phoenix subscription for the whole app.
|
|
3
|
+
*
|
|
4
|
+
* Before this module existed, cloud events were only processed by screens
|
|
5
|
+
* that mounted `useOrderRealtimeUpdates` (POS, Orders, Kitchen, Display).
|
|
6
|
+
* Any other screen — the Dashboard, Settings, the business switcher — never
|
|
7
|
+
* saw another terminal's order, and every mounted screen duplicated the
|
|
8
|
+
* same handling (one persist + publish + invalidate per screen).
|
|
9
|
+
*
|
|
10
|
+
* The bridge is the single owner of the cloud → local event path:
|
|
11
|
+
*
|
|
12
|
+
* Phoenix frame
|
|
13
|
+
* → orderEventsService (typed event fan-out)
|
|
14
|
+
* → business filter (active business only)
|
|
15
|
+
* → syncEngine.publish(domainEvent)
|
|
16
|
+
* → useSyncReconciliation: journal + read-model patch +
|
|
17
|
+
* debounced query invalidation (+ LAN relay for mesh peers)
|
|
18
|
+
* → unknown `order.created` → fetch THAT order only
|
|
19
|
+
*
|
|
20
|
+
* Mounting it from several hooks is safe: the underlying subscription is
|
|
21
|
+
* created once and torn down when the last consumer unmounts.
|
|
22
|
+
*/
|
|
23
|
+
/**
|
|
24
|
+
* Subscribe to the global realtime bridge.
|
|
25
|
+
* Safe to call from multiple hooks — the underlying socket listener is
|
|
26
|
+
* created once and disposed when the last caller releases it.
|
|
27
|
+
*/
|
|
28
|
+
export declare function subscribeGlobalRealtime(): () => void;
|
|
29
|
+
/** React hook wrapper around `subscribeGlobalRealtime`. */
|
|
30
|
+
export declare function useGlobalRealtimeBridge(): void;
|