@verdant-web/server 1.8.13 → 1.8.14-next.1

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 (150) hide show
  1. package/dist/cjs/Baselines.d.ts +15 -15
  2. package/dist/cjs/Baselines.js +83 -83
  3. package/dist/cjs/ClientConnection.d.ts +18 -18
  4. package/dist/cjs/ClientConnection.js +105 -105
  5. package/dist/cjs/MessageSender.d.ts +5 -5
  6. package/dist/cjs/MessageSender.js +2 -2
  7. package/dist/cjs/OperationHistory.d.ts +36 -36
  8. package/dist/cjs/OperationHistory.js +120 -120
  9. package/dist/cjs/Presence.d.ts +15 -15
  10. package/dist/cjs/Presence.js +59 -59
  11. package/dist/cjs/Profiles.d.ts +10 -10
  12. package/dist/cjs/Profiles.js +19 -19
  13. package/dist/cjs/ReplicaKeepaliveTimers.d.ts +17 -17
  14. package/dist/cjs/ReplicaKeepaliveTimers.js +30 -30
  15. package/dist/cjs/Replicas.d.ts +24 -24
  16. package/dist/cjs/Replicas.js +137 -137
  17. package/dist/cjs/Server.d.ts +143 -143
  18. package/dist/cjs/Server.js +396 -396
  19. package/dist/cjs/ServerLibrary.d.ts +77 -77
  20. package/dist/cjs/ServerLibrary.js +487 -487
  21. package/dist/cjs/ServerStorage.d.ts +35 -0
  22. package/dist/cjs/ServerStorage.js +60 -0
  23. package/dist/cjs/ServerStorage.js.map +1 -0
  24. package/dist/cjs/TokenProvider.d.ts +16 -16
  25. package/dist/cjs/TokenProvider.js +26 -26
  26. package/dist/cjs/TokenVerifier.d.ts +16 -16
  27. package/dist/cjs/TokenVerifier.js +28 -28
  28. package/dist/cjs/files/FileMetadata.d.ts +28 -28
  29. package/dist/cjs/files/FileMetadata.js +46 -46
  30. package/dist/cjs/files/FileStorage.d.ts +35 -35
  31. package/dist/cjs/files/FileStorage.js +71 -71
  32. package/dist/cjs/index.d.ts +9 -9
  33. package/dist/cjs/index.js +11 -11
  34. package/dist/cjs/migrations/v0.d.ts +1 -0
  35. package/dist/cjs/migrations/v0.js +30 -0
  36. package/dist/cjs/migrations/v0.js.map +1 -0
  37. package/dist/cjs/migrations/v0.sql.d.ts +2 -2
  38. package/dist/cjs/migrations/v0.sql.js +3 -3
  39. package/dist/cjs/migrations/v1.d.ts +1 -0
  40. package/dist/cjs/migrations/v1.js +32 -0
  41. package/dist/cjs/migrations/v1.js.map +1 -0
  42. package/dist/cjs/migrations/v1.sql.d.ts +2 -2
  43. package/dist/cjs/migrations/v1.sql.js +3 -3
  44. package/dist/cjs/migrations/v2.d.ts +1 -0
  45. package/dist/cjs/migrations/v2.js +29 -0
  46. package/dist/cjs/migrations/v2.js.map +1 -0
  47. package/dist/cjs/migrations/v2.sql.d.ts +2 -2
  48. package/dist/cjs/migrations/v2.sql.js +4 -4
  49. package/dist/cjs/migrations/v3.d.ts +1 -0
  50. package/dist/cjs/migrations/v3.js +15 -0
  51. package/dist/cjs/migrations/v3.js.map +1 -0
  52. package/dist/cjs/migrations/v3.sql.d.ts +2 -2
  53. package/dist/cjs/migrations/v3.sql.js +4 -4
  54. package/dist/cjs/migrations/v4.d.ts +1 -0
  55. package/dist/cjs/migrations/v4.js +9 -0
  56. package/dist/cjs/migrations/v4.js.map +1 -0
  57. package/dist/cjs/migrations/v4.sql.d.ts +2 -2
  58. package/dist/cjs/migrations/v4.sql.js +4 -4
  59. package/dist/cjs/migrations/v5.d.ts +2 -0
  60. package/dist/cjs/migrations/v5.js +37 -0
  61. package/dist/cjs/migrations/v5.js.map +1 -0
  62. package/dist/cjs/migrations.d.ts +6 -2
  63. package/dist/cjs/migrations.js +62 -32
  64. package/dist/cjs/migrations.js.map +1 -1
  65. package/dist/cjs/migrations.test.d.ts +1 -0
  66. package/dist/cjs/migrations.test.js +121 -0
  67. package/dist/cjs/migrations.test.js.map +1 -0
  68. package/dist/cjs/types.d.ts +22 -22
  69. package/dist/cjs/types.js +2 -2
  70. package/dist/esm/Baselines.d.ts +15 -15
  71. package/dist/esm/Baselines.js +79 -79
  72. package/dist/esm/ClientConnection.d.ts +18 -18
  73. package/dist/esm/ClientConnection.js +101 -101
  74. package/dist/esm/MessageSender.d.ts +5 -5
  75. package/dist/esm/MessageSender.js +1 -1
  76. package/dist/esm/OperationHistory.d.ts +36 -36
  77. package/dist/esm/OperationHistory.js +116 -116
  78. package/dist/esm/Presence.d.ts +15 -15
  79. package/dist/esm/Presence.js +52 -52
  80. package/dist/esm/Profiles.d.ts +10 -10
  81. package/dist/esm/Profiles.js +15 -15
  82. package/dist/esm/ReplicaKeepaliveTimers.d.ts +17 -17
  83. package/dist/esm/ReplicaKeepaliveTimers.js +26 -26
  84. package/dist/esm/Replicas.d.ts +24 -24
  85. package/dist/esm/Replicas.js +133 -133
  86. package/dist/esm/Server.d.ts +143 -143
  87. package/dist/esm/Server.js +389 -389
  88. package/dist/esm/ServerLibrary.d.ts +77 -77
  89. package/dist/esm/ServerLibrary.js +483 -483
  90. package/dist/esm/ServerStorage.d.ts +44 -0
  91. package/dist/esm/ServerStorage.js +58 -0
  92. package/dist/esm/ServerStorage.js.map +1 -0
  93. package/dist/esm/TokenProvider.d.ts +16 -16
  94. package/dist/esm/TokenProvider.js +19 -19
  95. package/dist/esm/TokenVerifier.d.ts +16 -16
  96. package/dist/esm/TokenVerifier.js +21 -21
  97. package/dist/esm/files/FileMetadata.d.ts +28 -28
  98. package/dist/esm/files/FileMetadata.js +42 -42
  99. package/dist/esm/files/FileStorage.d.ts +35 -35
  100. package/dist/esm/files/FileStorage.js +44 -44
  101. package/dist/esm/index.d.ts +9 -9
  102. package/dist/esm/index.js +4 -4
  103. package/dist/esm/migrations/v0.d.ts +1 -0
  104. package/dist/esm/migrations/v0.js +27 -0
  105. package/dist/esm/migrations/v0.js.map +1 -0
  106. package/dist/esm/migrations/v0.sql.d.ts +2 -2
  107. package/dist/esm/migrations/v0.sql.js +1 -1
  108. package/dist/esm/migrations/v1.d.ts +1 -0
  109. package/dist/esm/migrations/v1.js +29 -0
  110. package/dist/esm/migrations/v1.js.map +1 -0
  111. package/dist/esm/migrations/v1.sql.d.ts +2 -2
  112. package/dist/esm/migrations/v1.sql.js +1 -1
  113. package/dist/esm/migrations/v2.d.ts +1 -0
  114. package/dist/esm/migrations/v2.js +26 -0
  115. package/dist/esm/migrations/v2.js.map +1 -0
  116. package/dist/esm/migrations/v2.sql.d.ts +2 -2
  117. package/dist/esm/migrations/v2.sql.js +2 -2
  118. package/dist/esm/migrations/v3.d.ts +1 -0
  119. package/dist/esm/migrations/v3.js +12 -0
  120. package/dist/esm/migrations/v3.js.map +1 -0
  121. package/dist/esm/migrations/v3.sql.d.ts +2 -2
  122. package/dist/esm/migrations/v3.sql.js +2 -2
  123. package/dist/esm/migrations/v4.d.ts +1 -0
  124. package/dist/esm/migrations/v4.js +6 -0
  125. package/dist/esm/migrations/v4.js.map +1 -0
  126. package/dist/esm/migrations/v4.sql.d.ts +2 -2
  127. package/dist/esm/migrations/v4.sql.js +2 -2
  128. package/dist/esm/migrations/v5.d.ts +2 -0
  129. package/dist/esm/migrations/v5.js +33 -0
  130. package/dist/esm/migrations/v5.js.map +1 -0
  131. package/dist/esm/migrations.d.ts +6 -2
  132. package/dist/esm/migrations.js +35 -25
  133. package/dist/esm/migrations.js.map +1 -1
  134. package/dist/esm/migrations.test.d.ts +1 -0
  135. package/dist/esm/migrations.test.js +116 -0
  136. package/dist/esm/migrations.test.js.map +1 -0
  137. package/dist/esm/types.d.ts +22 -22
  138. package/dist/esm/types.js +1 -1
  139. package/dist/tsconfig-cjs.tsbuildinfo +1 -1
  140. package/dist/tsconfig.tsbuildinfo +1 -1
  141. package/package.json +6 -4
  142. package/src/__snapshots__/migrations.test.ts.snap +55 -0
  143. package/src/migrations/{v0.sql.ts → v0.ts} +1 -1
  144. package/src/migrations/{v1.sql.ts → v1.ts} +1 -1
  145. package/src/migrations/{v2.sql.ts → v2.ts} +1 -1
  146. package/src/migrations/{v3.sql.ts → v3.ts} +1 -1
  147. package/src/migrations/{v4.sql.ts → v4.ts} +1 -1
  148. package/src/migrations/v5.ts +49 -0
  149. package/src/migrations.test.ts +133 -0
  150. package/src/migrations.ts +28 -19
