@filen/sync 0.1.4 → 0.1.6

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 CHANGED
@@ -1 +1,59 @@
1
- work in progress, do not use it yet nor report issues/request features
1
+ <br/>
2
+ <p align="center">
3
+ <h3 align="center">Filen Sync</h3>
4
+
5
+ <p align="center">
6
+ A package to sync local and remote directories.
7
+ <br/>
8
+ <br/>
9
+ </p>
10
+ </p>
11
+
12
+ ![Contributors](https://img.shields.io/github/contributors/FilenCloudDienste/filen-sync?color=dark-green) ![Forks](https://img.shields.io/github/forks/FilenCloudDienste/filen-sync?style=social) ![Stargazers](https://img.shields.io/github/stars/FilenCloudDienste/filen-sync?style=social) ![Issues](https://img.shields.io/github/issues/FilenCloudDienste/filen-sync) ![License](https://img.shields.io/github/license/FilenCloudDienste/filen-sync)
13
+
14
+ # Attention
15
+
16
+ The package is still a work in progress. DO NOT USE IT IN PRODUCTION YET. Class names, function names, types, definitions, constants etc. are subject to change until we release a fully tested and stable version.
17
+
18
+ ### Installation
19
+
20
+ 1. Install using NPM
21
+
22
+ ```sh
23
+ npm install @filen/sync@latest
24
+ ```
25
+
26
+ 2. Initialize the server and query it using aws-sdk
27
+
28
+ ```typescript
29
+ import Sync from "@filen/sync"
30
+
31
+ const sync = new Sync({
32
+ syncPairs: [
33
+ {
34
+ uuid: "UUIDV4", // Only used locally to identify the sync pair
35
+ localPath: pathModule.join(__dirname, "sync"), // Local absolute path
36
+ remotePath: "/sync", // Remote absolute path (UNIX style)
37
+ remoteParentUUID: "UUIDV4", // UUIDv4 of the remote parent directory
38
+ mode: "twoWay", // Sync mode
39
+ paused: false,
40
+ excludeDotFiles: true,
41
+ name: "Sync" // Only used locally to identify the sync pair
42
+ }
43
+ ],
44
+ sdk: new FilenSDK(), // You can either directly pass a configured FilenSDK instance or instantiate a new SDK instance when passing `sdkConfig` (optional)
45
+ sdkConfig, // FilenSDK config object (omit when SDK instance is passed, needed when no SDK instance is passed)
46
+ dbPath: pathModule.join(__dirname, "db"), // Used to store sync state and other data
47
+ runOnce: false, // Run the sync once
48
+ onMessage(message) {
49
+ console.log(message.type)
50
+ }
51
+ })
52
+
53
+ // Start the sync
54
+ await server.initialize()
55
+ ```
56
+
57
+ ## License
58
+
59
+ Distributed under the AGPL-3.0 License. See [LICENSE](https://github.com/FilenCloudDienste/filen-sync/blob/main/LICENSE.md) for more information.
package/dist/ignorer.d.ts CHANGED
@@ -6,6 +6,7 @@ export declare class Ignorer {
6
6
  private readonly name;
7
7
  private readonly cache;
8
8
  constructor(sync: Sync, name?: string);
9
+ fetch(): Promise<string>;
9
10
  initialize(passedContent?: string): Promise<void>;
10
11
  update(content?: string): Promise<void>;
11
12
  clear(): void;
package/dist/ignorer.js CHANGED
@@ -9,13 +9,32 @@ const path_1 = __importDefault(require("path"));
9
9
  const fs_extra_1 = __importDefault(require("fs-extra"));
10
10
  exports.IGNORER_VERSION = 1;
11
11
  class Ignorer {
12
- constructor(sync, name = "localIgnorer") {
12
+ constructor(sync, name = "ignorer") {
13
13
  this.instance = (0, ignore_1.default)();
14
- this.name = "localIgnorer";
14
+ this.name = "ignorer";
15
15
  this.cache = {};
16
16
  this.sync = sync;
17
17
  this.name = name;
18
18
  }
19
+ async fetch() {
20
+ const filePath = path_1.default.join(this.sync.dbPath, this.name, `v${exports.IGNORER_VERSION}`, this.sync.syncPair.uuid, "filenIgnore");
21
+ await fs_extra_1.default.ensureDir(path_1.default.dirname(filePath));
22
+ const exists = await fs_extra_1.default.exists(filePath);
23
+ if (!exists) {
24
+ return "";
25
+ }
26
+ const stats = await fs_extra_1.default.stat(filePath);
27
+ if (stats.size === 0) {
28
+ return "";
29
+ }
30
+ const readContent = await fs_extra_1.default.readFile(filePath, {
31
+ encoding: "utf-8"
32
+ });
33
+ if (readContent.length === 0) {
34
+ return "";
35
+ }
36
+ return readContent;
37
+ }
19
38
  async initialize(passedContent) {
20
39
  let content = "";
21
40
  const filePath = path_1.default.join(this.sync.dbPath, this.name, `v${exports.IGNORER_VERSION}`, this.sync.syncPair.uuid, "filenIgnore");
@@ -27,23 +46,12 @@ class Ignorer {
27
46
  content = passedContent;
28
47
  }
29
48
  else {
30
- const exists = await fs_extra_1.default.exists(filePath);
31
- if (!exists) {
32
- return;
33
- }
34
- const stats = await fs_extra_1.default.stat(filePath);
35
- if (stats.size === 0) {
36
- return;
37
- }
38
- const readContent = await fs_extra_1.default.readFile(filePath, {
39
- encoding: "utf-8"
40
- });
41
- if (readContent.length === 0) {
42
- return;
43
- }
44
- content = readContent;
49
+ content = await this.fetch();
50
+ }
51
+ this.instance = (0, ignore_1.default)();
52
+ if (content.length > 0) {
53
+ this.instance.add(content);
45
54
  }
46
- this.instance = (0, ignore_1.default)().add(content);
47
55
  }
48
56
  async update(content) {
49
57
  await this.initialize(content);
@@ -1 +1 @@
1
- {"version":3,"file":"ignorer.js","sourceRoot":"","sources":["../src/ignorer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ignorer.js","sourceRoot":"","sources":["../src/ignorer.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { type SyncPair, type SyncMessage } from "./types";
1
+ import { type SyncPair, type SyncMessage, type SyncMode } from "./types";
2
2
  import Sync from "./lib/sync";
3
3
  import FilenSDK, { type FilenSDKConfig } from "@filen/sdk";
4
4
  import Logger from "./lib/logger";
@@ -14,33 +14,37 @@ export declare class SyncWorker {
14
14
  readonly syncPairs: SyncPair[];
15
15
  readonly syncs: Record<string, Sync>;
16
16
  readonly dbPath: string;
17
- readonly initSyncPairsMutex: import("./semaphore").ISemaphore;
17
+ readonly updateSyncPairsMutex: import("./semaphore").ISemaphore;
18
18
  readonly sdk: FilenSDK;
19
19
  readonly logger: Logger;
20
20
  readonly runOnce: boolean;
21
- constructor({ syncPairs, dbPath, sdkConfig, onMessage, runOnce }: {
21
+ constructor({ syncPairs, dbPath, sdkConfig, onMessage, runOnce, sdk }: {
22
22
  syncPairs: SyncPair[];
23
23
  dbPath: string;
24
- sdkConfig: FilenSDKConfig;
24
+ sdkConfig?: FilenSDKConfig;
25
25
  onMessage?: (message: SyncMessage) => void;
26
26
  runOnce?: boolean;
27
+ sdk?: FilenSDK;
27
28
  });
29
+ resetCache(uuid: string): void;
28
30
  /**
29
- * Sets up receiving message from the main thread.
31
+ * Update sync pairs.
30
32
  *
31
- * @private
32
- */
33
- private setupMainThreadListeners;
34
- private resetSyncPairsCache;
35
- /**
36
- * Initialize sync pairs.
37
- *
38
- * @private
33
+ * @public
39
34
  * @async
40
35
  * @param {SyncPair[]} pairs
41
36
  * @returns {Promise<void>}
42
37
  */
43
- private initSyncPairs;
38
+ updateSyncPairs(pairs: SyncPair[]): Promise<void>;
39
+ updatePaused(uuid: string, paused: boolean): void;
40
+ updateRemoved(uuid: string, removed: boolean): void;
41
+ updateExcludeDotFiles(uuid: string, excludeDotFiles: boolean): void;
42
+ updateMode(uuid: string, mode: SyncMode): void;
43
+ updateIgnorerContent(uuid: string, content?: string): void;
44
+ fetchIgnorerContent(uuid: string): Promise<string>;
45
+ stopTransfer(uuid: string, type: "download" | "upload", relativePath: string): void;
46
+ pauseTransfer(uuid: string, type: "download" | "upload", relativePath: string): void;
47
+ resumeTransfer(uuid: string, type: "download" | "upload", relativePath: string): void;
44
48
  /**
45
49
  * Initialize the Sync worker.
46
50
  * @date 2/23/2024 - 5:51:12 AM
package/dist/index.js CHANGED
@@ -20,11 +20,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
20
20
  exports.SyncWorker = void 0;
21
21
  const sync_1 = __importDefault(require("./lib/sync"));
22
22
  const sdk_1 = __importDefault(require("@filen/sdk"));
23
- const worker_threads_1 = require("worker_threads");
24
- const ipc_1 = require("./lib/ipc");
25
23
  const semaphore_1 = require("./semaphore");
26
24
  const constants_1 = require("./constants");
27
- const utils_1 = require("./utils");
28
25
  const logger_1 = __importDefault(require("./lib/logger"));
29
26
  /**
30
27
  * SyncWorker
@@ -35,9 +32,9 @@ const logger_1 = __importDefault(require("./lib/logger"));
35
32
  * @typedef {SyncWorker}
36
33
  */
37
34
  class SyncWorker {
38
- constructor({ syncPairs, dbPath, sdkConfig, onMessage, runOnce = false }) {
35
+ constructor({ syncPairs, dbPath, sdkConfig, onMessage, runOnce = false, sdk }) {
39
36
  this.syncs = {};
40
- this.initSyncPairsMutex = new semaphore_1.Semaphore(1);
37
+ this.updateSyncPairsMutex = new semaphore_1.Semaphore(1);
41
38
  if (onMessage) {
42
39
  process.onMessage = onMessage;
43
40
  }
@@ -45,76 +42,43 @@ class SyncWorker {
45
42
  this.syncPairs = syncPairs;
46
43
  this.dbPath = dbPath;
47
44
  this.logger = new logger_1.default(dbPath);
48
- this.sdk = new sdk_1.default(Object.assign(Object.assign({}, sdkConfig), { connectToSocket: true, metadataCache: true }));
49
- this.setupMainThreadListeners();
45
+ this.sdk = sdk
46
+ ? sdk
47
+ : new sdk_1.default(Object.assign(Object.assign({}, sdkConfig), { connectToSocket: true, metadataCache: true }));
50
48
  }
51
- /**
52
- * Sets up receiving message from the main thread.
53
- *
54
- * @private
55
- */
56
- setupMainThreadListeners() {
57
- const receiver = !worker_threads_1.isMainThread && worker_threads_1.parentPort ? worker_threads_1.parentPort : process;
58
- receiver.on("message", async (message) => {
59
- if (message.type === "updateSyncPairs") {
60
- try {
61
- await this.initSyncPairs(message.data.pairs);
62
- if (message.data.resetCache) {
63
- this.resetSyncPairsCache();
64
- }
65
- (0, ipc_1.postMessageToMain)({
66
- type: "syncPairsUpdated"
67
- });
68
- }
69
- catch (e) {
70
- this.logger.log("error", e, "index.setupMainThreadListeners");
71
- if (e instanceof Error) {
72
- (0, ipc_1.postMessageToMain)({
73
- type: "error",
74
- data: {
75
- error: (0, utils_1.serializeError)(e)
76
- }
77
- });
78
- }
79
- }
80
- }
81
- else if (message.type === "resetSyncPairCache") {
82
- this.resetSyncPairsCache();
83
- }
84
- });
85
- }
86
- resetSyncPairsCache() {
49
+ resetCache(uuid) {
87
50
  for (const pair of this.syncPairs) {
88
51
  const sync = this.syncs[pair.uuid];
89
- if (!sync) {
52
+ if (!sync || pair.uuid !== uuid) {
90
53
  continue;
91
54
  }
92
55
  sync.localFileSystem.lastDirectoryChangeTimestamp = Date.now() - constants_1.SYNC_INTERVAL * 2;
93
56
  sync.localFileSystem.getDirectoryTreeCache = {
94
57
  timestamp: 0,
95
58
  tree: {},
96
- inodes: {}
59
+ inodes: {},
60
+ ignored: [],
61
+ errors: []
97
62
  };
98
63
  sync.remoteFileSystem.previousTreeRawResponse = "";
99
64
  sync.remoteFileSystem.getDirectoryTreeCache = {
100
65
  timestamp: 0,
101
66
  tree: {},
102
- uuids: {}
67
+ uuids: {},
68
+ ignored: []
103
69
  };
104
70
  }
105
71
  }
106
72
  /**
107
- * Initialize sync pairs.
73
+ * Update sync pairs.
108
74
  *
109
- * @private
75
+ * @public
110
76
  * @async
111
77
  * @param {SyncPair[]} pairs
112
78
  * @returns {Promise<void>}
113
79
  */
114
- async initSyncPairs(pairs) {
115
- await this.initSyncPairsMutex.acquire();
116
- const currentSyncPairsUUIDs = this.syncPairs.map(pair => pair.uuid);
117
- const newSyncPairsUUIDs = pairs.map(pair => pair.uuid);
80
+ async updateSyncPairs(pairs) {
81
+ await this.updateSyncPairsMutex.acquire();
118
82
  try {
119
83
  const promises = [];
120
84
  for (const pair of pairs) {
@@ -127,18 +91,123 @@ class SyncWorker {
127
91
  }
128
92
  }
129
93
  await Promise.all(promises);
130
- for (const uuid of currentSyncPairsUUIDs) {
131
- if (!newSyncPairsUUIDs.includes(uuid) && this.syncs[uuid]) {
132
- this.syncs[uuid].removed = true;
133
- }
134
- }
135
94
  }
136
95
  catch (e) {
137
- this.logger.log("error", e, "index.initSyncPairs");
96
+ this.logger.log("error", e, "index.updateSyncPairs");
138
97
  throw e;
139
98
  }
140
99
  finally {
141
- this.initSyncPairsMutex.release();
100
+ this.updateSyncPairsMutex.release();
101
+ }
102
+ }
103
+ updatePaused(uuid, paused) {
104
+ for (const syncUUID in this.syncs) {
105
+ if (syncUUID === uuid) {
106
+ this.syncs[syncUUID].paused = paused;
107
+ const pauseSignals = this.syncs[syncUUID].pauseSignals;
108
+ for (const signal in pauseSignals) {
109
+ const pauseSignal = pauseSignals[signal];
110
+ if (paused) {
111
+ if (!pauseSignal.isPaused()) {
112
+ pauseSignal.pause();
113
+ }
114
+ }
115
+ else {
116
+ if (pauseSignal.isPaused()) {
117
+ pauseSignal.resume();
118
+ }
119
+ }
120
+ }
121
+ break;
122
+ }
123
+ }
124
+ }
125
+ updateRemoved(uuid, removed) {
126
+ for (const syncUUID in this.syncs) {
127
+ if (syncUUID === uuid) {
128
+ this.syncs[syncUUID].removed = removed;
129
+ const abortControllers = this.syncs[syncUUID].abortControllers;
130
+ for (const controller in abortControllers) {
131
+ const abortController = abortControllers[controller];
132
+ if (removed) {
133
+ if (!abortController.signal.aborted) {
134
+ abortController.abort();
135
+ }
136
+ }
137
+ }
138
+ break;
139
+ }
140
+ }
141
+ }
142
+ updateExcludeDotFiles(uuid, excludeDotFiles) {
143
+ for (const syncUUID in this.syncs) {
144
+ if (syncUUID === uuid) {
145
+ this.syncs[syncUUID].excludeDotFiles = excludeDotFiles;
146
+ break;
147
+ }
148
+ }
149
+ }
150
+ updateMode(uuid, mode) {
151
+ for (const syncUUID in this.syncs) {
152
+ if (syncUUID === uuid) {
153
+ this.syncs[syncUUID].mode = mode;
154
+ break;
155
+ }
156
+ }
157
+ }
158
+ updateIgnorerContent(uuid, content) {
159
+ for (const syncUUID in this.syncs) {
160
+ if (syncUUID === uuid) {
161
+ this.syncs[syncUUID].ignorer.update(content);
162
+ break;
163
+ }
164
+ }
165
+ }
166
+ async fetchIgnorerContent(uuid) {
167
+ for (const syncUUID in this.syncs) {
168
+ if (syncUUID === uuid) {
169
+ return await this.syncs[syncUUID].ignorer.fetch();
170
+ }
171
+ }
172
+ return "";
173
+ }
174
+ stopTransfer(uuid, type, relativePath) {
175
+ for (const syncUUID in this.syncs) {
176
+ if (syncUUID === uuid) {
177
+ const abortControllers = this.syncs[syncUUID].abortControllers;
178
+ const signalKey = `${type}:${relativePath}`;
179
+ const abortController = abortControllers[signalKey];
180
+ if (abortController && !abortController.signal.aborted) {
181
+ abortController.abort();
182
+ }
183
+ break;
184
+ }
185
+ }
186
+ }
187
+ pauseTransfer(uuid, type, relativePath) {
188
+ for (const syncUUID in this.syncs) {
189
+ if (syncUUID === uuid) {
190
+ const pauseSignals = this.syncs[syncUUID].pauseSignals;
191
+ const signalKey = `${type}:${relativePath}`;
192
+ const pauseSignal = pauseSignals[signalKey];
193
+ if (pauseSignal && !pauseSignal.isPaused()) {
194
+ pauseSignal.pause();
195
+ }
196
+ break;
197
+ }
198
+ }
199
+ }
200
+ resumeTransfer(uuid, type, relativePath) {
201
+ for (const syncUUID in this.syncs) {
202
+ if (syncUUID === uuid) {
203
+ const pauseSignals = this.syncs[syncUUID].pauseSignals;
204
+ const signalKey = `${type}:${relativePath}`;
205
+ const pauseSignal = pauseSignals[signalKey];
206
+ if (pauseSignal && pauseSignal.isPaused()) {
207
+ pauseSignal.resume();
208
+ }
209
+ break;
210
+ }
142
211
  }
143
212
  }
144
213
  /**
@@ -150,7 +219,7 @@ class SyncWorker {
150
219
  * @returns {Promise<void>}
151
220
  */
152
221
  async initialize() {
153
- await this.initSyncPairs(this.syncPairs);
222
+ await this.updateSyncPairs(this.syncPairs);
154
223
  }
155
224
  }
156
225
  exports.SyncWorker = SyncWorker;
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -21,10 +21,11 @@ export type LocalTreeError = {
21
21
  relativePath: string;
22
22
  error: Error;
23
23
  };
24
+ export type LocalTreeIgnoredReason = "dotFile" | "localIgnore" | "defaultIgnore" | "empty" | "symlink" | "invalidType" | "duplicate" | "permissions";
24
25
  export type LocalTreeIgnored = {
25
26
  localPath: string;
26
27
  relativePath: string;
27
- reason: "dotFile" | "localIgnore" | "defaultIgnore" | "empty" | "symlink" | "invalidType";
28
+ reason: LocalTreeIgnoredReason;
28
29
  };
29
30
  /**
30
31
  * LocalFileSystem
@@ -41,12 +42,15 @@ export declare class LocalFileSystem {
41
42
  timestamp: number;
42
43
  tree: LocalDirectoryTree;
43
44
  inodes: LocalDirectoryINodes;
45
+ ignored: LocalTreeIgnored[];
46
+ errors: LocalTreeError[];
44
47
  };
45
48
  watcherRunning: boolean;
46
49
  private watcherInstance;
47
50
  readonly itemsMutex: import("../../semaphore").ISemaphore;
48
51
  readonly mutex: import("../../semaphore").ISemaphore;
49
52
  readonly mkdirMutex: import("../../semaphore").ISemaphore;
53
+ readonly listSemaphore: import("../../semaphore").ISemaphore;
50
54
  /**
51
55
  * Creates an instance of LocalFileSystem.
52
56
  *