@edgebasejs/react-native 0.1.8 → 0.1.9

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 (145) hide show
  1. package/README.md +18 -0
  2. package/dist/client-core/src/index.d.ts +4 -0
  3. package/dist/client-core/src/index.d.ts.map +1 -1
  4. package/dist/client-core/src/index.js +4 -0
  5. package/dist/client-core/src/index.js.map +1 -1
  6. package/dist/client-core/src/mutations/batch-processor-client.d.ts +67 -0
  7. package/dist/client-core/src/mutations/batch-processor-client.d.ts.map +1 -0
  8. package/dist/client-core/src/mutations/batch-processor-client.js +64 -0
  9. package/dist/client-core/src/mutations/batch-processor-client.js.map +1 -0
  10. package/dist/client-core/src/mutations/transaction-hook.d.ts +80 -0
  11. package/dist/client-core/src/mutations/transaction-hook.d.ts.map +1 -0
  12. package/dist/client-core/src/mutations/transaction-hook.js +204 -0
  13. package/dist/client-core/src/mutations/transaction-hook.js.map +1 -0
  14. package/dist/client-core/src/realtime/realtime-sync-manager.d.ts +55 -0
  15. package/dist/client-core/src/realtime/realtime-sync-manager.d.ts.map +1 -0
  16. package/dist/client-core/src/realtime/realtime-sync-manager.js +208 -0
  17. package/dist/client-core/src/realtime/realtime-sync-manager.js.map +1 -0
  18. package/dist/client-core/src/realtime/subscription-handler.d.ts +74 -0
  19. package/dist/client-core/src/realtime/subscription-handler.d.ts.map +1 -0
  20. package/dist/client-core/src/realtime/subscription-handler.js +224 -0
  21. package/dist/client-core/src/realtime/subscription-handler.js.map +1 -0
  22. package/dist/client-core/src/sync/sync-engine.d.ts +10 -0
  23. package/dist/client-core/src/sync/sync-engine.d.ts.map +1 -1
  24. package/dist/client-core/src/sync/sync-engine.js +37 -5
  25. package/dist/client-core/src/sync/sync-engine.js.map +1 -1
  26. package/dist/client-react-native/src/hooks/index.d.ts +10 -0
  27. package/dist/client-react-native/src/hooks/index.d.ts.map +1 -1
  28. package/dist/client-react-native/src/hooks/index.js +8 -0
  29. package/dist/client-react-native/src/hooks/index.js.map +1 -1
  30. package/dist/client-react-native/src/hooks/use-audit.d.ts +65 -0
  31. package/dist/client-react-native/src/hooks/use-audit.d.ts.map +1 -0
  32. package/dist/client-react-native/src/hooks/use-audit.js +201 -0
  33. package/dist/client-react-native/src/hooks/use-audit.js.map +1 -0
  34. package/dist/client-react-native/src/hooks/use-batch-mutation.d.ts +56 -0
  35. package/dist/client-react-native/src/hooks/use-batch-mutation.d.ts.map +1 -0
  36. package/dist/client-react-native/src/hooks/use-batch-mutation.js +95 -0
  37. package/dist/client-react-native/src/hooks/use-batch-mutation.js.map +1 -0
  38. package/dist/client-react-native/src/hooks/use-encryption.d.ts +45 -0
  39. package/dist/client-react-native/src/hooks/use-encryption.d.ts.map +1 -0
  40. package/dist/client-react-native/src/hooks/use-encryption.js +143 -0
  41. package/dist/client-react-native/src/hooks/use-encryption.js.map +1 -0
  42. package/dist/client-react-native/src/hooks/use-file-manager.d.ts +38 -0
  43. package/dist/client-react-native/src/hooks/use-file-manager.d.ts.map +1 -0
  44. package/dist/client-react-native/src/hooks/use-file-manager.js +174 -0
  45. package/dist/client-react-native/src/hooks/use-file-manager.js.map +1 -0
  46. package/dist/client-react-native/src/hooks/use-file-upload.d.ts +34 -0
  47. package/dist/client-react-native/src/hooks/use-file-upload.d.ts.map +1 -0
  48. package/dist/client-react-native/src/hooks/use-file-upload.js +85 -0
  49. package/dist/client-react-native/src/hooks/use-file-upload.js.map +1 -0
  50. package/dist/client-react-native/src/hooks/use-mutation.d.ts.map +1 -1
  51. package/dist/client-react-native/src/hooks/use-mutation.js +34 -6
  52. package/dist/client-react-native/src/hooks/use-mutation.js.map +1 -1
  53. package/dist/client-react-native/src/hooks/use-search.d.ts +33 -0
  54. package/dist/client-react-native/src/hooks/use-search.d.ts.map +1 -0
  55. package/dist/client-react-native/src/hooks/use-search.js +174 -0
  56. package/dist/client-react-native/src/hooks/use-search.js.map +1 -0
  57. package/dist/client-react-native/src/hooks/use-subscribe.d.ts +14 -0
  58. package/dist/client-react-native/src/hooks/use-subscribe.d.ts.map +1 -0
  59. package/dist/client-react-native/src/hooks/use-subscribe.js +165 -0
  60. package/dist/client-react-native/src/hooks/use-subscribe.js.map +1 -0
  61. package/dist/client-react-native/src/hooks/use-transaction.d.ts +27 -0
  62. package/dist/client-react-native/src/hooks/use-transaction.d.ts.map +1 -0
  63. package/dist/client-react-native/src/hooks/use-transaction.js +160 -0
  64. package/dist/client-react-native/src/hooks/use-transaction.js.map +1 -0
  65. package/dist/client-react-native/src/provider.d.ts +5 -2
  66. package/dist/client-react-native/src/provider.d.ts.map +1 -1
  67. package/dist/client-react-native/src/provider.js +23 -23
  68. package/dist/client-react-native/src/provider.js.map +1 -1
  69. package/dist/core/src/access-rules/column-security.d.ts +80 -0
  70. package/dist/core/src/access-rules/column-security.d.ts.map +1 -0
  71. package/dist/core/src/access-rules/column-security.js +191 -0
  72. package/dist/core/src/access-rules/column-security.js.map +1 -0
  73. package/dist/core/src/access-rules/engine.d.ts +26 -0
  74. package/dist/core/src/access-rules/engine.d.ts.map +1 -0
  75. package/dist/core/src/access-rules/engine.js +76 -0
  76. package/dist/core/src/access-rules/engine.js.map +1 -0
  77. package/dist/core/src/access-rules/index.d.ts +3 -0
  78. package/dist/core/src/access-rules/index.d.ts.map +1 -0
  79. package/dist/core/src/access-rules/index.js +3 -0
  80. package/dist/core/src/access-rules/index.js.map +1 -0
  81. package/dist/core/src/audit/audit-manager.d.ts +108 -0
  82. package/dist/core/src/audit/audit-manager.d.ts.map +1 -0
  83. package/dist/core/src/audit/audit-manager.js +265 -0
  84. package/dist/core/src/audit/audit-manager.js.map +1 -0
  85. package/dist/core/src/auth/auth-service.d.ts +71 -0
  86. package/dist/core/src/auth/auth-service.d.ts.map +1 -0
  87. package/dist/core/src/auth/auth-service.js +177 -0
  88. package/dist/core/src/auth/auth-service.js.map +1 -0
  89. package/dist/core/src/auth/index.d.ts +4 -0
  90. package/dist/core/src/auth/index.d.ts.map +1 -0
  91. package/dist/core/src/auth/index.js +4 -0
  92. package/dist/core/src/auth/index.js.map +1 -0
  93. package/dist/core/src/encryption/encryption-manager.d.ts +97 -0
  94. package/dist/core/src/encryption/encryption-manager.d.ts.map +1 -0
  95. package/dist/core/src/encryption/encryption-manager.js +224 -0
  96. package/dist/core/src/encryption/encryption-manager.js.map +1 -0
  97. package/dist/core/src/index.d.ts +16 -0
  98. package/dist/core/src/index.d.ts.map +1 -0
  99. package/dist/core/src/index.js +16 -0
  100. package/dist/core/src/index.js.map +1 -0
  101. package/dist/core/src/realtime/change-notifier.d.ts +50 -0
  102. package/dist/core/src/realtime/change-notifier.d.ts.map +1 -0
  103. package/dist/core/src/realtime/change-notifier.js +145 -0
  104. package/dist/core/src/realtime/change-notifier.js.map +1 -0
  105. package/dist/core/src/realtime/message-types.d.ts +39 -0
  106. package/dist/core/src/realtime/message-types.d.ts.map +1 -0
  107. package/dist/core/src/realtime/message-types.js +5 -0
  108. package/dist/core/src/realtime/message-types.js.map +1 -0
  109. package/dist/core/src/realtime/subscription-manager.d.ts +67 -0
  110. package/dist/core/src/realtime/subscription-manager.d.ts.map +1 -0
  111. package/dist/core/src/realtime/subscription-manager.js +229 -0
  112. package/dist/core/src/realtime/subscription-manager.js.map +1 -0
  113. package/dist/core/src/search/search-manager.d.ts +93 -0
  114. package/dist/core/src/search/search-manager.d.ts.map +1 -0
  115. package/dist/core/src/search/search-manager.js +258 -0
  116. package/dist/core/src/search/search-manager.js.map +1 -0
  117. package/dist/core/src/storage/file-manager.d.ts +138 -0
  118. package/dist/core/src/storage/file-manager.d.ts.map +1 -0
  119. package/dist/core/src/storage/file-manager.js +224 -0
  120. package/dist/core/src/storage/file-manager.js.map +1 -0
  121. package/dist/core/src/sync/batch-processor.d.ts +97 -0
  122. package/dist/core/src/sync/batch-processor.d.ts.map +1 -0
  123. package/dist/core/src/sync/batch-processor.js +313 -0
  124. package/dist/core/src/sync/batch-processor.js.map +1 -0
  125. package/dist/core/src/sync/csv-processor.d.ts +66 -0
  126. package/dist/core/src/sync/csv-processor.d.ts.map +1 -0
  127. package/dist/core/src/sync/csv-processor.js +223 -0
  128. package/dist/core/src/sync/csv-processor.js.map +1 -0
  129. package/dist/core/src/sync/index.d.ts +3 -0
  130. package/dist/core/src/sync/index.d.ts.map +1 -0
  131. package/dist/core/src/sync/index.js +3 -0
  132. package/dist/core/src/sync/index.js.map +1 -0
  133. package/dist/core/src/sync/sync-engine.d.ts +68 -0
  134. package/dist/core/src/sync/sync-engine.d.ts.map +1 -0
  135. package/dist/core/src/sync/sync-engine.js +317 -0
  136. package/dist/core/src/sync/sync-engine.js.map +1 -0
  137. package/dist/core/src/sync/transaction-manager.d.ts +83 -0
  138. package/dist/core/src/sync/transaction-manager.d.ts.map +1 -0
  139. package/dist/core/src/sync/transaction-manager.js +227 -0
  140. package/dist/core/src/sync/transaction-manager.js.map +1 -0
  141. package/dist/core/src/webhooks/webhook-manager.d.ts +137 -0
  142. package/dist/core/src/webhooks/webhook-manager.d.ts.map +1 -0
  143. package/dist/core/src/webhooks/webhook-manager.js +334 -0
  144. package/dist/core/src/webhooks/webhook-manager.js.map +1 -0
  145. package/package.json +4 -6