@@ -0,0 +1,35 @@
1
+ import { Database } from 'better-sqlite3';
2
+ import { ClientMessage } from '@lo-fi/common';
3
+ import { MessageSender } from './MessageSender.js';
4
+ import { UserProfiles } from './Profiles.js';
5
+ import { TokenInfo } from './TokenVerifier.js';
6
+ interface ServerStorageOptions {
7
+ db: Database;
8
+ sender: MessageSender;
9
+ profiles: UserProfiles<any>;
10
+ replicaTruancyMinutes: number;
11
+ log?: (...args: any[]) => void;
12
+ disableRebasing?: boolean;
13
+ }
14
+ export declare class ServerStorage {
15
+ private profileLoader;
16
+ private libraries;
17
+ private db;
18
+ private sender;
19
+ constructor({ db, sender, profiles, replicaTruancyMinutes, disableRebasing, log, }: ServerStorageOptions);
20
+ /**
21
+ * Call with any message from any replica
22
+ */
23
+ receive: (libraryId: string, clientKey: string, message: ClientMessage, info: TokenInfo) => Promise<void>;
24
+ /**
25
+ * Call when a replica disconnects from the server
26
+ */
27
+ remove: (libraryId: string, replicaId: string) => void;
28
+ evictLibrary: (libraryId: string) => void;
29
+ evictUser: (libraryId: string, userId: string) => void;
30
+ private createSchema;
31
+ close: () => Promise<void>;
32
+ getLibraryPresence: (libraryId: string) => Record<string, import("@lo-fi/common").UserInfo<any, any>>;
33
+ getDocumentSnapshot: (libraryId: string, documentId: string) => any;
34
+ }
35
+ export {};
@@ -0,0 +1,60 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ServerStorage = void 0;
4
+ const ServerLibrary_js_1 = require("./ServerLibrary.js");
5
+ const Profiles_js_1 = require("./Profiles.js");
6
+ const migrations_js_1 = require("./migrations.js");
7
+ class ServerStorage {
8
+ constructor({ db, sender, profiles, replicaTruancyMinutes, disableRebasing = false, log = () => { }, }) {
9
+ /**
10
+ * Call with any message from any replica
11
+ */
12
+ this.receive = (libraryId, clientKey, message, info) => {
13
+ const library = this.libraries.open(libraryId);
14
+ return library.receive(message, clientKey, info);
15
+ };
16
+ /**
17
+ * Call when a replica disconnects from the server
18
+ */
19
+ this.remove = (libraryId, replicaId) => {
20
+ const library = this.libraries.open(libraryId);
21
+ library.remove(replicaId);
22
+ };
23
+ this.evictLibrary = (libraryId) => {
24
+ const library = this.libraries.open(libraryId);
25
+ library.destroy();
26
+ };
27
+ this.evictUser = (libraryId, userId) => {
28
+ const library = this.libraries.open(libraryId);
29
+ library.evictUser(userId);
30
+ };
31
+ this.createSchema = () => {
32
+ (0, migrations_js_1.migrations)(this.db);
33
+ };
34
+ this.close = async () => {
35
+ this.db.close();
36
+ };
37
+ this.getLibraryPresence = (libraryId) => {
38
+ const library = this.libraries.open(libraryId);
39
+ return library.getPresence();
40
+ };
41
+ this.getDocumentSnapshot = (libraryId, documentId) => {
42
+ const library = this.libraries.open(libraryId);
43
+ return library.getDocumentSnapshot(documentId);
44
+ };
45
+ this.db = db;
46
+ this.sender = sender;
47
+ this.createSchema();
48
+ this.profileLoader = new Profiles_js_1.UserProfileLoader(profiles);
49
+ this.libraries = new ServerLibrary_js_1.ServerLibraryManager({
50
+ db: this.db,
51
+ sender: this.sender,
52
+ profileLoader: this.profileLoader,
53
+ replicaTruancyMinutes,
54
+ log,
55
+ disableRebasing,
56
+ });
57
+ }
58
+ }
59
+ exports.ServerStorage = ServerStorage;
60
+ //# sourceMappingURL=ServerStorage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ServerStorage.js","sourceRoot":"","sources":["../../src/ServerStorage.ts"],"names":[],"mappings":";;;AAEA,yDAA0D;AAE1D,+CAAgE;AAEhE,mDAA6C;AAW7C,MAAa,aAAa;IAMzB,YAAY,EACX,EAAE,EACF,MAAM,EACN,QAAQ,EACR,qBAAqB,EACrB,eAAe,GAAG,KAAK,EACvB,GAAG,GAAG,GAAG,EAAE,GAAE,CAAC,GACQ;QAevB;;WAEG;QACH,YAAO,GAAG,CACT,SAAiB,EACjB,SAAiB,EACjB,OAAsB,EACtB,IAAe,EACd,EAAE;YACH,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC/C,OAAO,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;QAClD,CAAC,CAAC;QAEF;;WAEG;QACH,WAAM,GAAG,CAAC,SAAiB,EAAE,SAAiB,EAAE,EAAE;YACjD,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC/C,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAC3B,CAAC,CAAC;QAEF,iBAAY,GAAG,CAAC,SAAiB,EAAE,EAAE;YACpC,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC/C,OAAO,CAAC,OAAO,EAAE,CAAC;QACnB,CAAC,CAAC;QAEF,cAAS,GAAG,CAAC,SAAiB,EAAE,MAAc,EAAE,EAAE;YACjD,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC/C,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QAC3B,CAAC,CAAC;QAEM,iBAAY,GAAG,GAAG,EAAE;YAC3B,IAAA,0BAAU,EAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACrB,CAAC,CAAC;QAEF,UAAK,GAAG,KAAK,IAAI,EAAE;YAClB,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;QACjB,CAAC,CAAC;QAEF,uBAAkB,GAAG,CAAC,SAAiB,EAAE,EAAE;YAC1C,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC/C,OAAO,OAAO,CAAC,WAAW,EAAE,CAAC;QAC9B,CAAC,CAAC;QAEF,wBAAmB,GAAG,CAAC,SAAiB,EAAE,UAAkB,EAAE,EAAE;YAC/D,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC/C,OAAO,OAAO,CAAC,mBAAmB,CAAC,UAAU,CAAC,CAAC;QAChD,CAAC,CAAC;QA7DD,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,YAAY,EAAE,CAAC;QACpB,IAAI,CAAC,aAAa,GAAG,IAAI,+BAAiB,CAAC,QAAQ,CAAC,CAAC;QACrD,IAAI,CAAC,SAAS,GAAG,IAAI,uCAAoB,CAAC;YACzC,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,aAAa,EAAE,IAAI,CAAC,aAAa;YACjC,qBAAqB;YACrB,GAAG;YACH,eAAe;SACf,CAAC,CAAC;IACJ,CAAC;CAkDD;AA5ED,sCA4EC"}
@@ -1,16 +1,16 @@
1
- import { ReplicaType } from '@verdant-web/common';
2
- export declare class TokenProvider {
3
- private config;
4
- constructor(config: {
5
- secret: string;
6
- });
7
- getToken: ({ userId, libraryId, syncEndpoint, role, type, expiresIn, fileEndpoint, }: {
8
- userId: string;
9
- libraryId: string;
10
- syncEndpoint: string;
11
- fileEndpoint?: string | undefined;
12
- role?: string | undefined;
13
- type?: ReplicaType | undefined;
14
- expiresIn?: string | number | undefined;
15
- }) => string;
16
- }
1
+ import { ReplicaType } from '@verdant-web/common';
2
+ export declare class TokenProvider {
3
+ private config;
4
+ constructor(config: {
5
+ secret: string;
6
+ });
7
+ getToken: ({ userId, libraryId, syncEndpoint, role, type, expiresIn, fileEndpoint, }: {
8
+ userId: string;
9
+ libraryId: string;
10
+ syncEndpoint: string;
11
+ fileEndpoint?: string | undefined;
12
+ role?: string | undefined;
13
+ type?: ReplicaType | undefined;
14
+ expiresIn?: string | number | undefined;
15
+ }) => string;
16
+ }
@@ -1,27 +1,27 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.TokenProvider = void 0;
7
- const common_1 = require("@verdant-web/common");
8
- const jsonwebtoken_1 = __importDefault(require("jsonwebtoken"));
9
- class TokenProvider {
10
- constructor(config) {
11
- this.config = config;
12
- this.getToken = ({ userId, libraryId, syncEndpoint, role, type = common_1.ReplicaType.Realtime, expiresIn = '1d', fileEndpoint, }) => {
13
- return jsonwebtoken_1.default.sign({
14
- sub: userId,
15
- lib: libraryId,
16
- url: syncEndpoint,
17
- file: fileEndpoint,
18
- role,
19
- type,
20
- }, this.config.secret, {
21
- expiresIn,
22
- });
23
- };
24
- }
25
- }
26
- exports.TokenProvider = TokenProvider;
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.TokenProvider = void 0;
7
+ const common_1 = require("@verdant-web/common");
8
+ const jsonwebtoken_1 = __importDefault(require("jsonwebtoken"));
9
+ class TokenProvider {
10
+ constructor(config) {
11
+ this.config = config;
12
+ this.getToken = ({ userId, libraryId, syncEndpoint, role, type = common_1.ReplicaType.Realtime, expiresIn = '1d', fileEndpoint, }) => {
13
+ return jsonwebtoken_1.default.sign({
14
+ sub: userId,
15
+ lib: libraryId,
16
+ url: syncEndpoint,
17
+ file: fileEndpoint,
18
+ role,
19
+ type,
20
+ }, this.config.secret, {
21
+ expiresIn,
22
+ });
23
+ };
24
+ }
25
+ }
26
+ exports.TokenProvider = TokenProvider;
27
27
  //# sourceMappingURL=TokenProvider.js.map
