@edgebasejs/client-core 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 (102) hide show
  1. package/README.md +15 -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/core/src/access-rules/column-security.d.ts +80 -0
  27. package/dist/core/src/access-rules/column-security.d.ts.map +1 -0
  28. package/dist/core/src/access-rules/column-security.js +191 -0
  29. package/dist/core/src/access-rules/column-security.js.map +1 -0
  30. package/dist/core/src/access-rules/engine.d.ts +26 -0
  31. package/dist/core/src/access-rules/engine.d.ts.map +1 -0
  32. package/dist/core/src/access-rules/engine.js +76 -0
  33. package/dist/core/src/access-rules/engine.js.map +1 -0
  34. package/dist/core/src/access-rules/index.d.ts +3 -0
  35. package/dist/core/src/access-rules/index.d.ts.map +1 -0
  36. package/dist/core/src/access-rules/index.js +3 -0
  37. package/dist/core/src/access-rules/index.js.map +1 -0
  38. package/dist/core/src/audit/audit-manager.d.ts +108 -0
  39. package/dist/core/src/audit/audit-manager.d.ts.map +1 -0
  40. package/dist/core/src/audit/audit-manager.js +265 -0
  41. package/dist/core/src/audit/audit-manager.js.map +1 -0
  42. package/dist/core/src/auth/auth-service.d.ts +71 -0
  43. package/dist/core/src/auth/auth-service.d.ts.map +1 -0
  44. package/dist/core/src/auth/auth-service.js +177 -0
  45. package/dist/core/src/auth/auth-service.js.map +1 -0
  46. package/dist/core/src/auth/index.d.ts +4 -0
  47. package/dist/core/src/auth/index.d.ts.map +1 -0
  48. package/dist/core/src/auth/index.js +4 -0
  49. package/dist/core/src/auth/index.js.map +1 -0
  50. package/dist/core/src/encryption/encryption-manager.d.ts +97 -0
  51. package/dist/core/src/encryption/encryption-manager.d.ts.map +1 -0
  52. package/dist/core/src/encryption/encryption-manager.js +224 -0
  53. package/dist/core/src/encryption/encryption-manager.js.map +1 -0
  54. package/dist/core/src/index.d.ts +16 -0
  55. package/dist/core/src/index.d.ts.map +1 -0
  56. package/dist/core/src/index.js +16 -0
  57. package/dist/core/src/index.js.map +1 -0
  58. package/dist/core/src/realtime/change-notifier.d.ts +50 -0
  59. package/dist/core/src/realtime/change-notifier.d.ts.map +1 -0
  60. package/dist/core/src/realtime/change-notifier.js +145 -0
  61. package/dist/core/src/realtime/change-notifier.js.map +1 -0
  62. package/dist/core/src/realtime/message-types.d.ts +39 -0
  63. package/dist/core/src/realtime/message-types.d.ts.map +1 -0
  64. package/dist/core/src/realtime/message-types.js +5 -0
  65. package/dist/core/src/realtime/message-types.js.map +1 -0
  66. package/dist/core/src/realtime/subscription-manager.d.ts +67 -0
  67. package/dist/core/src/realtime/subscription-manager.d.ts.map +1 -0
  68. package/dist/core/src/realtime/subscription-manager.js +229 -0
  69. package/dist/core/src/realtime/subscription-manager.js.map +1 -0
  70. package/dist/core/src/search/search-manager.d.ts +93 -0
  71. package/dist/core/src/search/search-manager.d.ts.map +1 -0
  72. package/dist/core/src/search/search-manager.js +258 -0
  73. package/dist/core/src/search/search-manager.js.map +1 -0
  74. package/dist/core/src/storage/file-manager.d.ts +138 -0
  75. package/dist/core/src/storage/file-manager.d.ts.map +1 -0
  76. package/dist/core/src/storage/file-manager.js +224 -0
  77. package/dist/core/src/storage/file-manager.js.map +1 -0
  78. package/dist/core/src/sync/batch-processor.d.ts +97 -0
  79. package/dist/core/src/sync/batch-processor.d.ts.map +1 -0
  80. package/dist/core/src/sync/batch-processor.js +313 -0
  81. package/dist/core/src/sync/batch-processor.js.map +1 -0
  82. package/dist/core/src/sync/csv-processor.d.ts +66 -0
  83. package/dist/core/src/sync/csv-processor.d.ts.map +1 -0
  84. package/dist/core/src/sync/csv-processor.js +223 -0
  85. package/dist/core/src/sync/csv-processor.js.map +1 -0
  86. package/dist/core/src/sync/index.d.ts +3 -0
  87. package/dist/core/src/sync/index.d.ts.map +1 -0
  88. package/dist/core/src/sync/index.js +3 -0
  89. package/dist/core/src/sync/index.js.map +1 -0
  90. package/dist/core/src/sync/sync-engine.d.ts +68 -0
  91. package/dist/core/src/sync/sync-engine.d.ts.map +1 -0
  92. package/dist/core/src/sync/sync-engine.js +317 -0
  93. package/dist/core/src/sync/sync-engine.js.map +1 -0
  94. package/dist/core/src/sync/transaction-manager.d.ts +83 -0
  95. package/dist/core/src/sync/transaction-manager.d.ts.map +1 -0
  96. package/dist/core/src/sync/transaction-manager.js +227 -0
  97. package/dist/core/src/sync/transaction-manager.js.map +1 -0
  98. package/dist/core/src/webhooks/webhook-manager.d.ts +137 -0
  99. package/dist/core/src/webhooks/webhook-manager.d.ts.map +1 -0
  100. package/dist/core/src/webhooks/webhook-manager.js +334 -0
  101. package/dist/core/src/webhooks/webhook-manager.js.map +1 -0
  102. package/package.json +2 -2