@@ -0,0 +1,174 @@
1
+ import { useContext, useCallback, useState, useEffect } from 'react';
2
+ import { EdgeBaseContext } from '../provider';
3
+ /**
4
+ * Hook for full-text search
5
+ */
6
+ export function useSearch(options) {
7
+ const context = useContext(EdgeBaseContext);
8
+ if (!context) {
9
+ throw new Error('useSearch must be used within EdgeBaseProvider');
10
+ }
11
+ const { authManager } = context;
12
+ const [results, setResults] = useState([]);
13
+ const [total, setTotal] = useState(0);
14
+ const [hasMore, setHasMore] = useState(false);
15
+ const [isLoading, setIsLoading] = useState(false);
16
+ const [error, setError] = useState(null);
17
+ const [currentQuery, setCurrentQuery] = useState(options.query);
18
+ const [currentOffset, setCurrentOffset] = useState(0);
19
+ /**
20
+ * Execute search
21
+ */
22
+ const search = useCallback(async (query) => {
23
+ const searchQuery = query ?? currentQuery;
24
+ if (!searchQuery || searchQuery.trim() === '') {
25
+ setResults([]);
26
+ setTotal(0);
27
+ setHasMore(false);
28
+ return;
29
+ }
30
+ setError(null);
31
+ setIsLoading(true);
32
+ try {
33
+ const accessToken = authManager.getAccessToken();
34
+ if (!accessToken) {
35
+ throw new Error('Not authenticated');
36
+ }
37
+ const apiUrl = typeof window !== 'undefined' ? window.location.origin : 'http://localhost:3000';
38
+ const response = await fetch(`${apiUrl}/search/${options.entity}`, {
39
+ method: 'POST',
40
+ headers: {
41
+ 'Content-Type': 'application/json',
42
+ Authorization: `Bearer ${accessToken}`,
43
+ },
44
+ body: JSON.stringify({
45
+ query: searchQuery,
46
+ columns: options.columns,
47
+ limit: options.limit || 20,
48
+ offset: 0,
49
+ highlight: options.highlight !== false,
50
+ rank: options.rank !== false,
51
+ }),
52
+ });
53
+ if (!response.ok) {
54
+ const errorData = await response.json().catch(() => ({}));
55
+ throw new Error(errorData.error || `Search failed with status ${response.status}`);
56
+ }
57
+ const data = await response.json();
58
+ setResults(data.results || []);
59
+ setTotal(data.total || 0);
60
+ setHasMore(data.hasMore || false);
61
+ setCurrentQuery(searchQuery);
62
+ setCurrentOffset(data.results?.length || 0);
63
+ }
64
+ catch (err) {
65
+ const error = err instanceof Error ? err : new Error('Search failed');
66
+ setError(error);
67
+ throw error;
68
+ }
69
+ finally {
70
+ setIsLoading(false);
71
+ }
72
+ }, [authManager, options.entity, options.columns, options.limit, options.highlight, options.rank, currentQuery]);
73
+ /**
74
+ * Load more results (pagination)
75
+ */
76
+ const loadMore = useCallback(async () => {
77
+ if (!hasMore || isLoading) {
78
+ return;
79
+ }
80
+ setError(null);
81
+ setIsLoading(true);
82
+ try {
83
+ const accessToken = authManager.getAccessToken();
84
+ if (!accessToken) {
85
+ throw new Error('Not authenticated');
86
+ }
87
+ const apiUrl = typeof window !== 'undefined' ? window.location.origin : 'http://localhost:3000';
88
+ const response = await fetch(`${apiUrl}/search/${options.entity}`, {
89
+ method: 'POST',
90
+ headers: {
91
+ 'Content-Type': 'application/json',
92
+ Authorization: `Bearer ${accessToken}`,
93
+ },
94
+ body: JSON.stringify({
95
+ query: currentQuery,
96
+ columns: options.columns,
97
+ limit: options.limit || 20,
98
+ offset: currentOffset,
99
+ highlight: options.highlight !== false,
100
+ rank: options.rank !== false,
101
+ }),
102
+ });
103
+ if (!response.ok) {
104
+ const errorData = await response.json().catch(() => ({}));
105
+ throw new Error(errorData.error || `Search failed with status ${response.status}`);
106
+ }
107
+ const data = await response.json();
108
+ setResults((prev) => [...prev, ...(data.results || [])]);
109
+ setHasMore(data.hasMore || false);
110
+ setCurrentOffset((prev) => prev + (data.results?.length || 0));
111
+ }
112
+ catch (err) {
113
+ const error = err instanceof Error ? err : new Error('Failed to load more results');
114
+ setError(error);
115
+ throw error;
116
+ }
117
+ finally {
118
+ setIsLoading(false);
119
+ }
120
+ }, [
121
+ authManager,
122
+ options.entity,
123
+ options.columns,
124
+ options.limit,
125
+ options.highlight,
126
+ options.rank,
127
+ currentQuery,
128
+ currentOffset,
129
+ hasMore,
130
+ isLoading,
131
+ ]);
132
+ /**
133
+ * Reset search state
134
+ */
135
+ const reset = useCallback(() => {
136
+ setResults([]);
137
+ setTotal(0);
138
+ setHasMore(false);
139
+ setError(null);
140
+ setCurrentOffset(0);
141
+ }, []);
142
+ // Auto-search with debounce
143
+ useEffect(() => {
144
+ if (!options.autoSearch) {
145
+ return;
146
+ }
147
+ const debounceMs = options.debounceMs || 300;
148
+ const timer = setTimeout(() => {
149
+ if (currentQuery !== options.query) {
150
+ setCurrentQuery(options.query);
151
+ search(options.query);
152
+ }
153
+ }, debounceMs);
154
+ return () => clearTimeout(timer);
155
+ }, [options.autoSearch, options.debounceMs, options.query, currentQuery, search]);
156
+ // Initial search if autoSearch is enabled
157
+ useEffect(() => {
158
+ if (options.autoSearch && options.query) {
159
+ search(options.query);
160
+ }
161
+ }, []); // Run once on mount
162
+ return {
163
+ results,
164
+ total,
165
+ hasMore,
166
+ isLoading,
167
+ error,
168
+ search,
169
+ loadMore,
170
+ reset,
171
+ };
172
+ }
173
+ export default useSearch;
174
+ //# sourceMappingURL=use-search.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-search.js","sourceRoot":"","sources":["../../../../src/hooks/use-search.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ export interface UseSubscribeResult<T> {
2
+ data: T[] | null;
3
+ isConnected: boolean;
4
+ isLoading: boolean;
5
+ error: Error | null;
6
+ refetch: () => Promise<void>;
7
+ }
8
+ /**
9
+ * Hook to subscribe to real-time data changes from an entity
10
+ * Falls back to polling if WebSocket is unavailable
11
+ */
12
+ export declare function useSubscribe<T = any>(entity: string, filters?: Record<string, any>): UseSubscribeResult<T>;
13
+ export default useSubscribe;
14
+ //# sourceMappingURL=use-subscribe.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-subscribe.d.ts","sourceRoot":"","sources":["../../../../src/hooks/use-subscribe.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,kBAAkB,CAAC,CAAC;IACnC,IAAI,EAAE,CAAC,EAAE,GAAG,IAAI,CAAC;IACjB,WAAW,EAAE,OAAO,CAAC;IACrB,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9B;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,CAAC,GAAG,GAAG,EAClC,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAC5B,kBAAkB,CAAC,CAAC,CAAC,CAoLvB;AAED,eAAe,YAAY,CAAC"}
@@ -0,0 +1,165 @@
1
+ import { useContext, useCallback, useState, useEffect, useRef } from 'react';
2
+ import { EdgeBaseContext } from '../provider';
3
+ import { RealtimeSyncManager } from '@edgebasejs/client-core';
4
+ /**
5
+ * Hook to subscribe to real-time data changes from an entity
6
+ * Falls back to polling if WebSocket is unavailable
7
+ */
8
+ export function useSubscribe(entity, filters) {
9
+ const context = useContext(EdgeBaseContext);
10
+ if (!context) {
11
+ throw new Error('useSubscribe must be used within EdgeBaseProvider');
12
+ }
13
+ const { storage, subscriptionHandler } = context;
14
+ const [data, setData] = useState(null);
15
+ const [isConnected, setIsConnected] = useState(false);
16
+ const [isLoading, setIsLoading] = useState(true);
17
+ const [error, setError] = useState(null);
18
+ const [subscriptionId, setSubscriptionId] = useState(null);
19
+ const syncManagerRef = useRef(null);
20
+ // Initialize sync manager once
21
+ useEffect(() => {
22
+ if (!syncManagerRef.current) {
23
+ syncManagerRef.current = new RealtimeSyncManager(storage);
24
+ }
25
+ }, [storage]);
26
+ // Load initial data from local storage
27
+ const loadInitialData = useCallback(async () => {
28
+ setIsLoading(true);
29
+ setError(null);
30
+ try {
31
+ const records = await syncManagerRef.current.getEntityData(entity);
32
+ // Apply filters if provided
33
+ const filtered = filters
34
+ ? records.filter((record) => {
35
+ for (const [key, value] of Object.entries(filters)) {
36
+ if (record[key] !== value) {
37
+ return false;
38
+ }
39
+ }
40
+ return true;
41
+ })
42
+ : records;
43
+ setData(filtered);
44
+ }
45
+ catch (err) {
46
+ const error = err instanceof Error ? err : new Error('Failed to load data');
47
+ setError(error);
48
+ }
49
+ finally {
50
+ setIsLoading(false);
51
+ }
52
+ }, [entity, filters]);
53
+ // Handle incoming changes
54
+ const handleChange = useCallback(async (change) => {
55
+ if (change.entity !== entity)
56
+ return;
57
+ try {
58
+ // Update storage via sync manager
59
+ await syncManagerRef.current.handleChange(change);
60
+ // Get updated data from storage
61
+ const records = await syncManagerRef.current.getEntityData(entity);
62
+ // Apply filters if provided
63
+ const filtered = filters
64
+ ? records.filter((record) => {
65
+ for (const [key, value] of Object.entries(filters)) {
66
+ if (record[key] !== value) {
67
+ return false;
68
+ }
69
+ }
70
+ return true;
71
+ })
72
+ : records;
73
+ // Update state
74
+ setData(filtered);
75
+ }
76
+ catch (err) {
77
+ console.error('Failed to update data from change:', err);
78
+ }
79
+ }, [entity, filters]);
80
+ // Subscribe to changes
81
+ useEffect(() => {
82
+ let mounted = true;
83
+ const setupSubscription = async () => {
84
+ await loadInitialData();
85
+ if (!subscriptionHandler) {
86
+ console.warn('Subscription handler not available, using polling');
87
+ // Fallback to polling every 30 seconds
88
+ const pollInterval = setInterval(() => {
89
+ loadInitialData().catch(console.error);
90
+ }, 30000);
91
+ return () => clearInterval(pollInterval);
92
+ }
93
+ try {
94
+ // Check if WebSocket is connected, if not try to connect
95
+ if (!subscriptionHandler.isConnected()) {
96
+ await subscriptionHandler.connect();
97
+ }
98
+ if (mounted) {
99
+ setIsConnected(true);
100
+ }
101
+ // Subscribe to local storage changes from sync manager
102
+ const unsubscribeLocal = syncManagerRef.current.onEntityChange(entity, handleChange);
103
+ // Subscribe to WebSocket changes
104
+ const subId = subscriptionHandler.subscribe({
105
+ entity,
106
+ filters,
107
+ onData: handleChange,
108
+ onError: (err) => {
109
+ if (mounted) {
110
+ setError(err);
111
+ }
112
+ },
113
+ onSubscribed: (subscriptionId) => {
114
+ if (mounted) {
115
+ setSubscriptionId(subscriptionId);
116
+ console.log(`Subscribed to ${entity} with ID: ${subscriptionId}`);
117
+ }
118
+ },
119
+ onUnsubscribed: () => {
120
+ if (mounted) {
121
+ setSubscriptionId(null);
122
+ console.log(`Unsubscribed from ${entity}`);
123
+ }
124
+ },
125
+ });
126
+ if (mounted) {
127
+ setSubscriptionId(subId);
128
+ }
129
+ return () => {
130
+ if (subId) {
131
+ subscriptionHandler.unsubscribe(subId);
132
+ }
133
+ if (unsubscribeLocal) {
134
+ unsubscribeLocal();
135
+ }
136
+ };
137
+ }
138
+ catch (err) {
139
+ console.warn('Failed to establish WebSocket subscription, falling back to polling', err);
140
+ // Fallback to polling
141
+ const pollInterval = setInterval(() => {
142
+ loadInitialData().catch(console.error);
143
+ }, 30000);
144
+ if (mounted) {
145
+ setIsConnected(false);
146
+ }
147
+ return () => clearInterval(pollInterval);
148
+ }
149
+ };
150
+ const cleanup = setupSubscription();
151
+ return () => {
152
+ mounted = false;
153
+ cleanup.then((fn) => fn?.()).catch(console.error);
154
+ };
155
+ }, [entity, filters, subscriptionHandler, loadInitialData, handleChange]);
156
+ return {
157
+ data,
158
+ isConnected,
159
+ isLoading,
160
+ error,
161
+ refetch: loadInitialData,
162
+ };
163
+ }
164
+ export default useSubscribe;
165
+ //# sourceMappingURL=use-subscribe.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-subscribe.js","sourceRoot":"","sources":["../../../../src/hooks/use-subscribe.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import { type TransactionOptions } from '@edgebasejs/client-core';
2
+ export interface UseTransactionResult {
3
+ transactionId: string | null;
4
+ status: string | null;
5
+ changeCount: number;
6
+ appliedCount: number | undefined;
7
+ conflictCount: number | undefined;
8
+ isCommitting: boolean;
9
+ error: Error | null;
10
+ begin: (options?: TransactionOptions) => Promise<string>;
11
+ addChange: (entity: string, recordId: string, operation: 'create' | 'update' | 'delete', data: Record<string, any>) => void;
12
+ commit: () => Promise<{
13
+ success: boolean;
14
+ appliedCount: number;
15
+ errors: string[];
16
+ }>;
17
+ rollback: () => Promise<void>;
18
+ getStatus: () => Promise<any>;
19
+ reset: () => void;
20
+ }
21
+ /**
22
+ * Hook for managing transactions in React components
23
+ * Provides ACID transaction support with automatic state management
24
+ */
25
+ export declare function useTransaction(): UseTransactionResult;
26
+ export default useTransaction;
27
+ //# sourceMappingURL=use-transaction.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-transaction.d.ts","sourceRoot":"","sources":["../../../../src/hooks/use-transaction.ts"],"names":[],"mappings":"AAEA,OAAO,EAGL,KAAK,kBAAkB,EACxB,MAAM,yBAAyB,CAAC;AAEjC,MAAM,WAAW,oBAAoB;IACnC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,aAAa,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,YAAY,EAAE,OAAO,CAAC;IACtB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,KAAK,EAAE,CAAC,OAAO,CAAC,EAAE,kBAAkB,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACzD,SAAS,EAAE,CACT,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,QAAQ,GAAG,QAAQ,GAAG,QAAQ,EACzC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KACtB,IAAI,CAAC;IACV,MAAM,EAAE,MAAM,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,YAAY,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAAC;IACpF,QAAQ,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9B,SAAS,EAAE,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC;IAC9B,KAAK,EAAE,MAAM,IAAI,CAAC;CACnB;AAED;;;GAGG;AACH,wBAAgB,cAAc,IAAI,oBAAoB,CA0LrD;AAED,eAAe,cAAc,CAAC"}
@@ -0,0 +1,160 @@
1
+ import { useContext, useCallback, useState, useEffect, useRef } from 'react';
2
+ import { EdgeBaseContext } from '../provider';
3
+ import { ClientTransactionManager, } from '@edgebasejs/client-core';
4
+ /**
5
+ * Hook for managing transactions in React components
6
+ * Provides ACID transaction support with automatic state management
7
+ */
8
+ export function useTransaction() {
9
+ const context = useContext(EdgeBaseContext);
10
+ if (!context) {
11
+ throw new Error('useTransaction must be used within EdgeBaseProvider');
12
+ }
13
+ const { authManager } = context;
14
+ const [transaction, setTransaction] = useState(null);
15
+ const [isCommitting, setIsCommitting] = useState(false);
16
+ const [error, setError] = useState(null);
17
+ const txnManagerRef = useRef(null);
18
+ // Initialize transaction manager
19
+ useEffect(() => {
20
+ const initializeManager = async () => {
21
+ const accessToken = authManager.getAccessToken();
22
+ if (accessToken && !txnManagerRef.current) {
23
+ // Get API URL from context or construct from window location
24
+ const apiUrl = typeof window !== 'undefined' ? window.location.origin : 'http://localhost:3000';
25
+ txnManagerRef.current = new ClientTransactionManager(apiUrl, accessToken);
26
+ // Subscribe to transaction changes
27
+ txnManagerRef.current.subscribe((txn) => {
28
+ setTransaction({ ...txn });
29
+ });
30
+ }
31
+ };
32
+ initializeManager();
33
+ }, [authManager]);
34
+ // Update access token on auth changes
35
+ useEffect(() => {
36
+ const unsubscribe = authManager.subscribe((state) => {
37
+ if (state.accessToken && txnManagerRef.current) {
38
+ // Re-create manager with new token
39
+ const apiUrl = typeof window !== 'undefined' ? window.location.origin : 'http://localhost:3000';
40
+ txnManagerRef.current = new ClientTransactionManager(apiUrl, state.accessToken);
41
+ }
42
+ });
43
+ return unsubscribe;
44
+ }, [authManager]);
45
+ /**
46
+ * Begin a new transaction
47
+ */
48
+ const begin = useCallback(async (options) => {
49
+ setError(null);
50
+ try {
51
+ if (!txnManagerRef.current) {
52
+ throw new Error('Transaction manager not initialized');
53
+ }
54
+ const transactionId = await txnManagerRef.current.begin(options);
55
+ return transactionId;
56
+ }
57
+ catch (err) {
58
+ const error = err instanceof Error ? err : new Error('Failed to begin transaction');
59
+ setError(error);
60
+ throw error;
61
+ }
62
+ }, []);
63
+ /**
64
+ * Add a change to the transaction
65
+ */
66
+ const addChange = useCallback((entity, recordId, operation, data) => {
67
+ try {
68
+ if (!txnManagerRef.current) {
69
+ throw new Error('Transaction manager not initialized');
70
+ }
71
+ txnManagerRef.current.addChange(entity, recordId, operation, data);
72
+ }
73
+ catch (err) {
74
+ const error = err instanceof Error ? err : new Error('Failed to add change');
75
+ setError(error);
76
+ }
77
+ }, []);
78
+ /**
79
+ * Commit the transaction
80
+ */
81
+ const commit = useCallback(async () => {
82
+ setError(null);
83
+ setIsCommitting(true);
84
+ try {
85
+ if (!txnManagerRef.current) {
86
+ throw new Error('Transaction manager not initialized');
87
+ }
88
+ const result = await txnManagerRef.current.commit();
89
+ return result;
90
+ }
91
+ catch (err) {
92
+ const error = err instanceof Error ? err : new Error('Failed to commit transaction');
93
+ setError(error);
94
+ throw error;
95
+ }
96
+ finally {
97
+ setIsCommitting(false);
98
+ }
99
+ }, []);
100
+ /**
101
+ * Rollback the transaction
102
+ */
103
+ const rollback = useCallback(async () => {
104
+ setError(null);
105
+ try {
106
+ if (!txnManagerRef.current) {
107
+ throw new Error('Transaction manager not initialized');
108
+ }
109
+ await txnManagerRef.current.rollback();
110
+ }
111
+ catch (err) {
112
+ const error = err instanceof Error ? err : new Error('Failed to rollback transaction');
113
+ setError(error);
114
+ throw error;
115
+ }
116
+ }, []);
117
+ /**
118
+ * Get transaction status
119
+ */
120
+ const getStatus = useCallback(async () => {
121
+ try {
122
+ if (!txnManagerRef.current) {
123
+ throw new Error('Transaction manager not initialized');
124
+ }
125
+ return await txnManagerRef.current.getStatus();
126
+ }
127
+ catch (err) {
128
+ const error = err instanceof Error ? err : new Error('Failed to get status');
129
+ setError(error);
130
+ throw error;
131
+ }
132
+ }, []);
133
+ /**
134
+ * Reset transaction state
135
+ */
136
+ const reset = useCallback(() => {
137
+ if (txnManagerRef.current) {
138
+ txnManagerRef.current.reset();
139
+ }
140
+ setTransaction(null);
141
+ setError(null);
142
+ }, []);
143
+ return {
144
+ transactionId: transaction?.id || null,
145
+ status: transaction?.status || null,
146
+ changeCount: transaction?.changes.length || 0,
147
+ appliedCount: transaction?.appliedCount,
148
+ conflictCount: transaction?.conflictCount,
149
+ isCommitting,
150
+ error,
151
+ begin,
152
+ addChange,
153
+ commit,
154
+ rollback,
155
+ getStatus,
156
+ reset,
157
+ };
158
+ }
159
+ export default useTransaction;
160
+ //# sourceMappingURL=use-transaction.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-transaction.js","sourceRoot":"","sources":["../../../../src/hooks/use-transaction.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,12 @@
1
1
  import React from 'react';
