@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.
- package/README.md +312 -0
- package/dist/client/attachment.d.ts +225 -0
- package/dist/client/attachment.d.ts.map +1 -0
- package/dist/client/attachment.js +402 -0
- package/dist/client/attachment.js.map +1 -0
- package/dist/client/binary-encoding.d.ts +45 -0
- package/dist/client/binary-encoding.d.ts.map +1 -0
- package/dist/client/binary-encoding.js +90 -0
- package/dist/client/binary-encoding.js.map +1 -0
- package/dist/client/collection.d.ts +10 -0
- package/dist/client/collection.d.ts.map +1 -0
- package/dist/client/collection.js +924 -0
- package/dist/client/collection.js.map +1 -0
- package/dist/client/compression.d.ts +56 -0
- package/dist/client/compression.d.ts.map +1 -0
- package/dist/client/compression.js +173 -0
- package/dist/client/compression.js.map +1 -0
- package/dist/client/crdt/index.d.ts +2 -0
- package/dist/client/crdt/index.d.ts.map +1 -0
- package/dist/client/crdt/index.js +2 -0
- package/dist/client/crdt/index.js.map +1 -0
- package/dist/client/crdt/yjs-doc.d.ts +88 -0
- package/dist/client/crdt/yjs-doc.d.ts.map +1 -0
- package/dist/client/crdt/yjs-doc.js +123 -0
- package/dist/client/crdt/yjs-doc.js.map +1 -0
- package/dist/client/index.d.ts +66 -0
- package/dist/client/index.d.ts.map +1 -0
- package/dist/client/index.js +233 -0
- package/dist/client/index.js.map +1 -0
- package/dist/client/mock-transport.d.ts +155 -0
- package/dist/client/mock-transport.d.ts.map +1 -0
- package/dist/client/mock-transport.js +292 -0
- package/dist/client/mock-transport.js.map +1 -0
- package/dist/client/network-detector.d.ts +65 -0
- package/dist/client/network-detector.d.ts.map +1 -0
- package/dist/client/network-detector.js +147 -0
- package/dist/client/network-detector.js.map +1 -0
- package/dist/client/provisioning.d.ts +126 -0
- package/dist/client/provisioning.d.ts.map +1 -0
- package/dist/client/provisioning.js +125 -0
- package/dist/client/provisioning.js.map +1 -0
- package/dist/client/signal.d.ts +13 -0
- package/dist/client/signal.d.ts.map +1 -0
- package/dist/client/signal.js +27 -0
- package/dist/client/signal.js.map +1 -0
- package/dist/client/sync-engine.d.ts +298 -0
- package/dist/client/sync-engine.d.ts.map +1 -0
- package/dist/client/sync-engine.js +904 -0
- package/dist/client/sync-engine.js.map +1 -0
- package/dist/client/synced-edge.d.ts +109 -0
- package/dist/client/synced-edge.d.ts.map +1 -0
- package/dist/client/synced-edge.js +179 -0
- package/dist/client/synced-edge.js.map +1 -0
- package/dist/client/synced-offline-edge-types.d.ts +540 -0
- package/dist/client/synced-offline-edge-types.d.ts.map +1 -0
- package/dist/client/synced-offline-edge-types.js +10 -0
- package/dist/client/synced-offline-edge-types.js.map +1 -0
- package/dist/client/synced-offline-edge.d.ts +54 -0
- package/dist/client/synced-offline-edge.d.ts.map +1 -0
- package/dist/client/synced-offline-edge.js +731 -0
- package/dist/client/synced-offline-edge.js.map +1 -0
- package/dist/client/transport.d.ts +202 -0
- package/dist/client/transport.d.ts.map +1 -0
- package/dist/client/transport.js +409 -0
- package/dist/client/transport.js.map +1 -0
- package/dist/client/types.d.ts +622 -0
- package/dist/client/types.d.ts.map +1 -0
- package/dist/client/types.js +60 -0
- package/dist/client/types.js.map +1 -0
- package/dist/client/validation.d.ts +61 -0
- package/dist/client/validation.d.ts.map +1 -0
- package/dist/client/validation.js +57 -0
- package/dist/client/validation.js.map +1 -0
- package/dist/client/versioning.d.ts +134 -0
- package/dist/client/versioning.d.ts.map +1 -0
- package/dist/client/versioning.js +304 -0
- package/dist/client/versioning.js.map +1 -0
- package/dist/index.d.ts +40 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +51 -0
- package/dist/index.js.map +1 -0
- package/dist/persistence/encryption.d.ts +114 -0
- package/dist/persistence/encryption.d.ts.map +1 -0
- package/dist/persistence/encryption.js +286 -0
- package/dist/persistence/encryption.js.map +1 -0
- package/dist/persistence/index.d.ts +21 -0
- package/dist/persistence/index.d.ts.map +1 -0
- package/dist/persistence/index.js +20 -0
- package/dist/persistence/index.js.map +1 -0
- package/dist/persistence/memory.d.ts +32 -0
- package/dist/persistence/memory.d.ts.map +1 -0
- package/dist/persistence/memory.js +57 -0
- package/dist/persistence/memory.js.map +1 -0
- package/dist/persistence/migrations.d.ts +106 -0
- package/dist/persistence/migrations.d.ts.map +1 -0
- package/dist/persistence/migrations.js +176 -0
- package/dist/persistence/migrations.js.map +1 -0
- package/dist/persistence/pending-queue.d.ts +109 -0
- package/dist/persistence/pending-queue.d.ts.map +1 -0
- package/dist/persistence/pending-queue.js +249 -0
- package/dist/persistence/pending-queue.js.map +1 -0
- package/dist/persistence/pglite.d.ts +72 -0
- package/dist/persistence/pglite.d.ts.map +1 -0
- package/dist/persistence/pglite.js +126 -0
- package/dist/persistence/pglite.js.map +1 -0
- package/dist/persistence/quota-manager.d.ts +134 -0
- package/dist/persistence/quota-manager.d.ts.map +1 -0
- package/dist/persistence/quota-manager.js +242 -0
- package/dist/persistence/quota-manager.js.map +1 -0
- package/dist/persistence/types.d.ts +54 -0
- package/dist/persistence/types.d.ts.map +1 -0
- package/dist/persistence/types.js +2 -0
- package/dist/persistence/types.js.map +1 -0
- package/dist/react/OfflineEdgeProvider.d.ts +91 -0
- package/dist/react/OfflineEdgeProvider.d.ts.map +1 -0
- package/dist/react/OfflineEdgeProvider.js +127 -0
- package/dist/react/OfflineEdgeProvider.js.map +1 -0
- package/dist/react/SyncedOfflineEdgeProvider.d.ts +105 -0
- package/dist/react/SyncedOfflineEdgeProvider.d.ts.map +1 -0
- package/dist/react/SyncedOfflineEdgeProvider.js +138 -0
- package/dist/react/SyncedOfflineEdgeProvider.js.map +1 -0
- package/dist/react/index.d.ts +50 -0
- package/dist/react/index.d.ts.map +1 -0
- package/dist/react/index.js +51 -0
- package/dist/react/index.js.map +1 -0
- package/dist/react/useCollection.d.ts +77 -0
- package/dist/react/useCollection.d.ts.map +1 -0
- package/dist/react/useCollection.js +113 -0
- package/dist/react/useCollection.js.map +1 -0
- package/dist/react/useCollectionSyncMode.d.ts +61 -0
- package/dist/react/useCollectionSyncMode.d.ts.map +1 -0
- package/dist/react/useCollectionSyncMode.js +93 -0
- package/dist/react/useCollectionSyncMode.js.map +1 -0
- package/dist/react/useConnectionState.d.ts +44 -0
- package/dist/react/useConnectionState.d.ts.map +1 -0
- package/dist/react/useConnectionState.js +46 -0
- package/dist/react/useConnectionState.js.map +1 -0
- package/dist/react/useDocumentSyncStatus.d.ts +72 -0
- package/dist/react/useDocumentSyncStatus.d.ts.map +1 -0
- package/dist/react/useDocumentSyncStatus.js +110 -0
- package/dist/react/useDocumentSyncStatus.js.map +1 -0
- package/dist/react/useOfflineEdge.d.ts +58 -0
- package/dist/react/useOfflineEdge.d.ts.map +1 -0
- package/dist/react/useOfflineEdge.js +54 -0
- package/dist/react/useOfflineEdge.js.map +1 -0
- package/dist/react/usePendingChanges.d.ts +67 -0
- package/dist/react/usePendingChanges.d.ts.map +1 -0
- package/dist/react/usePendingChanges.js +90 -0
- package/dist/react/usePendingChanges.js.map +1 -0
- package/dist/react/useRejectedDocuments.d.ts +112 -0
- package/dist/react/useRejectedDocuments.d.ts.map +1 -0
- package/dist/react/useRejectedDocuments.js +213 -0
- package/dist/react/useRejectedDocuments.js.map +1 -0
- package/dist/react/useSyncControls.d.ts +96 -0
- package/dist/react/useSyncControls.d.ts.map +1 -0
- package/dist/react/useSyncControls.js +112 -0
- package/dist/react/useSyncControls.js.map +1 -0
- package/dist/react/useSyncProgress.d.ts +78 -0
- package/dist/react/useSyncProgress.d.ts.map +1 -0
- package/dist/react/useSyncProgress.js +90 -0
- package/dist/react/useSyncProgress.js.map +1 -0
- package/dist/react/useSyncRejected.d.ts +47 -0
- package/dist/react/useSyncRejected.d.ts.map +1 -0
- package/dist/react/useSyncRejected.js +55 -0
- package/dist/react/useSyncRejected.js.map +1 -0
- package/dist/react/useSyncStatus.d.ts +56 -0
- package/dist/react/useSyncStatus.d.ts.map +1 -0
- package/dist/react/useSyncStatus.js +59 -0
- package/dist/react/useSyncStatus.js.map +1 -0
- package/dist/react/useSyncedOfflineEdge.d.ts +69 -0
- package/dist/react/useSyncedOfflineEdge.d.ts.map +1 -0
- package/dist/react/useSyncedOfflineEdge.js +65 -0
- package/dist/react/useSyncedOfflineEdge.js.map +1 -0
- package/dist/service-worker/index.d.ts +7 -0
- package/dist/service-worker/index.d.ts.map +1 -0
- package/dist/service-worker/index.js +7 -0
- package/dist/service-worker/index.js.map +1 -0
- package/dist/service-worker/sync-worker.d.ts +230 -0
- package/dist/service-worker/sync-worker.d.ts.map +1 -0
- package/dist/service-worker/sync-worker.js +471 -0
- package/dist/service-worker/sync-worker.js.map +1 -0
- package/dist/types.d.ts +6 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -0
- 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"}
|