@@ -1,16 +1,16 @@
1
- import { ReplicaType } from '@verdant-web/common';
2
- export declare class TokenVerifier {
3
- private config;
4
- constructor(config: {
5
- secret: string;
6
- });
7
- verifyToken: (token: string) => TokenInfo;
8
- }
9
- export interface TokenInfo {
10
- userId: string;
11
- libraryId: string;
12
- syncEndpoint: string;
13
- role?: string;
14
- type: ReplicaType;
15
- token: string;
16
- }
1
+ import { ReplicaType } from '@verdant-web/common';
2
+ export declare class TokenVerifier {
3
+ private config;
4
+ constructor(config: {
5
+ secret: string;
6
+ });
7
+ verifyToken: (token: string) => TokenInfo;
8
+ }
9
+ export interface TokenInfo {
10
+ userId: string;
11
+ libraryId: string;
12
+ syncEndpoint: string;
13
+ role?: string;
14
+ type: ReplicaType;
15
+ token: string;
16
+ }
@@ -1,29 +1,29 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.TokenVerifier = void 0;
7
- const common_1 = require("@verdant-web/common");
8
- const jsonwebtoken_1 = __importDefault(require("jsonwebtoken"));
9
- class TokenVerifier {
10
- constructor(config) {
11
- this.config = config;
12
- this.verifyToken = (token) => {
13
- const decoded = jsonwebtoken_1.default.verify(token, this.config.secret, {
14
- complete: false,
15
- });
16
- (0, common_1.assert)(decoded.sub);
17
- return {
18
- userId: decoded.sub,
19
- libraryId: decoded.lib,
20
- syncEndpoint: decoded.url,
21
- role: decoded.role,
22
- type: decoded.type,
23
- token,
24
- };
25
- };
26
- }
27
- }
28
- exports.TokenVerifier = TokenVerifier;
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.TokenVerifier = void 0;
7
+ const common_1 = require("@verdant-web/common");
8
+ const jsonwebtoken_1 = __importDefault(require("jsonwebtoken"));
9
+ class TokenVerifier {
10
+ constructor(config) {
11
+ this.config = config;
12
+ this.verifyToken = (token) => {
13
+ const decoded = jsonwebtoken_1.default.verify(token, this.config.secret, {
14
+ complete: false,
15
+ });
16
+ (0, common_1.assert)(decoded.sub);
17
+ return {
18
+ userId: decoded.sub,
19
+ libraryId: decoded.lib,
20
+ syncEndpoint: decoded.url,
21
+ role: decoded.role,
22
+ type: decoded.type,
23
+ token,
24
+ };
25
+ };
26
+ }
27
+ }
28
+ exports.TokenVerifier = TokenVerifier;
29
29
  //# sourceMappingURL=TokenVerifier.js.map
