@fatagnus/dink-sync 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (186) hide show
  1. package/README.md +312 -0
  2. package/dist/client/attachment.d.ts +225 -0
  3. package/dist/client/attachment.d.ts.map +1 -0
  4. package/dist/client/attachment.js +402 -0
  5. package/dist/client/attachment.js.map +1 -0
  6. package/dist/client/binary-encoding.d.ts +45 -0
  7. package/dist/client/binary-encoding.d.ts.map +1 -0
  8. package/dist/client/binary-encoding.js +90 -0
  9. package/dist/client/binary-encoding.js.map +1 -0
  10. package/dist/client/collection.d.ts +10 -0
  11. package/dist/client/collection.d.ts.map +1 -0
  12. package/dist/client/collection.js +924 -0
  13. package/dist/client/collection.js.map +1 -0
  14. package/dist/client/compression.d.ts +56 -0
  15. package/dist/client/compression.d.ts.map +1 -0
  16. package/dist/client/compression.js +173 -0
  17. package/dist/client/compression.js.map +1 -0
  18. package/dist/client/crdt/index.d.ts +2 -0
  19. package/dist/client/crdt/index.d.ts.map +1 -0
  20. package/dist/client/crdt/index.js +2 -0
  21. package/dist/client/crdt/index.js.map +1 -0
  22. package/dist/client/crdt/yjs-doc.d.ts +88 -0
  23. package/dist/client/crdt/yjs-doc.d.ts.map +1 -0
  24. package/dist/client/crdt/yjs-doc.js +123 -0
  25. package/dist/client/crdt/yjs-doc.js.map +1 -0
  26. package/dist/client/index.d.ts +66 -0
  27. package/dist/client/index.d.ts.map +1 -0
  28. package/dist/client/index.js +233 -0
  29. package/dist/client/index.js.map +1 -0
  30. package/dist/client/mock-transport.d.ts +155 -0
  31. package/dist/client/mock-transport.d.ts.map +1 -0
  32. package/dist/client/mock-transport.js +292 -0
  33. package/dist/client/mock-transport.js.map +1 -0
  34. package/dist/client/network-detector.d.ts +65 -0
  35. package/dist/client/network-detector.d.ts.map +1 -0
  36. package/dist/client/network-detector.js +147 -0
  37. package/dist/client/network-detector.js.map +1 -0
  38. package/dist/client/provisioning.d.ts +126 -0
  39. package/dist/client/provisioning.d.ts.map +1 -0
  40. package/dist/client/provisioning.js +125 -0
  41. package/dist/client/provisioning.js.map +1 -0
  42. package/dist/client/signal.d.ts +13 -0
  43. package/dist/client/signal.d.ts.map +1 -0
  44. package/dist/client/signal.js +27 -0
  45. package/dist/client/signal.js.map +1 -0
  46. package/dist/client/sync-engine.d.ts +298 -0
  47. package/dist/client/sync-engine.d.ts.map +1 -0
  48. package/dist/client/sync-engine.js +904 -0
  49. package/dist/client/sync-engine.js.map +1 -0
  50. package/dist/client/synced-edge.d.ts +109 -0
  51. package/dist/client/synced-edge.d.ts.map +1 -0
  52. package/dist/client/synced-edge.js +179 -0
  53. package/dist/client/synced-edge.js.map +1 -0
  54. package/dist/client/synced-offline-edge-types.d.ts +540 -0
  55. package/dist/client/synced-offline-edge-types.d.ts.map +1 -0
  56. package/dist/client/synced-offline-edge-types.js +10 -0
  57. package/dist/client/synced-offline-edge-types.js.map +1 -0
  58. package/dist/client/synced-offline-edge.d.ts +54 -0
  59. package/dist/client/synced-offline-edge.d.ts.map +1 -0
  60. package/dist/client/synced-offline-edge.js +731 -0
  61. package/dist/client/synced-offline-edge.js.map +1 -0
  62. package/dist/client/transport.d.ts +202 -0
  63. package/dist/client/transport.d.ts.map +1 -0
  64. package/dist/client/transport.js +409 -0
  65. package/dist/client/transport.js.map +1 -0
  66. package/dist/client/types.d.ts +622 -0
  67. package/dist/client/types.d.ts.map +1 -0
  68. package/dist/client/types.js +60 -0
  69. package/dist/client/types.js.map +1 -0
  70. package/dist/client/validation.d.ts +61 -0
  71. package/dist/client/validation.d.ts.map +1 -0
  72. package/dist/client/validation.js +57 -0
  73. package/dist/client/validation.js.map +1 -0
  74. package/dist/client/versioning.d.ts +134 -0
  75. package/dist/client/versioning.d.ts.map +1 -0
  76. package/dist/client/versioning.js +304 -0
  77. package/dist/client/versioning.js.map +1 -0
  78. package/dist/index.d.ts +40 -0
  79. package/dist/index.d.ts.map +1 -0
  80. package/dist/index.js +51 -0
  81. package/dist/index.js.map +1 -0
  82. package/dist/persistence/encryption.d.ts +114 -0
  83. package/dist/persistence/encryption.d.ts.map +1 -0
  84. package/dist/persistence/encryption.js +286 -0
  85. package/dist/persistence/encryption.js.map +1 -0
  86. package/dist/persistence/index.d.ts +21 -0
  87. package/dist/persistence/index.d.ts.map +1 -0
  88. package/dist/persistence/index.js +20 -0
  89. package/dist/persistence/index.js.map +1 -0
  90. package/dist/persistence/memory.d.ts +32 -0
  91. package/dist/persistence/memory.d.ts.map +1 -0
  92. package/dist/persistence/memory.js +57 -0
  93. package/dist/persistence/memory.js.map +1 -0
  94. package/dist/persistence/migrations.d.ts +106 -0
  95. package/dist/persistence/migrations.d.ts.map +1 -0
  96. package/dist/persistence/migrations.js +176 -0
  97. package/dist/persistence/migrations.js.map +1 -0
  98. package/dist/persistence/pending-queue.d.ts +109 -0
  99. package/dist/persistence/pending-queue.d.ts.map +1 -0
  100. package/dist/persistence/pending-queue.js +249 -0
  101. package/dist/persistence/pending-queue.js.map +1 -0
  102. package/dist/persistence/pglite.d.ts +72 -0
  103. package/dist/persistence/pglite.d.ts.map +1 -0
  104. package/dist/persistence/pglite.js +126 -0
  105. package/dist/persistence/pglite.js.map +1 -0
  106. package/dist/persistence/quota-manager.d.ts +134 -0
  107. package/dist/persistence/quota-manager.d.ts.map +1 -0
  108. package/dist/persistence/quota-manager.js +242 -0
  109. package/dist/persistence/quota-manager.js.map +1 -0
  110. package/dist/persistence/types.d.ts +54 -0
  111. package/dist/persistence/types.d.ts.map +1 -0
  112. package/dist/persistence/types.js +2 -0
  113. package/dist/persistence/types.js.map +1 -0
  114. package/dist/react/OfflineEdgeProvider.d.ts +91 -0
  115. package/dist/react/OfflineEdgeProvider.d.ts.map +1 -0
  116. package/dist/react/OfflineEdgeProvider.js +127 -0
  117. package/dist/react/OfflineEdgeProvider.js.map +1 -0
  118. package/dist/react/SyncedOfflineEdgeProvider.d.ts +105 -0
  119. package/dist/react/SyncedOfflineEdgeProvider.d.ts.map +1 -0
  120. package/dist/react/SyncedOfflineEdgeProvider.js +138 -0
  121. package/dist/react/SyncedOfflineEdgeProvider.js.map +1 -0
  122. package/dist/react/index.d.ts +50 -0
  123. package/dist/react/index.d.ts.map +1 -0
  124. package/dist/react/index.js +51 -0
  125. package/dist/react/index.js.map +1 -0
  126. package/dist/react/useCollection.d.ts +77 -0
  127. package/dist/react/useCollection.d.ts.map +1 -0
  128. package/dist/react/useCollection.js +113 -0
  129. package/dist/react/useCollection.js.map +1 -0
  130. package/dist/react/useCollectionSyncMode.d.ts +61 -0
  131. package/dist/react/useCollectionSyncMode.d.ts.map +1 -0
  132. package/dist/react/useCollectionSyncMode.js +93 -0
  133. package/dist/react/useCollectionSyncMode.js.map +1 -0
  134. package/dist/react/useConnectionState.d.ts +44 -0
  135. package/dist/react/useConnectionState.d.ts.map +1 -0
  136. package/dist/react/useConnectionState.js +46 -0
  137. package/dist/react/useConnectionState.js.map +1 -0
  138. package/dist/react/useDocumentSyncStatus.d.ts +72 -0
  139. package/dist/react/useDocumentSyncStatus.d.ts.map +1 -0
  140. package/dist/react/useDocumentSyncStatus.js +110 -0
  141. package/dist/react/useDocumentSyncStatus.js.map +1 -0
  142. package/dist/react/useOfflineEdge.d.ts +58 -0
  143. package/dist/react/useOfflineEdge.d.ts.map +1 -0
  144. package/dist/react/useOfflineEdge.js +54 -0
  145. package/dist/react/useOfflineEdge.js.map +1 -0
  146. package/dist/react/usePendingChanges.d.ts +67 -0
  147. package/dist/react/usePendingChanges.d.ts.map +1 -0
  148. package/dist/react/usePendingChanges.js +90 -0
  149. package/dist/react/usePendingChanges.js.map +1 -0
  150. package/dist/react/useRejectedDocuments.d.ts +112 -0
  151. package/dist/react/useRejectedDocuments.d.ts.map +1 -0
  152. package/dist/react/useRejectedDocuments.js +213 -0
  153. package/dist/react/useRejectedDocuments.js.map +1 -0
  154. package/dist/react/useSyncControls.d.ts +96 -0
  155. package/dist/react/useSyncControls.d.ts.map +1 -0
  156. package/dist/react/useSyncControls.js +112 -0
  157. package/dist/react/useSyncControls.js.map +1 -0
  158. package/dist/react/useSyncProgress.d.ts +78 -0
  159. package/dist/react/useSyncProgress.d.ts.map +1 -0
  160. package/dist/react/useSyncProgress.js +90 -0
  161. package/dist/react/useSyncProgress.js.map +1 -0
  162. package/dist/react/useSyncRejected.d.ts +47 -0
  163. package/dist/react/useSyncRejected.d.ts.map +1 -0
  164. package/dist/react/useSyncRejected.js +55 -0
  165. package/dist/react/useSyncRejected.js.map +1 -0
  166. package/dist/react/useSyncStatus.d.ts +56 -0
  167. package/dist/react/useSyncStatus.d.ts.map +1 -0
  168. package/dist/react/useSyncStatus.js +59 -0
  169. package/dist/react/useSyncStatus.js.map +1 -0
  170. package/dist/react/useSyncedOfflineEdge.d.ts +69 -0
  171. package/dist/react/useSyncedOfflineEdge.d.ts.map +1 -0
  172. package/dist/react/useSyncedOfflineEdge.js +65 -0
  173. package/dist/react/useSyncedOfflineEdge.js.map +1 -0
  174. package/dist/service-worker/index.d.ts +7 -0
  175. package/dist/service-worker/index.d.ts.map +1 -0
  176. package/dist/service-worker/index.js +7 -0
  177. package/dist/service-worker/index.js.map +1 -0
  178. package/dist/service-worker/sync-worker.d.ts +230 -0
  179. package/dist/service-worker/sync-worker.d.ts.map +1 -0
  180. package/dist/service-worker/sync-worker.js +471 -0
  181. package/dist/service-worker/sync-worker.js.map +1 -0
  182. package/dist/types.d.ts +6 -0
  183. package/dist/types.d.ts.map +1 -0
  184. package/dist/types.js +3 -0
  185. package/dist/types.js.map +1 -0
  186. package/package.json +95 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mock-transport.js","sourceRoot":"","sources":["../../src/client/mock-transport.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,65 @@