package/README.md ADDED
@@ -0,0 +1,15 @@
1
+ # @edgebasejs/client-core
2
+
3
+ Core client sync engine and storage abstractions for EdgeBase.
4
+
5
+ ## Install
6
+
7
+ ```bash
8
+ pnpm add @edgebasejs/client-core
9
+ ```
10
+
11
+ ## Usage
12
+
13
+ ```ts
14
+ import { ClientSyncEngine, OutboxManager } from '@edgebasejs/client-core';
15
+ ```
@@ -3,4 +3,8 @@ export * from './outbox';
3
3
  export * from './storage';
4
4
  export * from './auth';
5
5
  export * from './conflict';
6
+ export * from './realtime/subscription-handler';
7
+ export * from './realtime/realtime-sync-manager';
8
+ export * from './mutations/transaction-hook';
9
+ export * from './mutations/batch-processor-client';
6
10
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAC;AACvB,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,QAAQ,CAAC;AACvB,cAAc,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAC;AACvB,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,QAAQ,CAAC;AACvB,cAAc,YAAY,CAAC;AAC3B,cAAc,iCAAiC,CAAC;AAChD,cAAc,kCAAkC,CAAC;AACjD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,oCAAoC,CAAC"}
@@ -3,4 +3,8 @@ export * from './outbox';
3
3
  export * from './storage';
4
4
  export * from './auth';
5
5
  export * from './conflict';