@@ -1,28 +1,28 @@
1
- import { Database } from 'better-sqlite3';
2
- import { FileInfo } from './FileStorage.js';
3
- export interface FileMetadataConfig {
4
- deleteExpirationDays?: number;
5
- }
6
- export declare class FileMetadata {
7
- private db;
8
- private deleteExpirationDays;
9
- constructor(db: Database, { deleteExpirationDays }?: FileMetadataConfig);
10
- get: (libraryId: string, fileId: string) => {
11
- libraryId: string;
12
- fileId: string;
13
- name: string;
14
- type: string;
15
- };
16
- getAll: (libraryId: string) => any[];
17
- deleteAll: (libraryId: string) => import("better-sqlite3").RunResult;
18
- put: (libraryId: string, fileInfo: FileInfo) => import("better-sqlite3").RunResult;
19
- markPendingDelete: (libraryId: string, fileId: string) => import("better-sqlite3").RunResult;
20
- delete: (libraryId: string, fileId: string) => import("better-sqlite3").RunResult;
21
- getPendingDeletes: (libraryId: string) => {
22
- libraryId: string;
23
- fileId: string;
24
- name: string;
25
- type: string;
26
- pendingDeleteAt: number;
27
- }[];
28
- }
1
+ import { Database } from 'better-sqlite3';
2
+ import { FileInfo } from './FileStorage.js';
3
+ export interface FileMetadataConfig {
4
+ deleteExpirationDays?: number;
5
+ }
6
+ export declare class FileMetadata {
7
+ private db;
8
+ private deleteExpirationDays;
9
+ constructor(db: Database, { deleteExpirationDays }?: FileMetadataConfig);
10
+ get: (libraryId: string, fileId: string) => {
11
+ libraryId: string;
12
+ fileId: string;
13
+ name: string;
14
+ type: string;
15
+ };
16
+ getAll: (libraryId: string) => any[];
17
+ deleteAll: (libraryId: string) => import("better-sqlite3").RunResult;
18
+ put: (libraryId: string, fileInfo: FileInfo) => import("better-sqlite3").RunResult;
19
+ markPendingDelete: (libraryId: string, fileId: string) => import("better-sqlite3").RunResult;
20
+ delete: (libraryId: string, fileId: string) => import("better-sqlite3").RunResult;
21
+ getPendingDeletes: (libraryId: string) => {
22
+ libraryId: string;
23
+ fileId: string;
24
+ name: string;
25
+ type: string;
26
+ pendingDeleteAt: number;
27
+ }[];
28
+ }
@@ -1,69 +1,69 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.FileMetadata = void 0;
4
- class FileMetadata {
5
- constructor(db, { deleteExpirationDays = 1 } = {}) {
6
- this.db = db;
7
- this.deleteExpirationDays = 1;
8
- this.get = (libraryId, fileId) => {
9
- return this.db
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FileMetadata = void 0;
4
+ class FileMetadata {
5
+ constructor(db, { deleteExpirationDays = 1 } = {}) {
6
+ this.db = db;
7
+ this.deleteExpirationDays = 1;
8
+ this.get = (libraryId, fileId) => {
9
+ return this.db
10
10
  .prepare(`
11
11
  SELECT * FROM FileMetadata
12
12
  WHERE libraryId = ? AND fileId = ?
13
- `)
14
- .get(libraryId, fileId);
15
- };
16
- this.getAll = (libraryId) => {
17
- return this.db
13
+ `)
14
+ .get(libraryId, fileId);
15
+ };
16
+ this.getAll = (libraryId) => {
17
+ return this.db
18
18
  .prepare(`
19
19
  SELECT * FROM FileMetadata
20
20
  WHERE libraryId = ?
21
- `)
22
- .all(libraryId);
23
- };
24
- this.deleteAll = (libraryId) => {
25
- return this.db
21
+ `)
22
+ .all(libraryId);
23
+ };
24
+ this.deleteAll = (libraryId) => {
25
+ return this.db
26
26
  .prepare(`
27
27
  DELETE FROM FileMetadata
28
28
  WHERE libraryId = ?
29
- `)
30
- .run(libraryId);
31
- };
32
- this.put = (libraryId, fileInfo) => {
33
- return this.db
29
+ `)
30
+ .run(libraryId);
31
+ };
32
+ this.put = (libraryId, fileInfo) => {
33
+ return this.db
34
34
  .prepare(`
35
35
  INSERT OR REPLACE INTO FileMetadata (libraryId, fileId, name, type)
36
36
  VALUES (?, ?, ?, ?)
37
- `)
38
- .run(libraryId, fileInfo.id, fileInfo.fileName, fileInfo.type);
39
- };
40
- this.markPendingDelete = (libraryId, fileId) => {
41
- return this.db
37
+ `)
38
+ .run(libraryId, fileInfo.id, fileInfo.fileName, fileInfo.type);
39
+ };
40
+ this.markPendingDelete = (libraryId, fileId) => {
41
+ return this.db
42
42
  .prepare(`
43
43
  UPDATE FileMetadata
44
44
  SET pendingDeleteAt = ?
45
45
  WHERE libraryId = ? AND fileId = ?
46
- `)
47
- .run(Date.now(), libraryId, fileId);
48
- };
49
- this.delete = (libraryId, fileId) => {
50
- return this.db
46
+ `)
47
+ .run(Date.now(), libraryId, fileId);
48
+ };
49
+ this.delete = (libraryId, fileId) => {
50
+ return this.db
51
51
  .prepare(`
52
52
  DELETE FROM FileMetadata
53
53
  WHERE libraryId = ? AND fileId = ?
54
- `)
55
- .run(libraryId, fileId);
56
- };
57
- this.getPendingDeletes = (libraryId) => {
58
- return this.db
54
+ `)
55
+ .run(libraryId, fileId);
56
+ };
57
+ this.getPendingDeletes = (libraryId) => {
58
+ return this.db
59
59
  .prepare(`
60
60
  SELECT * FROM FileMetadata
61
61
  WHERE libraryId = ? AND pendingDeleteAt < ?
62
- `)
63
- .all(libraryId, Date.now() - 1000 * 60 * 60 * 24 * this.deleteExpirationDays);
64
- };
65
- this.deleteExpirationDays = deleteExpirationDays;
66
- }
67
- }
68
- exports.FileMetadata = FileMetadata;
62
+ `)
63
+ .all(libraryId, Date.now() - 1000 * 60 * 60 * 24 * this.deleteExpirationDays);
64
+ };
65
+ this.deleteExpirationDays = deleteExpirationDays;
66
+ }
67
+ }
68
+ exports.FileMetadata = FileMetadata;
69
69
  //# sourceMappingURL=FileMetadata.js.map
@@ -1,35 +1,35 @@
1
- /// <reference types="node" resolution-mode="require"/>
2
- import { Readable } from 'stream';
3
- export interface FileInfo {
4
- fileName: string;
5
- id: string;
6
- libraryId: string;
7
- type: string;
8
- }
9
- /**
10
- * The interface for implementing a file storage backend.
11
- * verdant will supply file Blobs and metadata, and the storage backend
12
- * must store them somewhere.
13
- *
14
- * The storage backend must also provide a way to get a URL for the file,
15
- * even if the file is not yet uploaded, based on its metadata.
16
- */
17
- export interface FileStorage {
18
- put(fileStream: Readable, data: FileInfo): Promise<void>;
19
- getUrl(data: FileInfo): string | Promise<string>;
20
- delete(data: FileInfo): Promise<void>;
21
- }
22
- export declare class LocalFileStorage implements FileStorage {
23
- private readonly host;
24
- private readonly rootDirectory;
25
- constructor({ rootDirectory, host, }: {
26
- rootDirectory: string;
27
- host: string;
28
- });
29
- private prepareHost;
30
- put(fileStream: Readable, data: FileInfo): Promise<void>;
31
- getUrl(data: FileInfo): string;
32
- delete(data: FileInfo): Promise<void>;
33
- private getPath;
34
- private getStorageLocation;
35
- }
1
+ /// <reference types="node" resolution-mode="require"/>
2
+ import { Readable } from 'stream';
3
+ export interface FileInfo {
4
+ fileName: string;
5
+ id: string;
6
+ libraryId: string;
7
+ type: string;
8
+ }
9
+ /**
10
+ * The interface for implementing a file storage backend.
11
+ * verdant will supply file Blobs and metadata, and the storage backend
12
+ * must store them somewhere.
13
+ *
14
+ * The storage backend must also provide a way to get a URL for the file,
15
+ * even if the file is not yet uploaded, based on its metadata.
16
+ */
17
+ export interface FileStorage {
18
+ put(fileStream: Readable, data: FileInfo): Promise<void>;
19
+ getUrl(data: FileInfo): string | Promise<string>;
20
+ delete(data: FileInfo): Promise<void>;
21
+ }
22
+ export declare class LocalFileStorage implements FileStorage {
23
+ private readonly host;
24
+ private readonly rootDirectory;
25
+ constructor({ rootDirectory, host, }: {
26
+ rootDirectory: string;
27
+ host: string;
28
+ });
29
+ private prepareHost;
30
+ put(fileStream: Readable, data: FileInfo): Promise<void>;
31
+ getUrl(data: FileInfo): string;
32
+ delete(data: FileInfo): Promise<void>;
33
+ private getPath;
34
+ private getStorageLocation;
35
+ }