document-drive 1.29.0-dev.0 → 1.29.0-dev.2
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/dist/prisma/schema.prisma +6 -10
- package/dist/src/cache/memory.d.ts +14 -4
- package/dist/src/cache/memory.d.ts.map +1 -1
- package/dist/src/cache/memory.js +57 -19
- package/dist/src/cache/redis.d.ts +14 -4
- package/dist/src/cache/redis.d.ts.map +1 -1
- package/dist/src/cache/redis.js +71 -19
- package/dist/src/cache/types.d.ts +10 -3
- package/dist/src/cache/types.d.ts.map +1 -1
- package/dist/src/cache/util.d.ts +3 -0
- package/dist/src/cache/util.d.ts.map +1 -0
- package/dist/src/cache/util.js +13 -0
- package/dist/src/server/base-server.d.ts +1 -1
- package/dist/src/server/base-server.d.ts.map +1 -1
- package/dist/src/server/base-server.js +13 -28
- package/dist/src/server/listener/listener-manager.js +2 -2
- package/dist/src/server/listener/transmitter/pull-responder.d.ts +1 -1
- package/dist/src/server/listener/transmitter/pull-responder.d.ts.map +1 -1
- package/dist/src/server/listener/transmitter/pull-responder.js +2 -3
- package/dist/src/server/sync-manager.d.ts.map +1 -1
- package/dist/src/server/sync-manager.js +7 -18
- package/dist/src/server/types.d.ts +0 -1
- package/dist/src/server/types.d.ts.map +1 -1
- package/dist/src/storage/browser.d.ts +6 -4
- package/dist/src/storage/browser.d.ts.map +1 -1
- package/dist/src/storage/browser.js +83 -22
- package/dist/src/storage/filesystem.d.ts +5 -3
- package/dist/src/storage/filesystem.d.ts.map +1 -1
- package/dist/src/storage/filesystem.js +83 -29
- package/dist/src/storage/ipfs.d.ts +5 -1
- package/dist/src/storage/ipfs.d.ts.map +1 -1
- package/dist/src/storage/ipfs.js +74 -21
- package/dist/src/storage/memory.d.ts +5 -5
- package/dist/src/storage/memory.d.ts.map +1 -1
- package/dist/src/storage/memory.js +78 -51
- package/dist/src/storage/prisma/factory.d.ts +4 -3
- package/dist/src/storage/prisma/factory.d.ts.map +1 -1
- package/dist/src/storage/prisma/factory.js +5 -5
- package/dist/src/storage/prisma/index.d.ts +11 -6
- package/dist/src/storage/prisma/index.d.ts.map +1 -1
- package/dist/src/storage/prisma/index.js +233 -190
- package/dist/src/storage/types.d.ts +6 -6
- package/dist/src/storage/types.d.ts.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +5 -5
|
@@ -27,7 +27,7 @@ model Document {
|
|
|
27
27
|
initialState String // json object with the scope as keys of the root object
|
|
28
28
|
documentType String
|
|
29
29
|
meta String?
|
|
30
|
-
|
|
30
|
+
synchronizationUnits SynchronizationUnit[]
|
|
31
31
|
driveDocuments DriveDocument[]
|
|
32
32
|
}
|
|
33
33
|
|
|
@@ -46,7 +46,6 @@ model DriveDocument {
|
|
|
46
46
|
model Operation {
|
|
47
47
|
id String @id @default(uuid())
|
|
48
48
|
opId String?
|
|
49
|
-
driveId String
|
|
50
49
|
Document Document? @relation(fields: [documentId], references: [id], onDelete: Cascade)
|
|
51
50
|
documentId String
|
|
52
51
|
scope String
|
|
@@ -63,22 +62,19 @@ model Operation {
|
|
|
63
62
|
context Json?
|
|
64
63
|
resultingState Bytes?
|
|
65
64
|
|
|
66
|
-
|
|
65
|
+
SynchronizationUnit SynchronizationUnit? @relation(fields: [syncId], references: [id], onDelete: Cascade)
|
|
67
66
|
|
|
68
|
-
@@unique([
|
|
67
|
+
@@unique([documentId, scope, branch, index(sort: Asc)], name: "unique_operation")
|
|
69
68
|
}
|
|
70
69
|
|
|
71
|
-
model
|
|
72
|
-
id String
|
|
73
|
-
driveId String
|
|
70
|
+
model SynchronizationUnit {
|
|
71
|
+
id String @id
|
|
74
72
|
documentId String
|
|
75
73
|
|
|
76
|
-
Document Document
|
|
74
|
+
Document Document @relation(fields: [documentId], references: [id], onDelete: Cascade)
|
|
77
75
|
scope String
|
|
78
76
|
branch String
|
|
79
77
|
operations Operation[]
|
|
80
|
-
|
|
81
|
-
@@id([id, driveId])
|
|
82
78
|
}
|
|
83
79
|
|
|
84
80
|
model Attachment {
|
|
@@ -1,10 +1,20 @@
|
|
|
1
|
+
import { DocumentDriveDocument } from "#drive-document-model/gen/types";
|
|
1
2
|
import { type PHDocument } from "document-model";
|
|
2
3
|
import { type ICache } from "./types.js";
|
|
3
4
|
declare class InMemoryCache implements ICache {
|
|
4
|
-
private
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
5
|
+
private idTodocument;
|
|
6
|
+
private idToDrive;
|
|
7
|
+
private slugToDriveId;
|
|
8
|
+
clear(): void;
|
|
9
|
+
setDocument(documentId: string, document: PHDocument): Promise<void>;
|
|
10
|
+
getDocument<TDocument extends PHDocument>(documentId: string): Promise<TDocument | undefined>;
|
|
11
|
+
deleteDocument(documentId: string): Promise<boolean>;
|
|
12
|
+
setDrive(driveId: string, drive: DocumentDriveDocument): Promise<void>;
|
|
13
|
+
getDrive(driveId: string): Promise<DocumentDriveDocument | undefined>;
|
|
14
|
+
deleteDrive(driveId: string): Promise<boolean>;
|
|
15
|
+
setDriveBySlug(slug: string, drive: DocumentDriveDocument): Promise<void>;
|
|
16
|
+
getDriveBySlug(slug: string): Promise<DocumentDriveDocument | undefined>;
|
|
17
|
+
deleteDriveBySlug(slug: string): Promise<boolean>;
|
|
8
18
|
}
|
|
9
19
|
export default InMemoryCache;
|
|
10
20
|
//# sourceMappingURL=memory.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../../../src/cache/memory.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../../../src/cache/memory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAC;AACxE,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,YAAY,CAAC;AAGzC,cAAM,aAAc,YAAW,MAAM;IACnC,OAAO,CAAC,YAAY,CAAiC;IACrD,OAAO,CAAC,SAAS,CAA4C;IAC7D,OAAO,CAAC,aAAa,CAA6B;IAElD,KAAK;IAUC,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU;IAKpD,WAAW,CAAC,SAAS,SAAS,UAAU,EAC5C,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC;IAI3B,cAAc,CAAC,UAAU,EAAE,MAAM;IAIjC,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,qBAAqB;IAKtD,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,qBAAqB,GAAG,SAAS,CAAC;IAIrE,WAAW,CAAC,OAAO,EAAE,MAAM;IAe3B,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,qBAAqB;IAMzD,cAAc,CAClB,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,qBAAqB,GAAG,SAAS,CAAC;IAQvC,iBAAiB,CAAC,IAAI,EAAE,MAAM;CASrC;AAED,eAAe,aAAa,CAAC"}
|
package/dist/src/cache/memory.js
CHANGED
|
@@ -1,26 +1,64 @@
|
|
|
1
|
+
import { trimResultingState } from "./util.js";
|
|
1
2
|
class InMemoryCache {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
3
|
+
idTodocument = new Map();
|
|
4
|
+
idToDrive = new Map();
|
|
5
|
+
slugToDriveId = new Map();
|
|
6
|
+
clear() {
|
|
7
|
+
this.idTodocument.clear();
|
|
8
|
+
this.idToDrive.clear();
|
|
9
|
+
this.slugToDriveId.clear();
|
|
10
|
+
}
|
|
11
|
+
/////////////////////////////////////////////////////////////////////////////
|
|
12
|
+
// ICache
|
|
13
|
+
/////////////////////////////////////////////////////////////////////////////
|
|
14
|
+
async setDocument(documentId, document) {
|
|
15
|
+
const doc = trimResultingState(document);
|
|
16
|
+
this.idTodocument.set(documentId, doc);
|
|
17
|
+
}
|
|
18
|
+
async getDocument(documentId) {
|
|
19
|
+
return this.idTodocument.get(documentId);
|
|
20
|
+
}
|
|
21
|
+
async deleteDocument(documentId) {
|
|
22
|
+
return this.idTodocument.delete(documentId);
|
|
23
|
+
}
|
|
24
|
+
async setDrive(driveId, drive) {
|
|
25
|
+
const doc = trimResultingState(drive);
|
|
26
|
+
this.idToDrive.set(driveId, doc);
|
|
27
|
+
}
|
|
28
|
+
async getDrive(driveId) {
|
|
29
|
+
return this.idToDrive.get(driveId);
|
|
30
|
+
}
|
|
31
|
+
async deleteDrive(driveId) {
|
|
32
|
+
// look up the slug
|
|
33
|
+
const drive = this.idToDrive.get(driveId);
|
|
34
|
+
if (!drive) {
|
|
35
|
+
return false;
|
|
36
|
+
}
|
|
37
|
+
const slug = drive.state.global.slug;
|
|
38
|
+
if (slug) {
|
|
39
|
+
this.slugToDriveId.delete(slug);
|
|
15
40
|
}
|
|
16
|
-
this.
|
|
17
|
-
return true;
|
|
41
|
+
return this.idToDrive.delete(driveId);
|
|
18
42
|
}
|
|
19
|
-
async
|
|
20
|
-
|
|
43
|
+
async setDriveBySlug(slug, drive) {
|
|
44
|
+
const driveId = drive.state.global.id;
|
|
45
|
+
this.slugToDriveId.set(slug, driveId);
|
|
46
|
+
this.setDrive(driveId, drive);
|
|
21
47
|
}
|
|
22
|
-
async
|
|
23
|
-
|
|
48
|
+
async getDriveBySlug(slug) {
|
|
49
|
+
const driveId = this.slugToDriveId.get(slug);
|
|
50
|
+
if (!driveId) {
|
|
51
|
+
return undefined;
|
|
52
|
+
}
|
|
53
|
+
return this.getDrive(driveId);
|
|
54
|
+
}
|
|
55
|
+
async deleteDriveBySlug(slug) {
|
|
56
|
+
const driveId = this.slugToDriveId.get(slug);
|
|
57
|
+
if (!driveId) {
|
|
58
|
+
return false;
|
|
59
|
+
}
|
|
60
|
+
this.slugToDriveId.delete(slug);
|
|
61
|
+
return this.deleteDrive(driveId);
|
|
24
62
|
}
|
|
25
63
|
}
|
|
26
64
|
export default InMemoryCache;
|
|
@@ -1,14 +1,24 @@
|
|
|
1
|
+
import { DocumentDriveDocument } from "#drive-document-model/gen/types";
|
|
1
2
|
import { type PHDocument } from "document-model";
|
|
2
3
|
import type { RedisClientType } from "redis";
|
|
3
4
|
import { type ICache } from "./types.js";
|
|
4
5
|
declare class RedisCache implements ICache {
|
|
6
|
+
private logger;
|
|
5
7
|
private redis;
|
|
6
8
|
private timeoutInSeconds;
|
|
7
9
|
constructor(redis: RedisClientType, timeoutInSeconds?: number | undefined);
|
|
8
|
-
private static
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
10
|
+
private static _getDocumentKey;
|
|
11
|
+
private static _getDriveKey;
|
|
12
|
+
private static _getDriveBySlugKey;
|
|
13
|
+
setDocument(documentId: string, document: PHDocument): Promise<void>;
|
|
14
|
+
getDocument<TDocument extends PHDocument>(documentId: string): Promise<TDocument | undefined>;
|
|
15
|
+
deleteDocument(documentId: string): Promise<boolean>;
|
|
16
|
+
setDrive(driveId: string, drive: DocumentDriveDocument): Promise<void>;
|
|
17
|
+
getDrive(driveId: string): Promise<DocumentDriveDocument | undefined>;
|
|
18
|
+
deleteDrive(driveId: string): Promise<boolean>;
|
|
19
|
+
setDriveBySlug(slug: string, drive: DocumentDriveDocument): Promise<void>;
|
|
20
|
+
getDriveBySlug(slug: string): Promise<DocumentDriveDocument | undefined>;
|
|
21
|
+
deleteDriveBySlug(slug: string): Promise<boolean>;
|
|
12
22
|
}
|
|
13
23
|
export default RedisCache;
|
|
14
24
|
//# sourceMappingURL=redis.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"redis.d.ts","sourceRoot":"","sources":["../../../src/cache/redis.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"redis.d.ts","sourceRoot":"","sources":["../../../src/cache/redis.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAC;AAExE,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,OAAO,CAAC;AAC7C,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,YAAY,CAAC;AAGzC,cAAM,UAAW,YAAW,MAAM;IAChC,OAAO,CAAC,MAAM,CAA+B;IAE7C,OAAO,CAAC,KAAK,CAAkB;IAC/B,OAAO,CAAC,gBAAgB,CAAS;gBAG/B,KAAK,EAAE,eAAe,EACtB,gBAAgB,GAAE,MAAM,GAAG,SAAkB;IAM/C,OAAO,CAAC,MAAM,CAAC,eAAe;IAI9B,OAAO,CAAC,MAAM,CAAC,YAAY;IAI3B,OAAO,CAAC,MAAM,CAAC,kBAAkB;IAQ3B,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU;IAcpD,WAAW,CAAC,SAAS,SAAS,UAAU,EAC5C,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC;IAO3B,cAAc,CAAC,UAAU,EAAE,MAAM;IAKjC,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,qBAAqB;IActD,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,qBAAqB,GAAG,SAAS,CAAC;IAMrE,WAAW,CAAC,OAAO,EAAE,MAAM;IAiB3B,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,qBAAqB;IAgBzD,cAAc,CAClB,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,qBAAqB,GAAG,SAAS,CAAC;IAMvC,iBAAiB,CAAC,IAAI,EAAE,MAAM;CAIrC;AAED,eAAe,UAAU,CAAC"}
|
package/dist/src/cache/redis.js
CHANGED
|
@@ -1,39 +1,91 @@
|
|
|
1
|
+
import { childLogger } from "#utils/logger";
|
|
2
|
+
import { trimResultingState } from "./util.js";
|
|
1
3
|
class RedisCache {
|
|
4
|
+
logger = childLogger(["RedisCache"]);
|
|
2
5
|
redis;
|
|
3
6
|
timeoutInSeconds;
|
|
4
7
|
constructor(redis, timeoutInSeconds = 5 * 60) {
|
|
5
8
|
this.redis = redis;
|
|
6
9
|
this.timeoutInSeconds = timeoutInSeconds;
|
|
7
10
|
}
|
|
8
|
-
static
|
|
9
|
-
return `cache:${
|
|
11
|
+
static _getDocumentKey(documentId) {
|
|
12
|
+
return `cache:document:${documentId}`;
|
|
10
13
|
}
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
14
|
+
static _getDriveKey(driveId) {
|
|
15
|
+
return `cache:drive:${driveId}`;
|
|
16
|
+
}
|
|
17
|
+
static _getDriveBySlugKey(slug) {
|
|
18
|
+
return `cache:drive:slug:${slug}`;
|
|
19
|
+
}
|
|
20
|
+
/////////////////////////////////////////////////////////////////////////////
|
|
21
|
+
// ICache
|
|
22
|
+
/////////////////////////////////////////////////////////////////////////////
|
|
23
|
+
async setDocument(documentId, document) {
|
|
24
|
+
const doc = trimResultingState(document);
|
|
25
|
+
const redisId = RedisCache._getDocumentKey(documentId);
|
|
26
|
+
const result = await this.redis.set(redisId, JSON.stringify(doc), {
|
|
27
|
+
EX: this.timeoutInSeconds ? this.timeoutInSeconds : undefined,
|
|
19
28
|
});
|
|
20
|
-
|
|
21
|
-
|
|
29
|
+
if (result !== "OK") {
|
|
30
|
+
throw new Error(`Failed to set document ${documentId} in redis. Got '${result}'`);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
async getDocument(documentId) {
|
|
34
|
+
const redisId = RedisCache._getDocumentKey(documentId);
|
|
35
|
+
const doc = await this.redis.get(redisId);
|
|
36
|
+
return doc ? JSON.parse(doc) : undefined;
|
|
37
|
+
}
|
|
38
|
+
async deleteDocument(documentId) {
|
|
39
|
+
const redisId = RedisCache._getDocumentKey(documentId);
|
|
40
|
+
return (await this.redis.del(redisId)) > 0;
|
|
41
|
+
}
|
|
42
|
+
async setDrive(driveId, drive) {
|
|
43
|
+
const doc = trimResultingState(drive);
|
|
44
|
+
const redisId = RedisCache._getDriveKey(driveId);
|
|
22
45
|
const result = await this.redis.set(redisId, JSON.stringify(doc), {
|
|
23
46
|
EX: this.timeoutInSeconds ? this.timeoutInSeconds : undefined,
|
|
24
47
|
});
|
|
25
|
-
if (result
|
|
26
|
-
|
|
48
|
+
if (result !== "OK") {
|
|
49
|
+
throw new Error(`Failed to set drive ${driveId} in redis. Got '${result}'`);
|
|
27
50
|
}
|
|
28
|
-
return false;
|
|
29
51
|
}
|
|
30
|
-
async
|
|
31
|
-
const redisId = RedisCache.
|
|
52
|
+
async getDrive(driveId) {
|
|
53
|
+
const redisId = RedisCache._getDriveKey(driveId);
|
|
32
54
|
const doc = await this.redis.get(redisId);
|
|
33
55
|
return doc ? JSON.parse(doc) : undefined;
|
|
34
56
|
}
|
|
35
|
-
async
|
|
36
|
-
const redisId = RedisCache.
|
|
57
|
+
async deleteDrive(driveId) {
|
|
58
|
+
const redisId = RedisCache._getDriveKey(driveId);
|
|
59
|
+
const drive = await this.getDrive(driveId);
|
|
60
|
+
if (!drive) {
|
|
61
|
+
return false;
|
|
62
|
+
}
|
|
63
|
+
const slug = drive.state.global.slug;
|
|
64
|
+
if (slug) {
|
|
65
|
+
const slugRedisId = RedisCache._getDriveBySlugKey(slug);
|
|
66
|
+
await this.redis.del(slugRedisId);
|
|
67
|
+
}
|
|
68
|
+
return (await this.redis.del(redisId)) > 0;
|
|
69
|
+
}
|
|
70
|
+
// We store two pices: slug -> driveId, and driveId -> drive
|
|
71
|
+
async setDriveBySlug(slug, drive) {
|
|
72
|
+
const driveId = drive.state.global.id;
|
|
73
|
+
const redisId = RedisCache._getDriveBySlugKey(slug);
|
|
74
|
+
const result = await this.redis.set(redisId, driveId, {
|
|
75
|
+
EX: this.timeoutInSeconds ? this.timeoutInSeconds : undefined,
|
|
76
|
+
});
|
|
77
|
+
if (result !== "OK") {
|
|
78
|
+
throw new Error(`Failed to set drive slug mapping for ${slug} -> ${driveId} in redis. Got '${result}'`);
|
|
79
|
+
}
|
|
80
|
+
await this.setDrive(driveId, drive);
|
|
81
|
+
}
|
|
82
|
+
async getDriveBySlug(slug) {
|
|
83
|
+
const redisId = RedisCache._getDriveBySlugKey(slug);
|
|
84
|
+
const driveId = await this.redis.get(redisId);
|
|
85
|
+
return driveId ? await this.getDrive(driveId) : undefined;
|
|
86
|
+
}
|
|
87
|
+
async deleteDriveBySlug(slug) {
|
|
88
|
+
const redisId = RedisCache._getDriveBySlugKey(slug);
|
|
37
89
|
return (await this.redis.del(redisId)) > 0;
|
|
38
90
|
}
|
|
39
91
|
}
|
|
@@ -1,7 +1,14 @@
|
|
|
1
|
+
import { DocumentDriveDocument } from "#drive-document-model/gen/types";
|
|
1
2
|
import { type PHDocument } from "document-model";
|
|
2
3
|
export interface ICache {
|
|
3
|
-
setDocument(
|
|
4
|
-
getDocument<TDocument extends PHDocument>(
|
|
5
|
-
deleteDocument(
|
|
4
|
+
setDocument(documentId: string, document: PHDocument): Promise<void>;
|
|
5
|
+
getDocument<TDocument extends PHDocument>(documentId: string): Promise<TDocument | undefined>;
|
|
6
|
+
deleteDocument(documentId: string): Promise<boolean>;
|
|
7
|
+
setDrive(driveId: string, drive: DocumentDriveDocument): Promise<void>;
|
|
8
|
+
setDriveBySlug(slug: string, drive: DocumentDriveDocument): Promise<void>;
|
|
9
|
+
getDrive(driveId: string): Promise<DocumentDriveDocument | undefined>;
|
|
10
|
+
getDriveBySlug(slug: string): Promise<DocumentDriveDocument | undefined>;
|
|
11
|
+
deleteDrive(driveId: string): Promise<boolean>;
|
|
12
|
+
deleteDriveBySlug(slug: string): Promise<boolean>;
|
|
6
13
|
}
|
|
7
14
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/cache/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAEjD,MAAM,WAAW,MAAM;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/cache/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAC;AACxE,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAEjD,MAAM,WAAW,MAAM;IAGrB,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAGrE,WAAW,CAAC,SAAS,SAAS,UAAU,EACtC,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC,CAAC;IAElC,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAIrD,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAIvE,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAG1E,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,qBAAqB,GAAG,SAAS,CAAC,CAAC;IAGtE,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,qBAAqB,GAAG,SAAS,CAAC,CAAC;IAEzE,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC/C,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CACnD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../../src/cache/util.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAI5C,eAAO,MAAM,kBAAkB,GAAI,SAAS,SAAS,UAAU,EAC7D,UAAU,SAAS,KAClB,SAYF,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
// Deletes the resulting state on all operations in a document.
|
|
2
|
+
// NOTE: THE RESULT IS THE CACHES MUTATE DOCUMENTS
|
|
3
|
+
export const trimResultingState = (document) => {
|
|
4
|
+
const global = document.operations.global.map((e) => {
|
|
5
|
+
delete e.resultingState;
|
|
6
|
+
return e;
|
|
7
|
+
});
|
|
8
|
+
const local = document.operations.local.map((e) => {
|
|
9
|
+
delete e.resultingState;
|
|
10
|
+
return e;
|
|
11
|
+
});
|
|
12
|
+
return { ...document, operations: { global, local } };
|
|
13
|
+
};
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { type ICache } from "#cache/types";
|
|
2
1
|
import { type IQueueManager } from "#queue/types";
|
|
3
2
|
import { type IDocumentStorage, type IDriveStorage } from "#storage/types";
|
|
4
3
|
import { type IDefaultDrivesManager } from "#utils/default-drives-manager";
|
|
5
4
|
import { type DocumentDriveAction, type DocumentDriveDocument } from "document-drive";
|
|
6
5
|
import { type Action, type DocumentModelModule, type Operation, type PHDocument } from "document-model";
|
|
7
6
|
import { type Unsubscribe } from "nanoevents";
|
|
7
|
+
import { type ICache } from "../cache/types.js";
|
|
8
8
|
import { OperationError, type SynchronizationUnitNotFoundError } from "./error.js";
|
|
9
9
|
import { type AddOperationOptions, type Constructor, type CreateDocumentInput, type DocumentDriveServerOptions, type DriveEvents, type DriveInput, type DriveOperationResult, type GetDocumentOptions, type GetStrandsOptions, type IBaseDocumentDriveServer, type IEventEmitter, type IListenerManager, type IOperationResult, type ISynchronizationManager, type Mixin, type OperationUpdate, type RemoteDriveAccessLevel, type RemoteDriveOptions, type SignalResult, type SyncStatus, type SyncUnitStatusObject, type SynchronizationUnit, type SynchronizationUnitQuery } from "./types.js";
|
|
10
10
|
export declare class BaseDocumentDriveServer implements IBaseDocumentDriveServer, IDefaultDrivesManager {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base-server.d.ts","sourceRoot":"","sources":["../../../src/server/base-server.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"base-server.d.ts","sourceRoot":"","sources":["../../../src/server/base-server.ts"],"names":[],"mappings":"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"}
|
|
@@ -81,18 +81,6 @@ export class BaseDocumentDriveServer {
|
|
|
81
81
|
};
|
|
82
82
|
// todo: move to external dependencies
|
|
83
83
|
this.defaultDrivesManager = new DefaultDrivesManager(this, this.defaultDrivesManagerDelegate, options);
|
|
84
|
-
this.storage.setStorageDelegate?.({
|
|
85
|
-
getCachedOperations: async (drive, id) => {
|
|
86
|
-
try {
|
|
87
|
-
const document = await this.cache.getDocument(drive, id);
|
|
88
|
-
return document?.operations;
|
|
89
|
-
}
|
|
90
|
-
catch (error) {
|
|
91
|
-
logger.error(error);
|
|
92
|
-
return undefined;
|
|
93
|
-
}
|
|
94
|
-
},
|
|
95
|
-
});
|
|
96
84
|
this.initializePromise = this._initialize();
|
|
97
85
|
}
|
|
98
86
|
// workaround for testing the ephemeral listeners -- we don't have DI in place yet
|
|
@@ -292,7 +280,7 @@ export class BaseDocumentDriveServer {
|
|
|
292
280
|
};
|
|
293
281
|
await this.storage.createDrive(id, document);
|
|
294
282
|
if (input.global.slug) {
|
|
295
|
-
await this.cache.
|
|
283
|
+
await this.cache.deleteDriveBySlug(input.global.slug);
|
|
296
284
|
}
|
|
297
285
|
await this._initializeDrive(id);
|
|
298
286
|
this.eventEmitter.emit("driveAdded", document);
|
|
@@ -324,7 +312,7 @@ export class BaseDocumentDriveServer {
|
|
|
324
312
|
const result = await Promise.allSettled([
|
|
325
313
|
this.stopSyncRemoteDrive(driveId),
|
|
326
314
|
this.listenerManager.removeDrive(driveId),
|
|
327
|
-
this.cache.
|
|
315
|
+
this.cache.deleteDrive(driveId),
|
|
328
316
|
this.storage.deleteDrive(driveId),
|
|
329
317
|
]);
|
|
330
318
|
result.forEach((r) => {
|
|
@@ -339,7 +327,7 @@ export class BaseDocumentDriveServer {
|
|
|
339
327
|
async getDrive(driveId, options) {
|
|
340
328
|
let document;
|
|
341
329
|
try {
|
|
342
|
-
const cachedDocument = await this.cache.
|
|
330
|
+
const cachedDocument = await this.cache.getDrive(driveId); // TODO support GetDocumentOptions
|
|
343
331
|
if (cachedDocument && isDocumentDrive(cachedDocument)) {
|
|
344
332
|
document = cachedDocument;
|
|
345
333
|
if (isAtRevision(document, options?.revisions)) {
|
|
@@ -357,16 +345,16 @@ export class BaseDocumentDriveServer {
|
|
|
357
345
|
}
|
|
358
346
|
else {
|
|
359
347
|
if (!options?.revisions) {
|
|
360
|
-
this.cache.
|
|
348
|
+
this.cache.setDrive(driveId, result).catch(logger.error);
|
|
361
349
|
}
|
|
362
350
|
return result;
|
|
363
351
|
}
|
|
364
352
|
}
|
|
365
353
|
async getDriveBySlug(slug, options) {
|
|
366
354
|
try {
|
|
367
|
-
const
|
|
368
|
-
if (
|
|
369
|
-
return
|
|
355
|
+
const drive = await this.cache.getDriveBySlug(slug);
|
|
356
|
+
if (drive) {
|
|
357
|
+
return drive;
|
|
370
358
|
}
|
|
371
359
|
}
|
|
372
360
|
catch (e) {
|
|
@@ -378,14 +366,14 @@ export class BaseDocumentDriveServer {
|
|
|
378
366
|
throw new Error(`Document with slug ${slug} is not a Document Drive`);
|
|
379
367
|
}
|
|
380
368
|
else {
|
|
381
|
-
this.cache.
|
|
369
|
+
this.cache.setDriveBySlug(slug, document).catch(logger.error);
|
|
382
370
|
return document;
|
|
383
371
|
}
|
|
384
372
|
}
|
|
385
373
|
async getDocument(driveId, documentId, options) {
|
|
386
374
|
let cachedDocument;
|
|
387
375
|
try {
|
|
388
|
-
cachedDocument = await this.cache.getDocument(
|
|
376
|
+
cachedDocument = await this.cache.getDocument(documentId); // TODO support GetDocumentOptions
|
|
389
377
|
if (cachedDocument && isAtRevision(cachedDocument, options?.revisions)) {
|
|
390
378
|
return cachedDocument;
|
|
391
379
|
}
|
|
@@ -397,7 +385,7 @@ export class BaseDocumentDriveServer {
|
|
|
397
385
|
(await this.storage.getDocument(driveId, documentId));
|
|
398
386
|
const document = this._buildDocument(documentStorage, options);
|
|
399
387
|
if (!options?.revisions) {
|
|
400
|
-
this.cache.setDocument(
|
|
388
|
+
this.cache.setDocument(documentId, document).catch(logger.error);
|
|
401
389
|
}
|
|
402
390
|
return document;
|
|
403
391
|
}
|
|
@@ -466,7 +454,7 @@ export class BaseDocumentDriveServer {
|
|
|
466
454
|
catch (error) {
|
|
467
455
|
logger.warn("Error deleting document", error);
|
|
468
456
|
}
|
|
469
|
-
await this.cache.deleteDocument(
|
|
457
|
+
await this.cache.deleteDocument(documentId);
|
|
470
458
|
return this.storage.deleteDocument(driveId, documentId);
|
|
471
459
|
}
|
|
472
460
|
async _processOperations(driveId, documentId, documentStorage, operations) {
|
|
@@ -802,9 +790,7 @@ export class BaseDocumentDriveServer {
|
|
|
802
790
|
};
|
|
803
791
|
});
|
|
804
792
|
if (document) {
|
|
805
|
-
this.cache
|
|
806
|
-
.setDocument(driveId, documentId, document)
|
|
807
|
-
.catch(logger.error);
|
|
793
|
+
this.cache.setDocument(documentId, document).catch(logger.error);
|
|
808
794
|
}
|
|
809
795
|
// gets all the different scopes and branches combinations from the operations
|
|
810
796
|
const { scopes, branches } = operationsApplied.reduce((acc, operation) => {
|
|
@@ -996,7 +982,7 @@ export class BaseDocumentDriveServer {
|
|
|
996
982
|
if (!document || !isDocumentDrive(document)) {
|
|
997
983
|
throw error ?? new Error("Invalid Document Drive document");
|
|
998
984
|
}
|
|
999
|
-
this.cache.
|
|
985
|
+
this.cache.setDrive(driveId, document).catch(logger.error);
|
|
1000
986
|
// update listener cache
|
|
1001
987
|
const lastOperation = operationsApplied
|
|
1002
988
|
.filter((op) => op.scope === "global")
|
|
@@ -1019,7 +1005,6 @@ export class BaseDocumentDriveServer {
|
|
|
1019
1005
|
.updateSynchronizationRevisions(driveId, [
|
|
1020
1006
|
{
|
|
1021
1007
|
syncId: "0",
|
|
1022
|
-
driveId: driveId,
|
|
1023
1008
|
documentId: "",
|
|
1024
1009
|
scope: "global",
|
|
1025
1010
|
branch: "main",
|
|
@@ -154,7 +154,7 @@ export class ListenerManager {
|
|
|
154
154
|
return;
|
|
155
155
|
}
|
|
156
156
|
else {
|
|
157
|
-
this.logger.verbose(`Listener out-of-date for sync unit (${syncUnit.
|
|
157
|
+
this.logger.verbose(`Listener out-of-date for sync unit (${syncUnit.scope}, ${syncUnit.documentId}): ${unitState?.listenerRev} < ${syncUnit.revision}`);
|
|
158
158
|
}
|
|
159
159
|
const opData = [];
|
|
160
160
|
try {
|
|
@@ -342,7 +342,7 @@ export class ListenerManager {
|
|
|
342
342
|
if (entry && entry.listenerRev >= syncUnit.revision) {
|
|
343
343
|
return;
|
|
344
344
|
}
|
|
345
|
-
const { documentId,
|
|
345
|
+
const { documentId, scope, branch } = syncUnit;
|
|
346
346
|
try {
|
|
347
347
|
const operations = await this.syncManager.getOperationData(
|
|
348
348
|
// DEAL WITH INVALID SYNC ID ERROR
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { type GetStrandsOptions, type IListenerManager, type IOperationResult, type Listener, type ListenerRevision, type ListenerRevisionWithError, type OperationUpdate, type RemoteDriveOptions, type StrandUpdate } from "#server/types";
|
|
2
|
-
import { type ITransmitter, type PullResponderTrigger, type StrandUpdateSource } from "./types.js";
|
|
3
2
|
import { type ListenerFilter, type Trigger } from "#drive-document-model/gen/types";
|
|
3
|
+
import { type ITransmitter, type PullResponderTrigger, type StrandUpdateSource } from "./types.js";
|
|
4
4
|
export type OperationUpdateGraphQL = Omit<OperationUpdate, "input"> & {
|
|
5
5
|
input: string;
|
|
6
6
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pull-responder.d.ts","sourceRoot":"","sources":["../../../../../src/server/listener/transmitter/pull-responder.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EACrB,KAAK,QAAQ,EACb,KAAK,gBAAgB,EACrB,KAAK,yBAAyB,EAC9B,KAAK,eAAe,EACpB,KAAK,kBAAkB,EACvB,KAAK,YAAY,EAClB,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"pull-responder.d.ts","sourceRoot":"","sources":["../../../../../src/server/listener/transmitter/pull-responder.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { childLogger } from "#utils/logger";
|
|
2
|
-
import { generateUUID } from "#utils/misc";
|
|
3
1
|
import { PULL_DRIVE_INTERVAL } from "#server/constants";
|
|
4
2
|
import { OperationError } from "#server/error";
|
|
5
3
|
import { requestGraphql } from "#utils/graphql";
|
|
4
|
+
import { childLogger } from "#utils/logger";
|
|
5
|
+
import { generateUUID } from "#utils/misc";
|
|
6
6
|
import { gql } from "graphql-request";
|
|
7
7
|
const MAX_REVISIONS_PER_ACK = 100;
|
|
8
8
|
export class PullResponderTransmitter {
|
|
@@ -36,7 +36,6 @@ export class PullResponderTransmitter {
|
|
|
36
36
|
for (const revision of revisions) {
|
|
37
37
|
const syncUnit = syncUnits.find((s) => s.scope === revision.scope &&
|
|
38
38
|
s.branch === revision.branch &&
|
|
39
|
-
s.driveId === revision.driveId &&
|
|
40
39
|
s.documentId == revision.documentId);
|
|
41
40
|
if (!syncUnit) {
|
|
42
41
|
this.logger.warn("Unknown sync unit was acknowledged", revision);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync-manager.d.ts","sourceRoot":"","sources":["../../../src/server/sync-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EACL,KAAK,qBAAqB,EAE3B,MAAM,iCAAiC,CAAC;AAEzC,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAGpD,OAAO,EACL,KAAK,mBAAmB,EAKzB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,gCAAgC,EAAE,MAAM,YAAY,CAAC;AAC9D,OAAO,EACL,KAAK,iBAAiB,EACtB,KAAK,aAAa,EAClB,KAAK,uBAAuB,EAC5B,KAAK,eAAe,EACpB,KAAK,UAAU,EACf,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,EACxB,KAAK,wBAAwB,EAC9B,MAAM,YAAY,CAAC;AAEpB,MAAM,CAAC,OAAO,OAAO,sBAAuB,YAAW,uBAAuB;IAM1E,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,oBAAoB;IAC5B,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC;IARhC,OAAO,CAAC,UAAU,CAA2C;IAE7D,OAAO,CAAC,MAAM,CAA2C;gBAGtC,OAAO,EAAE,aAAa,EACtB,KAAK,EAAE,MAAM,EACtB,oBAAoB,EAAE,mBAAmB,EAAE,EAClC,YAAY,CAAC,EAAE,aAAa,YAAA;IAGzC,uBAAuB,CAC3B,OAAO,EAAE,MAAM,EACf,UAAU,CAAC,EAAE,MAAM,EAAE,EACrB,KAAK,CAAC,EAAE,MAAM,EAAE,EAChB,MAAM,CAAC,EAAE,MAAM,EAAE,EACjB,YAAY,CAAC,EAAE,MAAM,EAAE,GACtB,OAAO,CAAC,mBAAmB,EAAE,CAAC;IAe3B,+BAA+B,CACnC,OAAO,EAAE,MAAM,EACf,cAAc,EAAE,wBAAwB,EAAE,GACzC,OAAO,CAAC,mBAAmB,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"sync-manager.d.ts","sourceRoot":"","sources":["../../../src/server/sync-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EACL,KAAK,qBAAqB,EAE3B,MAAM,iCAAiC,CAAC;AAEzC,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAGpD,OAAO,EACL,KAAK,mBAAmB,EAKzB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,gCAAgC,EAAE,MAAM,YAAY,CAAC;AAC9D,OAAO,EACL,KAAK,iBAAiB,EACtB,KAAK,aAAa,EAClB,KAAK,uBAAuB,EAC5B,KAAK,eAAe,EACpB,KAAK,UAAU,EACf,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,EACxB,KAAK,wBAAwB,EAC9B,MAAM,YAAY,CAAC;AAEpB,MAAM,CAAC,OAAO,OAAO,sBAAuB,YAAW,uBAAuB;IAM1E,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,oBAAoB;IAC5B,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC;IARhC,OAAO,CAAC,UAAU,CAA2C;IAE7D,OAAO,CAAC,MAAM,CAA2C;gBAGtC,OAAO,EAAE,aAAa,EACtB,KAAK,EAAE,MAAM,EACtB,oBAAoB,EAAE,mBAAmB,EAAE,EAClC,YAAY,CAAC,EAAE,aAAa,YAAA;IAGzC,uBAAuB,CAC3B,OAAO,EAAE,MAAM,EACf,UAAU,CAAC,EAAE,MAAM,EAAE,EACrB,KAAK,CAAC,EAAE,MAAM,EAAE,EAChB,MAAM,CAAC,EAAE,MAAM,EAAE,EACjB,YAAY,CAAC,EAAE,MAAM,EAAE,GACtB,OAAO,CAAC,mBAAmB,EAAE,CAAC;IAe3B,+BAA+B,CACnC,OAAO,EAAE,MAAM,EACf,cAAc,EAAE,wBAAwB,EAAE,GACzC,OAAO,CAAC,mBAAmB,EAAE,CAAC;IAmB3B,0BAA0B,CAC9B,OAAO,EAAE,MAAM,EACf,UAAU,CAAC,EAAE,MAAM,EAAE,EACrB,KAAK,CAAC,EAAE,MAAM,EAAE,EAChB,MAAM,CAAC,EAAE,MAAM,EAAE,EACjB,YAAY,CAAC,EAAE,MAAM,EAAE,GACtB,OAAO,CAAC,wBAAwB,EAAE,CAAC;IAmEhC,4BAA4B,CAChC,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,wBAAwB,GAAG,SAAS,CAAC;IA4B1C,sBAAsB,CAC1B,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,mBAAmB,GAAG,SAAS,CAAC;IAyBrC,gBAAgB,CACpB,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,iBAAiB,GACxB,OAAO,CAAC,eAAe,EAAE,CAAC;YA2Cf,QAAQ;YAiBR,WAAW;IAgBzB,OAAO,CAAC,cAAc;IAuBtB,uBAAuB,CAAC,OAAO,EAAE,mBAAmB,EAAE;IAItD,OAAO,CAAC,sBAAsB;IAU9B,yBAAyB,CAAC,cAAc,EAAE,oBAAoB,GAAG,UAAU;IAoB3E,aAAa,CACX,UAAU,EAAE,MAAM,GACjB,UAAU,GAAG,gCAAgC;IAWhD,gBAAgB,CACd,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,OAAO,CAAC,oBAAoB,CAAC,GAAG,IAAI,EAC5C,KAAK,CAAC,EAAE,KAAK,GACZ,IAAI;IAiDP,OAAO,CAAC,cAAc;IAyBhB,yBAAyB,CAC7B,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,qBAAqB,GAC3B,OAAO,CAAC,IAAI,CAAC;CAejB"}
|