2
- import { AuthManager, ClientSyncEngine, OutboxManager, type IStorageAdapter } from '@edgebasejs/client-core';
2
+ import { AuthManager, ClientSyncEngine, OutboxManager, ClientSubscriptionHandler, type IStorageAdapter } from '@edgebasejs/client-core';
3
3
  export interface EdgeBaseContextValue {
4
+ apiUrl: string;
4
5
  storage: IStorageAdapter;
5
6
  authManager: AuthManager;
6
7
  syncEngine: ClientSyncEngine;
7
8
  outboxManager: OutboxManager;
9
+ subscriptionHandler?: ClientSubscriptionHandler;
8
10
  isInitialized: boolean;
9
11
  }
10
12
  export declare const EdgeBaseContext: React.Context<EdgeBaseContextValue | null>;
@@ -12,10 +14,11 @@ export interface EdgeBaseProviderProps {
12
14
  apiUrl: string;
13
15
  children: React.ReactNode;
14
16
  useMemoryStorage?: boolean;
17
+ autoSync?: boolean;
15
18
  }
16
19
  /**
17
20
  * EdgeBase provider component
18
21
  * Wraps the app to provide EdgeBase functionality via context
19
22
  */
20
- export declare function EdgeBaseProvider({ apiUrl, children, useMemoryStorage, }: EdgeBaseProviderProps): import("react/jsx-runtime").JSX.Element;
23
+ export declare function EdgeBaseProvider({ apiUrl, children, useMemoryStorage, autoSync, }: EdgeBaseProviderProps): React.JSX.Element | null;
21
24
  //# sourceMappingURL=provider.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../../src/provider.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA8B,MAAM,OAAO,CAAC;AAEnD,OAAO,EACL,WAAW,EACX,gBAAgB,EAChB,aAAa,EAEb,KAAK,eAAe,EACrB,MAAM,yBAAyB,CAAC;AAGjC,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,eAAe,CAAC;IACzB,WAAW,EAAE,WAAW,CAAC;IACzB,UAAU,EAAE,gBAAgB,CAAC;IAC7B,aAAa,EAAE,aAAa,CAAC;IAC7B,aAAa,EAAE,OAAO,CAAC;CACxB;AAED,eAAO,MAAM,eAAe,4CAAyD,CAAC;AAEtF,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,EAC/B,MAAM,EACN,QAAQ,EACR,gBAAwB,GACzB,EAAE,qBAAqB,2CA2GvB"}
1
+ {"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../../src/provider.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA8B,MAAM,OAAO,CAAC;AACnD,OAAO,EACL,WAAW,EACX,gBAAgB,EAChB,aAAa,EAEb,yBAAyB,EACzB,KAAK,eAAe,EACrB,MAAM,yBAAyB,CAAC;AAGjC,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,eAAe,CAAC;IACzB,WAAW,EAAE,WAAW,CAAC;IACzB,UAAU,EAAE,gBAAgB,CAAC;IAC7B,aAAa,EAAE,aAAa,CAAC;IAC7B,mBAAmB,CAAC,EAAE,yBAAyB,CAAC;IAChD,aAAa,EAAE,OAAO,CAAC;CACxB;AAED,eAAO,MAAM,eAAe,4CAAyD,CAAC;AAEtF,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,EAC/B,MAAM,EACN,QAAQ,EACR,gBAAwB,EACxB,QAAe,GAChB,EAAE,qBAAqB,4BA2FvB"}