1
+ /**
2
+ * NetworkDetector - Automatic network state detection for offline-first sync
3
+ *
4
+ * Provides platform-specific implementations:
5
+ * - Browser: Uses navigator.onLine and online/offline events
6
+ * - Node.js: Uses manual control with optional polling
7
+ */
8
+ /**
9
+ * Network state enum
10
+ */
11
+ export declare const NetworkState: {
12
+ readonly Online: "online";
13
+ readonly Offline: "offline";
14
+ };
15
+ export type NetworkState = typeof NetworkState[keyof typeof NetworkState];
16
+ /**
17
+ * Callback for network state changes
18
+ */
19
+ export type NetworkStateCallback = (state: NetworkState) => void;
20
+ /**
21
+ * Unsubscribe function
22
+ */
23
+ export type Unsubscribe = () => void;
24
+ /**
25
+ * Base NetworkDetector interface for platform abstraction
26
+ */
27
+ export interface NetworkDetector {
28
+ /** Get current network state */
29
+ getState(): NetworkState;
30
+ /** Subscribe to state changes. Callback is called immediately with current state. */
31
+ onStateChange(callback: NetworkStateCallback): Unsubscribe;
32
+ /** Clean up resources */
33
+ destroy(): void;
34
+ }
35
+ /**
36
+ * Extended NetworkDetector for Node.js with manual control
37
+ */
38
+ export interface NodeNetworkDetector extends NetworkDetector {
39
+ /** Manually set online state (useful for testing or external network monitoring) */
40
+ setOnline(online: boolean): void;
41
+ }
42
+ /**
43
+ * Configuration for Node.js network detector
44
+ */
45
+ export interface NodeNetworkDetectorConfig {
46
+ /** Polling interval in ms for network checks (default: 30000) */
47
+ pollingInterval?: number;
48
+ /** Initial network state (default: 'online') */
49
+ initialState?: NetworkState;
50
+ }
51
+ /**
52
+ * Create a browser network detector
53
+ * Uses navigator.onLine and online/offline events
54
+ */
55
+ export declare function createBrowserNetworkDetector(): NetworkDetector;
56
+ /**
57
+ * Create a Node.js network detector
58
+ * Provides manual control for network state
59
+ */
60
+ export declare function createNodeNetworkDetector(config?: NodeNetworkDetectorConfig): NodeNetworkDetector;
61
+ /**
62
+ * Detect environment and create appropriate network detector
63
+ */
64
+ export declare function createNetworkDetector(): NetworkDetector;
65
+ //# sourceMappingURL=network-detector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"network-detector.d.ts","sourceRoot":"","sources":["../../src/client/network-detector.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAYH;;GAEG;AACH,eAAO,MAAM,YAAY;;;CAGf,CAAC;AAEX,MAAM,MAAM,YAAY,GAAG,OAAO,YAAY,CAAC,MAAM,OAAO,YAAY,CAAC,CAAC;AAE1E;;GAEG;AACH,MAAM,MAAM,oBAAoB,GAAG,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC;AAEjE;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC;AAErC;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,gCAAgC;IAChC,QAAQ,IAAI,YAAY,CAAC;IACzB,qFAAqF;IACrF,aAAa,CAAC,QAAQ,EAAE,oBAAoB,GAAG,WAAW,CAAC;IAC3D,yBAAyB;IACzB,OAAO,IAAI,IAAI,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAoB,SAAQ,eAAe;IAC1D,oFAAoF;IACpF,SAAS,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,CAAC;CAClC;AAED;;GAEG;AACH,MAAM,WAAW,yBAAyB;IACxC,iEAAiE;IACjE,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,gDAAgD;IAChD,YAAY,CAAC,EAAE,YAAY,CAAC;CAC7B;AAgID;;;GAGG;AACH,wBAAgB,4BAA4B,IAAI,eAAe,CAE9D;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,MAAM,CAAC,EAAE,yBAAyB,GAAG,mBAAmB,CAEjG;AAED;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,eAAe,CAQvD"}
@@ -0,0 +1,147 @@
1
+ /**
2
+ * NetworkDetector - Automatic network state detection for offline-first sync
3
+ *
4
+ * Provides platform-specific implementations:
5
+ * - Browser: Uses navigator.onLine and online/offline events
6
+ * - Node.js: Uses manual control with optional polling
7
+ */
8
+ /**
9
+ * Network state enum
10
+ */
11
+ export const NetworkState = {
12
+ Online: 'online',
13
+ Offline: 'offline',
14
+ };
15
+ /**
16
+ * Browser network detector using navigator.onLine and online/offline events
17
+ */
18
+ class BrowserNetworkDetector {
19
+ state;
20
+ callbacks = new Set();
21
+ onlineHandler;
22
+ offlineHandler;
23
+ constructor() {
24
+ // Get initial state from navigator.onLine
25
+ this.state = this.checkOnline() ? NetworkState.Online : NetworkState.Offline;
26
+ // Create bound handlers for cleanup
27
+ this.onlineHandler = () => this.setState(NetworkState.Online);
28
+ this.offlineHandler = () => this.setState(NetworkState.Offline);
29
+ // Subscribe to browser events
30
+ if (typeof window !== 'undefined') {
31
+ window.addEventListener('online', this.onlineHandler);
32
+ window.addEventListener('offline', this.offlineHandler);
33
+ }
34
+ }
35
+ checkOnline() {
36
+ if (typeof navigator !== 'undefined' && 'onLine' in navigator) {
37
+ return navigator.onLine;
38
+ }
39
+ // Assume online if navigator.onLine is not available
40
+ return true;
41
+ }
42
+ setState(newState) {
43
+ if (this.state !== newState) {
44
+ this.state = newState;
45
+ for (const callback of this.callbacks) {
46
+ callback(newState);
47
+ }
48
+ }
49
+ }
50
+ getState() {
51
+ return this.state;
52
+ }
53
+ onStateChange(callback) {
54
+ this.callbacks.add(callback);
55
+ // Emit current state immediately
56
+ callback(this.state);
57
+ return () => {
58
+ this.callbacks.delete(callback);
59
+ };
60
+ }
61
+ destroy() {
62
+ this.callbacks.clear();
63
+ if (typeof window !== 'undefined') {
64
+ window.removeEventListener('online', this.onlineHandler);
65
+ window.removeEventListener('offline', this.offlineHandler);
66
+ }
67
+ }
68
+ }
69
+ /**
70
+ * Node.js network detector with manual control
71
+ *
72
+ * In Node.js, network state detection is more complex and environment-specific.
73
+ * This implementation provides manual control for:
74
+ * - Testing scenarios
75
+ * - Integration with external network monitoring
76
+ * - Custom network health checks
77
+ */
78
+ class NodeNetworkDetectorImpl {
79
+ state;
80
+ callbacks = new Set();
81
+ pollingTimer = null;
82
+ constructor(config = {}) {
83
+ this.state = config.initialState ?? NetworkState.Online;
84
+ // Optional polling for network checks (can be extended with actual checks)
85
+ if (config.pollingInterval && config.pollingInterval > 0) {
86
+ this.pollingTimer = setInterval(() => {
87
+ // In a real implementation, this could check network interfaces
88
+ // For now, we just maintain the current state
89
+ }, config.pollingInterval);
90
+ }
91
+ }
92
+ setState(newState) {
93
+ if (this.state !== newState) {
94
+ this.state = newState;
95
+ for (const callback of this.callbacks) {
96
+ callback(newState);
97
+ }
98
+ }
99
+ }
100
+ getState() {
101
+ return this.state;
102
+ }
103
+ onStateChange(callback) {
104
+ this.callbacks.add(callback);
105
+ // Emit current state immediately
106
+ callback(this.state);
107
+ return () => {
108
+ this.callbacks.delete(callback);
109
+ };
110
+ }
111
+ setOnline(online) {
112
+ this.setState(online ? NetworkState.Online : NetworkState.Offline);
113
+ }
114
+ destroy() {
115
+ this.callbacks.clear();
116
+ if (this.pollingTimer) {
117
+ clearInterval(this.pollingTimer);
118
+ this.pollingTimer = null;
119
+ }
120
+ }
121
+ }
122
+ /**
123
+ * Create a browser network detector
124
+ * Uses navigator.onLine and online/offline events
125
+ */
126
+ export function createBrowserNetworkDetector() {
127
+ return new BrowserNetworkDetector();
128
+ }
129
+ /**
130
+ * Create a Node.js network detector
131
+ * Provides manual control for network state
132
+ */
133
+ export function createNodeNetworkDetector(config) {
134
+ return new NodeNetworkDetectorImpl(config);
135
+ }
136
+ /**
137
+ * Detect environment and create appropriate network detector
138
+ */
139
+ export function createNetworkDetector() {
140
+ // Check if we're in a browser environment
141
+ if (typeof window !== 'undefined' && typeof navigator !== 'undefined' && 'onLine' in navigator) {
142
+ return createBrowserNetworkDetector();
143
+ }
144
+ // Default to Node.js detector
145
+ return createNodeNetworkDetector();
146
+ }
147
+ //# sourceMappingURL=network-detector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"network-detector.js","sourceRoot":"","sources":["../../src/client/network-detector.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,126 @@
1
+ /**
2
+ * Provisioning utilities for creating apps and API keys.
3
+ *
4
+ * These utilities are primarily for demos and development.
5
+ * In production, apps and API keys should be created through
6
+ * your backend or the Dink admin dashboard.
7
+ *
8
+ * @example
9
+ * ```typescript
10
+ * import { createAdminClient } from '@fatagnus/dink-sync';
11
+ *
12
+ * const admin = await createAdminClient({
13
+ * serverUrl: 'nats://localhost:4222',
14
+ * adminKey: 'your-admin-key',
15
+ * });
16
+ *
17
+ * const { app, apiKey } = await admin.createApp({ name: 'my-app' });
18
+ * const { edgeKey } = await admin.createEdgeKey({
19
+ * appApiKey: apiKey,
20
+ * edgeId: 'edge-1',
21
+ * });
22
+ *
23
+ * await admin.close();
24
+ * ```
25
+ */
26
+ /**
27
+ * Configuration for creating an admin client.
28
+ */
29
+ export interface AdminClientConfig {
30
+ /** NATS server URL (e.g., 'nats://localhost:4222') */
31
+ serverUrl: string;
32
+ /** Admin API key for authentication */
33
+ adminKey: string;
34
+ /** Request timeout in ms (default: 10000) */
35
+ requestTimeout?: number;
36
+ }
37
+ /**
38
+ * Options for creating an app.
39
+ */
40
+ export interface CreateAppOptions {
41
+ /** App name */
42
+ name: string;
43
+ }
44
+ /**
45
+ * Result of creating an app.
46
+ */
47
+ export interface CreateAppResult {
48
+ /** Created app info */
49
+ app: {
50
+ id: string;
51
+ name: string;
52
+ };
53
+ /** App API key for managing the app */
54
+ apiKey: string;
55
+ }
56
+ /**
57
+ * Options for creating an edge key.
58
+ */
59
+ export interface CreateEdgeKeyOptions {
60
+ /** App API key (from createApp) */
61
+ appApiKey: string;
62
+ /** Edge ID for this edge client */
63
+ edgeId: string;
64
+ /** Optional key name (defaults to 'edge-{edgeId}') */
65
+ name?: string;
66
+ }
67
+ /**
68
+ * Options for configuring Convex integration.
69
+ */
70
+ export interface ConfigureConvexOptions {
71
+ /** App ID to configure */
72
+ appId: string;
73
+ /** Convex API URL (e.g., 'http://localhost:3210' or 'https://your-app.convex.cloud') */
74
+ convexUrl: string;
75
+ /** Convex site URL for HTTP routes (e.g., 'http://localhost:3211') */
76
+ convexSiteUrl?: string;
77
+ /** Optional pre-shared sync key to use (for demos where Convex is already configured with a static key) */
78
+ syncKey?: string;
79
+ }
80
+ /**
81
+ * Result of configuring Convex integration.
82
+ */
83
+ export interface ConfigureConvexResult {
84
+ /** Sync key for Convex to authenticate with dinkd */
85
+ syncKey: string;
86
+ /** Configuration status */
87
+ status: string;
88
+ }
89
+ /**
90
+ * Result of creating an edge key.
91
+ */
92
+ export interface CreateEdgeKeyResult {
93
+ /** Edge API key for the SDK */
94
+ edgeKey: string;
95
+ }
96
+ /**
97
+ * Admin client for provisioning apps and API keys.
98
+ */
99
+ export interface AdminClient {
100
+ /** Create a new app */
101
+ createApp(options: CreateAppOptions): Promise<CreateAppResult>;
102
+ /** Create an edge API key for an app */
103
+ createEdgeKey(options: CreateEdgeKeyOptions): Promise<CreateEdgeKeyResult>;
104
+ /** Configure Convex integration for an app */
105
+ configureConvex(options: ConfigureConvexOptions): Promise<ConfigureConvexResult>;
106
+ /** Close the admin client connection */
107
+ close(): Promise<void>;
108
+ }
109
+ /**
110
+ * Create an admin client for provisioning apps and API keys.
111
+ *
112
+ * @param config - Configuration for the admin client
113
+ * @returns Promise resolving to an AdminClient
114
+ */
115
+ export declare function createAdminClient(config: AdminClientConfig): Promise<AdminClient>;
116
+ /**
117
+ * Helper to read an admin key from a file with retry.
118
+ * Useful for Docker environments where the key file may not exist immediately.
119
+ *
120
+ * @param keyPath - Path to the admin key file
121
+ * @param maxAttempts - Maximum number of attempts (default: 30)
122
+ * @param delayMs - Delay between attempts in ms (default: 1000)
123
+ * @returns Promise resolving to the admin key
124
+ */
125
+ export declare function readAdminKeyWithRetry(keyPath: string, maxAttempts?: number, delayMs?: number): Promise<string>;
126
+ //# sourceMappingURL=provisioning.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provisioning.d.ts","sourceRoot":"","sources":["../../src/client/provisioning.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAMH;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,sDAAsD;IACtD,SAAS,EAAE,MAAM,CAAC;IAClB,uCAAuC;IACvC,QAAQ,EAAE,MAAM,CAAC;IACjB,6CAA6C;IAC7C,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,eAAe;IACf,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,uBAAuB;IACvB,GAAG,EAAE;QACH,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;IACF,uCAAuC;IACvC,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,mCAAmC;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,mCAAmC;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,sDAAsD;IACtD,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,0BAA0B;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,wFAAwF;IACxF,SAAS,EAAE,MAAM,CAAC;IAClB,sEAAsE;IACtE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,2GAA2G;IAC3G,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,qDAAqD;IACrD,OAAO,EAAE,MAAM,CAAC;IAChB,2BAA2B;IAC3B,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,+BAA+B;IAC/B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,uBAAuB;IACvB,SAAS,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;IAC/D,wCAAwC;IACxC,aAAa,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAC3E,8CAA8C;IAC9C,eAAe,CAAC,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAAC;IACjF,wCAAwC;IACxC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAED;;;;;GAKG;AACH,wBAAsB,iBAAiB,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,WAAW,CAAC,CA0GvF;AAED;;;;;;;;GAQG;AACH,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,MAAM,EACf,WAAW,SAAK,EAChB,OAAO,SAAO,GACb,OAAO,CAAC,MAAM,CAAC,CAmBjB"}
@@ -0,0 +1,125 @@
1
+ /**
2
+ * Provisioning utilities for creating apps and API keys.
3
+ *
4
+ * These utilities are primarily for demos and development.
5
+ * In production, apps and API keys should be created through
6
+ * your backend or the Dink admin dashboard.
7
+ *
8
+ * @example
9
+ * ```typescript
10
+ * import { createAdminClient } from '@fatagnus/dink-sync';
11
+ *
12
+ * const admin = await createAdminClient({
13
+ * serverUrl: 'nats://localhost:4222',
14
+ * adminKey: 'your-admin-key',
15
+ * });
16
+ *
17
+ * const { app, apiKey } = await admin.createApp({ name: 'my-app' });
18
+ * const { edgeKey } = await admin.createEdgeKey({
19
+ * appApiKey: apiKey,
20
+ * edgeId: 'edge-1',
21
+ * });
22
+ *
23
+ * await admin.close();
24
+ * ```
25
+ */
26
+ import { connect, StringCodec, headers } from 'nats';
27
+ const sc = StringCodec();
28
+ /**
29
+ * Create an admin client for provisioning apps and API keys.
30
+ *
31
+ * @param config - Configuration for the admin client
32
+ * @returns Promise resolving to an AdminClient
33
+ */
34
+ export async function createAdminClient(config) {
35
+ const { serverUrl, adminKey, requestTimeout = 10000 } = config;
36
+ const nc = await connect({
37
+ servers: serverUrl,
38
+ token: adminKey,
39
+ name: 'admin-client',
40
+ });
41
+ return {
42
+ async createApp(options) {
43
+ const h = headers();
44
+ h.set('Authorization', `Bearer ${adminKey}`);
45
+ const msg = await nc.request('$ADMIN.APPS.CREATE', sc.encode(JSON.stringify({ name: options.name })), { timeout: requestTimeout, headers: h });
46
+ const result = JSON.parse(sc.decode(msg.data));
47
+ if (!result.success || !result.data) {
48
+ throw new Error(`Failed to create app: ${result.error?.message || 'unknown error'}`);
49
+ }
50
+ return {
51
+ app: result.data.app,
52
+ apiKey: result.data.api_key,
53
+ };
54
+ },
55
+ async createEdgeKey(options) {
56
+ const { appApiKey, edgeId, name } = options;
57
+ const h = headers();
58
+ h.set('Authorization', `Bearer ${appApiKey}`);
59
+ const msg = await nc.request('$API.KEYS.CREATE', sc.encode(JSON.stringify({
60
+ name: name || `edge-${edgeId}`,
61
+ type: 'edge',
62
+ edge_id: edgeId,
63
+ scope_bundle: 'bundle:edge',
64
+ })), { timeout: requestTimeout, headers: h });
65
+ const result = JSON.parse(sc.decode(msg.data));
66
+ if (!result.success || !result.data) {
67
+ throw new Error(`Failed to create edge key: ${result.error?.message || 'unknown error'}`);
68
+ }
69
+ return {
70
+ edgeKey: result.data.api_key,
71
+ };
72
+ },
73
+ async configureConvex(options) {
74
+ const { appId, convexUrl, convexSiteUrl, syncKey } = options;
75
+ const h = headers();
76
+ h.set('Authorization', `Bearer ${adminKey}`);
77
+ const msg = await nc.request('$ADMIN.APPS.CONFIGURE_CONVEX', sc.encode(JSON.stringify({
78
+ app_id: appId,
79
+ convex_url: convexUrl,
80
+ convex_site_url: convexSiteUrl,
81
+ sync_key: syncKey,
82
+ })), { timeout: requestTimeout, headers: h });
83
+ const result = JSON.parse(sc.decode(msg.data));
84
+ if (!result.success || !result.data) {
85
+ throw new Error(`Failed to configure Convex: ${result.error?.message || 'unknown error'}`);
86
+ }
87
+ return {
88
+ syncKey: result.data.sync_key,
89
+ status: result.data.status,
90
+ };
91
+ },
92
+ async close() {
93
+ await nc.drain();
94
+ await nc.close();
95
+ },
96
+ };
97
+ }
98
+ /**
99
+ * Helper to read an admin key from a file with retry.
100
+ * Useful for Docker environments where the key file may not exist immediately.
101
+ *
102
+ * @param keyPath - Path to the admin key file
103
+ * @param maxAttempts - Maximum number of attempts (default: 30)
104
+ * @param delayMs - Delay between attempts in ms (default: 1000)
105
+ * @returns Promise resolving to the admin key
106
+ */
107
+ export async function readAdminKeyWithRetry(keyPath, maxAttempts = 30, delayMs = 1000) {
108
+ const fs = await import('fs/promises');
109
+ for (let i = 0; i < maxAttempts; i++) {
110
+ try {
111
+ const key = (await fs.readFile(keyPath, 'utf-8')).trim();
112
+ if (key) {
113
+ return key;
114
+ }
115
+ }
116
+ catch {
117
+ // File doesn't exist yet
118
+ }
119
+ if (i < maxAttempts - 1) {
120
+ await new Promise(resolve => setTimeout(resolve, delayMs));
121
+ }
122
+ }
123
+ throw new Error(`Could not read admin key from ${keyPath} after ${maxAttempts} attempts`);
124
+ }
125
+ //# sourceMappingURL=provisioning.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provisioning.js","sourceRoot":"","sources":["../../src/client/provisioning.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import type { Signal } from './types.js';
2
+ /**
3
+ * Creates a reactive signal that holds a value and notifies subscribers of changes.
4
+ */
5
+ export declare function createSignal<T>(initialValue: T): WritableSignal<T>;
6
+ /**
7
+ * A signal that can be both read and written to.
8
+ */
9
+ export interface WritableSignal<T> extends Signal<T> {
10
+ /** Set the signal's value and notify subscribers */
11
+ set(value: T): void;
12
+ }
13
+ //# sourceMappingURL=signal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signal.d.ts","sourceRoot":"","sources":["../../src/client/signal.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAe,MAAM,YAAY,CAAC;AAEtD;;GAEG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,CAyBlE;AAED;;GAEG;AACH,MAAM,WAAW,cAAc,CAAC,CAAC,CAAE,SAAQ,MAAM,CAAC,CAAC,CAAC;IAClD,oDAAoD;IACpD,GAAG,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC;CACrB"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Creates a reactive signal that holds a value and notifies subscribers of changes.
3
+ */
4
+ export function createSignal(initialValue) {
5
+ let value = initialValue;
6
+ const subscribers = new Set();
7
+ return {
8
+ get value() {
9
+ return value;
10
+ },
11
+ set(newValue) {
12
+ if (value !== newValue) {
13
+ value = newValue;
14
+ subscribers.forEach(callback => callback(value));
15
+ }
16
+ },
17
+ subscribe(callback) {
18
+ subscribers.add(callback);
19
+ // Call immediately with current value
20
+ callback(value);
21
+ return () => {
22
+ subscribers.delete(callback);
23
+ };
24
+ },
25
+ };
26
+ }
27
+ //# sourceMappingURL=signal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signal.js","sourceRoot":"","sources":["../../src/client/signal.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,UAAU,YAAY,CAAI,YAAe;IAC7C,IAAI,KAAK,GAAG,YAAY,CAAC;IACzB,MAAM,WAAW,GAAG,IAAI,GAAG,EAAsB,CAAC;IAElD,OAAO;QACL,IAAI,KAAK;YACP,OAAO,KAAK,CAAC;QACf,CAAC;QAED,GAAG,CAAC,QAAW;YACb,IAAI,KAAK,KAAK,QAAQ,EAAE,CAAC;gBACvB,KAAK,GAAG,QAAQ,CAAC;gBACjB,WAAW,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;YACnD,CAAC;QACH,CAAC;QAED,SAAS,CAAC,QAA4B;YACpC,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YAC1B,sCAAsC;YACtC,QAAQ,CAAC,KAAK,CAAC,CAAC;YAChB,OAAO,GAAG,EAAE;gBACV,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAC/B,CAAC,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC"}