6
+ export * from './realtime/subscription-handler';
7
+ export * from './realtime/realtime-sync-manager';
8
+ export * from './mutations/transaction-hook';
9
+ export * from './mutations/batch-processor-client';
6
10
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAC;AACvB,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,QAAQ,CAAC;AACvB,cAAc,YAAY,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAC;AACvB,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,QAAQ,CAAC;AACvB,cAAc,YAAY,CAAC;AAC3B,cAAc,iCAAiC,CAAC;AAChD,cAAc,kCAAkC,CAAC;AACjD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,oCAAoC,CAAC"}
@@ -0,0 +1,67 @@
1
+ /**
2
+ * Client-side batch processor for coordinating batch mutations
3
+ */
4
+ export interface BatchOperation {
5
+ entity: string;
6
+ id: string;
7
+ operation: 'create' | 'update' | 'delete';
8
+ data?: Record<string, any>;
9
+ version?: number;
10
+ }
11
+ export interface BatchRequest {
12
+ create?: BatchOperation[];
13
+ update?: BatchOperation[];
14
+ delete?: BatchOperation[];
15
+ atomic?: boolean;
16
+ isolationLevel?: 'READ_UNCOMMITTED' | 'READ_COMMITTED' | 'SERIALIZABLE';
17
+ }
18
+ export interface BatchResult {
19
+ applied: Array<BatchOperation & {
20
+ version: number;
21
+ serverTimestamp: number;
22
+ }>;
23
+ conflicts: Array<{
24
+ entity: string;
25
+ id: string;
26
+ operation: string;
27
+ clientVersion?: number;
28
+ serverVersion: number;
29
+ serverData: Record<string, any>;
30
+ }>;
31
+ errors: Array<{
32
+ entity: string;
33
+ id: string;
34
+ operation: string;
35
+ error: string;
36
+ code: string;
37
+ }>;
38
+ appliedCount: number;
39
+ conflictCount: number;
40
+ errorCount: number;
41
+ }
42
+ /**
43
+ * Client-side batch processor for batch mutations
44
+ */
45
+ export declare class ClientBatchProcessor {
46
+ private apiUrl;
47
+ private accessToken;
48
+ private batchListeners;
49
+ constructor(apiUrl: string, accessToken: string);
50
+ /**
51
+ * Process a batch of operations
52
+ */
53
+ processBatch(request: BatchRequest): Promise<BatchResult>;
54
+ /**
55
+ * Subscribe to batch operation results
56
+ */
57
+ subscribe(listener: (result: BatchResult) => void): () => void;
58
+ /**
59
+ * Notify listeners of batch results
60
+ */
61
+ private notifyListeners;
62
+ /**
63
+ * Reset processor state
64
+ */
65
+ reset(): void;
66
+ }
67
+ //# sourceMappingURL=batch-processor-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"batch-processor-client.d.ts","sourceRoot":"","sources":["../../../../src/mutations/batch-processor-client.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC;IAC1C,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,CAAC,EAAE,cAAc,EAAE,CAAC;IAC1B,MAAM,CAAC,EAAE,cAAc,EAAE,CAAC;IAC1B,MAAM,CAAC,EAAE,cAAc,EAAE,CAAC;IAC1B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,cAAc,CAAC,EAAE,kBAAkB,GAAG,gBAAgB,GAAG,cAAc,CAAC;CACzE;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,KAAK,CAAC,cAAc,GAAG;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,eAAe,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC9E,SAAS,EAAE,KAAK,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;QACf,EAAE,EAAE,MAAM,CAAC;QACX,SAAS,EAAE,MAAM,CAAC;QAClB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,aAAa,EAAE,MAAM,CAAC;QACtB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;KACjC,CAAC,CAAC;IACH,MAAM,EAAE,KAAK,CAAC;QACZ,MAAM,EAAE,MAAM,CAAC;QACf,EAAE,EAAE,MAAM,CAAC;QACX,SAAS,EAAE,MAAM,CAAC;QAClB,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;KACd,CAAC,CAAC;IACH,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,cAAc,CAA4C;gBAEtD,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM;IAK/C;;OAEG;IACG,YAAY,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC;IAuB/D;;OAEG;IACH,SAAS,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,IAAI,GAAG,MAAM,IAAI;IAK9D;;OAEG;IACH,OAAO,CAAC,eAAe;IAUvB;;OAEG;IACH,KAAK,IAAI,IAAI;CAGd"}
@@ -0,0 +1,64 @@
1
+ /**
2
+ * Client-side batch processor for coordinating batch mutations
3
+ */
4
+ /**
5
+ * Client-side batch processor for batch mutations
6
+ */
7
+ export class ClientBatchProcessor {
8
+ constructor(apiUrl, accessToken) {
9
+ this.batchListeners = new Set();
10
+ this.apiUrl = apiUrl;
11
+ this.accessToken = accessToken;
12
+ }
13
+ /**
14
+ * Process a batch of operations
15
+ */
16
+ async processBatch(request) {
17
+ try {
18
+ const response = await fetch(`${this.apiUrl}/sync/batch`, {
19
+ method: 'POST',
20
+ headers: {
21
+ 'Content-Type': 'application/json',
22
+ Authorization: `Bearer ${this.accessToken}`,
23
+ },
24
+ body: JSON.stringify(request),
25
+ });
26
+ if (!response.ok) {
27
+ throw new Error(`Failed to process batch: ${response.statusText}`);
28
+ }
29
+ const result = await response.json();
30
+ this.notifyListeners(result);
31
+ return result;
32
+ }
33
+ catch (error) {
34
+ throw new Error(`Batch processing failed: ${error instanceof Error ? error.message : 'Unknown error'}`);
35
+ }
36
+ }
37
+ /**
38
+ * Subscribe to batch operation results
39
+ */
40
+ subscribe(listener) {
41
+ this.batchListeners.add(listener);
42
+ return () => this.batchListeners.delete(listener);
43
+ }
44
+ /**
45
+ * Notify listeners of batch results
46
+ */
47
+ notifyListeners(result) {
48
+ for (const listener of this.batchListeners) {
49
+ try {
50
+ listener(result);
51
+ }
52
+ catch (error) {
53
+ console.error('Listener error:', error);
54
+ }
55
+ }
56
+ }
57
+ /**
58
+ * Reset processor state
59
+ */
60
+ reset() {
61
+ this.batchListeners.clear();
62
+ }
63
+ }
64
+ //# sourceMappingURL=batch-processor-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"batch-processor-client.js","sourceRoot":"","sources":["../../../../src/mutations/batch-processor-client.ts"],"names":[],"mappings":"AAAA;;GAEG;AAwCH;;GAEG;AACH,MAAM,OAAO,oBAAoB;IAK/B,YAAY,MAAc,EAAE,WAAmB;QAFvC,mBAAc,GAAG,IAAI,GAAG,EAAiC,CAAC;QAGhE,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;IACjC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,YAAY,CAAC,OAAqB;QACtC,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,MAAM,aAAa,EAAE;gBACxD,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE;oBACP,cAAc,EAAE,kBAAkB;oBAClC,aAAa,EAAE,UAAU,IAAI,CAAC,WAAW,EAAE;iBAC5C;gBACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;aAC9B,CAAC,CAAC;YAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,MAAM,IAAI,KAAK,CAAC,4BAA4B,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;YACrE,CAAC;YAED,MAAM,MAAM,GAAgB,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YAClD,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;YAC7B,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,4BAA4B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC,CAAC;QAC1G,CAAC;IACH,CAAC;IAED;;OAEG;IACH,SAAS,CAAC,QAAuC;QAC/C,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAClC,OAAO,GAAG,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IACpD,CAAC;IAED;;OAEG;IACK,eAAe,CAAC,MAAmB;QACzC,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YAC3C,IAAI,CAAC;gBACH,QAAQ,CAAC,MAAM,CAAC,CAAC;YACnB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,KAAK,CAAC,iBAAiB,EAAE,KAAK,CAAC,CAAC;YAC1C,CAAC;QACH,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK;QACH,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC;IAC9B,CAAC;CACF"}
@@ -0,0 +1,80 @@
1
+ /**
2
+ * Client-side transaction management
3
+ * Provides useTransaction hook for ACID transactions
4
+ */
5
+ export interface TransactionChange {
6
+ entity: string;
7
+ recordId: string;
8
+ operation: 'create' | 'update' | 'delete';
9
+ data: Record<string, any>;
10
+ }
11
+ export interface PendingTransaction {
12
+ id: string;
13
+ changes: TransactionChange[];
14
+ status: 'pending' | 'committing' | 'committed' | 'rolled_back' | 'failed';
15
+ error?: string;
16
+ appliedCount?: number;
17
+ conflictCount?: number;
18
+ }
19
+ export interface TransactionOptions {
20
+ isolationLevel?: 'READ_UNCOMMITTED' | 'READ_COMMITTED' | 'SERIALIZABLE';
21
+ autoRetry?: boolean;
22
+ maxRetries?: number;
23
+ onStatusChange?: (status: string) => void;
24
+ }
25
+ /**
26
+ * Transaction manager for coordinating client-side transactions
27
+ */
28
+ export declare class ClientTransactionManager {
29
+ private apiUrl;
30
+ private accessToken;
31
+ private currentTransaction;
32
+ private transactionListeners;
33
+ constructor(apiUrl: string, accessToken: string);
34
+ /**
35
+ * Begin a new transaction
36
+ */
37
+ begin(options?: TransactionOptions): Promise<string>;
38
+ /**
39
+ * Add a change to the current transaction
40
+ */
41
+ addChange(entity: string, recordId: string, operation: 'create' | 'update' | 'delete', data: Record<string, any>): void;
42
+ /**
43
+ * Commit the current transaction
44
+ */
45
+ commit(): Promise<{
46
+ success: boolean;
47
+ appliedCount: number;
48
+ errors: string[];
49
+ }>;
50
+ /**
51
+ * Rollback the current transaction
52
+ */
53
+ rollback(): Promise<void>;
54
+ /**
55
+ * Get current transaction status
56
+ */
57
+ getStatus(): Promise<{
58
+ status: string;
59
+ changeCount: number;
60
+ appliedCount?: number;
61
+ conflictCount?: number;
62
+ }>;
63
+ /**
64
+ * Get current transaction
65
+ */
66
+ getCurrentTransaction(): PendingTransaction | null;
67
+ /**
68
+ * Subscribe to transaction changes
69
+ */
70
+ subscribe(listener: (txn: PendingTransaction) => void): () => void;
71
+ /**
72
+ * Notify listeners of transaction changes
73
+ */
74
+ private notifyListeners;
75
+ /**
76
+ * Reset transaction state (useful for cleanup)
77
+ */
78
+ reset(): void;
79
+ }
80
+ //# sourceMappingURL=transaction-hook.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transaction-hook.d.ts","sourceRoot":"","sources":["../../../../src/mutations/transaction-hook.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC;IAC1C,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAC3B;AAED,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,iBAAiB,EAAE,CAAC;IAC7B,MAAM,EAAE,SAAS,GAAG,YAAY,GAAG,WAAW,GAAG,aAAa,GAAG,QAAQ,CAAC;IAC1E,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,kBAAkB;IACjC,cAAc,CAAC,EAAE,kBAAkB,GAAG,gBAAgB,GAAG,cAAc,CAAC;IACxE,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;CAC3C;AAED;;GAEG;AACH,qBAAa,wBAAwB;IACnC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,kBAAkB,CAAmC;IAC7D,OAAO,CAAC,oBAAoB,CAAgD;gBAEhE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM;IAK/C;;OAEG;IACG,KAAK,CAAC,OAAO,GAAE,kBAAuB,GAAG,OAAO,CAAC,MAAM,CAAC;IAsC9D;;OAEG;IACH,SAAS,CACP,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,QAAQ,GAAG,QAAQ,GAAG,QAAQ,EACzC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GACxB,IAAI;IAmBP;;OAEG;IACG,MAAM,IAAI,OAAO,CAAC;QACtB,OAAO,EAAE,OAAO,CAAC;QACjB,YAAY,EAAE,MAAM,CAAC;QACrB,MAAM,EAAE,MAAM,EAAE,CAAC;KAClB,CAAC;IAiDF;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IA4B/B;;OAEG;IACG,SAAS,IAAI,OAAO,CAAC;QACzB,MAAM,EAAE,MAAM,CAAC;QACf,WAAW,EAAE,MAAM,CAAC;QACpB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,aAAa,CAAC,EAAE,MAAM,CAAC;KACxB,CAAC;IA4BF;;OAEG;IACH,qBAAqB,IAAI,kBAAkB,GAAG,IAAI;IAIlD;;OAEG;IACH,SAAS,CAAC,QAAQ,EAAE,CAAC,GAAG,EAAE,kBAAkB,KAAK,IAAI,GAAG,MAAM,IAAI;IAKlE;;OAEG;IACH,OAAO,CAAC,eAAe;IAYvB;;OAEG;IACH,KAAK,IAAI,IAAI;CAId"}
@@ -0,0 +1,204 @@
1
+ /**
2
+ * Client-side transaction management
3
+ * Provides useTransaction hook for ACID transactions
4
+ */
5
+ /**
6
+ * Transaction manager for coordinating client-side transactions
7
+ */
8
+ export class ClientTransactionManager {
9
+ constructor(apiUrl, accessToken) {
10
+ this.currentTransaction = null;
11
+ this.transactionListeners = new Set();
12
+ this.apiUrl = apiUrl;
13
+ this.accessToken = accessToken;
14
+ }
15
+ /**
16
+ * Begin a new transaction
17
+ */
18
+ async begin(options = {}) {
19
+ if (this.currentTransaction && this.currentTransaction.status === 'pending') {
20
+ throw new Error('Transaction already in progress');
21
+ }
22
+ try {
23
+ const response = await fetch(`${this.apiUrl}/transactions/begin`, {
24
+ method: 'POST',
25
+ headers: {
26
+ 'Content-Type': 'application/json',
27
+ Authorization: `Bearer ${this.accessToken}`,
28
+ },
29
+ body: JSON.stringify({
30
+ isolationLevel: options.isolationLevel || 'READ_COMMITTED',
31
+ }),
32
+ });
33
+ if (!response.ok) {
34
+ throw new Error(`Failed to begin transaction: ${response.statusText}`);
35
+ }
36
+ const data = await response.json();
37
+ const transactionId = data.transactionId;
38
+ // Create pending transaction
39
+ this.currentTransaction = {
40
+ id: transactionId,
41
+ changes: [],
42
+ status: 'pending',
43
+ };
44
+ this.notifyListeners();
45
+ return transactionId;
46
+ }
47
+ catch (error) {
48
+ throw new Error(`Transaction begin failed: ${error instanceof Error ? error.message : 'Unknown error'}`);
49
+ }
50
+ }
51
+ /**
52
+ * Add a change to the current transaction
53
+ */
54
+ addChange(entity, recordId, operation, data) {
55
+ if (!this.currentTransaction) {
56
+ throw new Error('No transaction in progress');
57
+ }
58
+ if (this.currentTransaction.status !== 'pending') {
59
+ throw new Error(`Cannot add changes to ${this.currentTransaction.status} transaction`);
60
+ }
61
+ this.currentTransaction.changes.push({
62
+ entity,
63
+ recordId,
64
+ operation,
65
+ data,
66
+ });
67
+ this.notifyListeners();
68
+ }
69
+ /**
70
+ * Commit the current transaction
71
+ */
72
+ async commit() {
73
+ if (!this.currentTransaction) {
74
+ throw new Error('No transaction in progress');
75
+ }
76
+ const transactionId = this.currentTransaction.id;
77
+ try {
78
+ this.currentTransaction.status = 'committing';
79
+ this.notifyListeners();
80
+ const response = await fetch(`${this.apiUrl}/transactions/${transactionId}/commit`, {
81
+ method: 'POST',
82
+ headers: {
83
+ 'Content-Type': 'application/json',
84
+ Authorization: `Bearer ${this.accessToken}`,
85
+ },
86
+ });
87
+ if (!response.ok) {
88
+ this.currentTransaction.status = 'failed';
89
+ const error = await response.text();
90
+ this.currentTransaction.error = error;
91
+ this.notifyListeners();
92
+ throw new Error(`Failed to commit transaction: ${response.statusText}`);
93
+ }
94
+ const data = await response.json();
95
+ this.currentTransaction.status = 'committed';
96
+ this.currentTransaction.appliedCount = data.appliedCount;
97
+ this.currentTransaction.conflictCount = data.errors?.length || 0;
98
+ this.notifyListeners();
99
+ const result = {
100
+ success: true,
101
+ appliedCount: data.appliedCount,
102
+ errors: data.errors || [],
103
+ };
104
+ return result;
105
+ }
106
+ catch (error) {
107
+ this.currentTransaction.status = 'failed';
108
+ this.currentTransaction.error = error instanceof Error ? error.message : 'Unknown error';
109
+ this.notifyListeners();
110
+ throw error;
111
+ }
112
+ }
113
+ /**
114
+ * Rollback the current transaction
115
+ */
116
+ async rollback() {
117
+ if (!this.currentTransaction) {
118
+ throw new Error('No transaction in progress');
119
+ }
120
+ const transactionId = this.currentTransaction.id;
121
+ try {
122
+ const response = await fetch(`${this.apiUrl}/transactions/${transactionId}/rollback`, {
123
+ method: 'POST',
124
+ headers: {
125
+ 'Content-Type': 'application/json',
126
+ Authorization: `Bearer ${this.accessToken}`,
127
+ },
128
+ });
129
+ if (!response.ok) {
130
+ throw new Error(`Failed to rollback transaction: ${response.statusText}`);
131
+ }
132
+ this.currentTransaction.status = 'rolled_back';
133
+ this.notifyListeners();
134
+ this.currentTransaction = null;
135
+ }
136
+ catch (error) {
137
+ throw new Error(`Transaction rollback failed: ${error instanceof Error ? error.message : 'Unknown error'}`);
138
+ }
139
+ }
140
+ /**
141
+ * Get current transaction status
142
+ */
143
+ async getStatus() {
144
+ if (!this.currentTransaction) {
145
+ throw new Error('No transaction in progress');
146
+ }
147
+ try {
148
+ const response = await fetch(`${this.apiUrl}/transactions/${this.currentTransaction.id}`, {
149
+ headers: {
150
+ Authorization: `Bearer ${this.accessToken}`,
151
+ },
152
+ });
153
+ if (!response.ok) {
154
+ throw new Error(`Failed to get transaction status: ${response.statusText}`);
155
+ }
156
+ const data = await response.json();
157
+ return {
158
+ status: data.status,
159
+ changeCount: data.changeCount,
160
+ appliedCount: this.currentTransaction.appliedCount,
161
+ conflictCount: this.currentTransaction.conflictCount,
162
+ };
163
+ }
164
+ catch (error) {
165
+ throw new Error(`Failed to get status: ${error instanceof Error ? error.message : 'Unknown error'}`);
166
+ }
167
+ }
168
+ /**
169
+ * Get current transaction
170
+ */
171
+ getCurrentTransaction() {
172
+ return this.currentTransaction;
173
+ }
174
+ /**
175
+ * Subscribe to transaction changes
176
+ */
177
+ subscribe(listener) {
178
+ this.transactionListeners.add(listener);
179
+ return () => this.transactionListeners.delete(listener);
180
+ }
181
+ /**
182
+ * Notify listeners of transaction changes
183
+ */
184
+ notifyListeners() {
185
+ if (this.currentTransaction) {
186
+ for (const listener of this.transactionListeners) {
187
+ try {
188
+ listener(this.currentTransaction);
189
+ }
190
+ catch (error) {
191
+ console.error('Listener error:', error);
192
+ }
193
+ }
194
+ }
195
+ }
196
+ /**
197
+ * Reset transaction state (useful for cleanup)
198
+ */
199
+ reset() {
200
+ this.currentTransaction = null;
201
+ this.transactionListeners.clear();
202
+ }
203
+ }
204
+ //# sourceMappingURL=transaction-hook.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transaction-hook.js","sourceRoot":"","sources":["../../../../src/mutations/transaction-hook.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,55 @@
1
+ import type { IStorageAdapter } from '../storage';
2
+ import type { ChangeMessage } from '@edgebasejs/core';
3
+ /**
4
+ * Manages real-time sync between WebSocket changes and local storage
5
+ * Handles merging of server changes with local data
6
+ */
7
+ export declare class RealtimeSyncManager {
8
+ private storage;
9
+ private changeListeners;
10
+ constructor(storage: IStorageAdapter);
11
+ /**
12
+ * Subscribe to changes for a specific entity
13
+ */
14
+ onEntityChange(entity: string, listener: (change: ChangeMessage) => void): () => void;
15
+ /**
16
+ * Handle incoming WebSocket change message
17
+ * Merges with local storage using server-authoritative conflict resolution
18
+ */
19
+ handleChange(change: ChangeMessage): Promise<void>;
20
+ /**
21
+ * Notify listeners about a change
22
+ */
23
+ private notifyListeners;
24
+ /**
25
+ * Get all data for an entity from local storage
26
+ */
27
+ getEntityData<T = any>(entity: string): Promise<T[]>;
28
+ /**
29
+ * Get a single record by ID
30
+ */
31
+ getRecord<T = any>(entity: string, recordId: string): Promise<T | null>;
32
+ /**
33
+ * Merge outbox changes with server updates
34
+ * Used during sync to detect conflicts
35
+ */
36
+ mergeWithOutbox(entity: string, recordId: string, serverRecord: Record<string, any>, serverVersion: number): Promise<{
37
+ resolved: boolean;
38
+ data: Record<string, any>;
39
+ conflict?: boolean;
40
+ }>;
41
+ /**
42
+ * Clear all data for an entity
43
+ */
44
+ clearEntity(entity: string): Promise<void>;
45
+ /**
46
+ * Get sync metadata for entity
47
+ * Used to track which records have been synced
48
+ */
49
+ getSyncStatus(entity: string): Promise<Record<string, any>>;
50
+ /**
51
+ * Listen for all changes across entities
52
+ */
53
+ onAnyChange(listener: (entity: string, change: ChangeMessage) => void): () => void;
54
+ }
55
+ //# sourceMappingURL=realtime-sync-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"realtime-sync-manager.d.ts","sourceRoot":"","sources":["../../../../src/realtime/realtime-sync-manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEtD;;;GAGG;AACH,qBAAa,mBAAmB;IAGlB,OAAO,CAAC,OAAO;IAF3B,OAAO,CAAC,eAAe,CAA2D;gBAE9D,OAAO,EAAE,eAAe;IAE5C;;OAEG;IACH,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,MAAM,EAAE,aAAa,KAAK,IAAI,GAAG,MAAM,IAAI;IAarF;;;OAGG;IACG,YAAY,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAwCxD;;OAEG;IACH,OAAO,CAAC,eAAe;IAavB;;OAEG;IACG,aAAa,CAAC,CAAC,GAAG,GAAG,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IAoB1D;;OAEG;IACG,SAAS,CAAC,CAAC,GAAG,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAc7E;;;OAGG;IACG,eAAe,CACnB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACjC,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC;QAAE,QAAQ,EAAE,OAAO,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;IAsChF;;OAEG;IACG,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAahD;;;OAGG;IACG,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAsBjE;;OAEG;IACH,WAAW,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,KAAK,IAAI,GAAG,MAAM,IAAI;CASnF"}