@verdant-web/cloudflare 0.1.3 → 0.1.4

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/esm/api.js CHANGED
@@ -35,7 +35,6 @@ export function createVerdantWorkerApp(config) {
35
35
  const thisUrl = new URL(ctx.req.url);
36
36
  thisUrl.pathname = thisUrl.pathname.replace(path, '') || '/';
37
37
  const modifiedReq = new Request(thisUrl.toString(), ctx.req.raw);
38
- console.log(`[verdant worker] routing to DO ${info.libraryId}:`, ctx.req.method, ctx.req.url, path, modifiedReq.url);
39
38
  return obj.fetch(modifiedReq);
40
39
  });
41
40
  return app;
@@ -1 +1 @@
1
- {"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/api.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,YAAY,EACZ,eAAe,EACf,aAAa,GACb,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAOvC;;;;;;;;;GASG;AACH,MAAM,UAAU,sBAAsB,CAAC,MAA2B;IACjE,2DAA2D;IAC3D,8BAA8B;IAC9B,MAAM,GAAG,GAAG,IAAI,IAAI,EAAqC;SACvD,OAAO,CAAC,YAAY,CAAC;SACrB,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE;QAClB,MAAM,aAAa,GAAG,IAAI,aAAa,CAAC;YACvC,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,sBAAsB,CAAC;SAC9C,CAAC,CAAC;QACH,OAAO,eAAe,CAAC,aAAa,CAAC,CAAC,GAAU,EAAE,IAAI,CAAC,CAAC;IACzD,CAAC,CAAC;SACD,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE;QACjB,IAAI,GAAG,CAAC,GAAG,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAClC,wBAAwB;YACxB,OAAO,GAAG,CAAC,WAAW,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;QAC/C,CAAC;QAED,MAAM,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QAClC,MAAM,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,wBAAwB,CAAC,CAAC,UAAU,CAC7D,IAAI,CAAC,SAAS,CACd,CAAC;QACF,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,wBAAwB,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC7D,0DAA0D;QAC1D,MAAM,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QAC9C,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACrC,OAAO,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC;QAC7D,MAAM,WAAW,GAAY,IAAI,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC1E,OAAO,CAAC,GAAG,CACV,kCAAkC,IAAI,CAAC,SAAS,GAAG,EACnD,GAAG,CAAC,GAAG,CAAC,MAAM,EACd,GAAG,CAAC,GAAG,CAAC,GAAG,EACX,IAAI,EACJ,WAAW,CAAC,GAAG,CACf,CAAC;QACF,OAAO,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IAC/B,CAAC,CAAC,CAAC;IAEJ,OAAO,GAAG,CAAC;AACZ,CAAC"}
1
+ {"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/api.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,YAAY,EACZ,eAAe,EACf,aAAa,GACb,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAOvC;;;;;;;;;GASG;AACH,MAAM,UAAU,sBAAsB,CAAC,MAA2B;IACjE,2DAA2D;IAC3D,8BAA8B;IAC9B,MAAM,GAAG,GAAG,IAAI,IAAI,EAAqC;SACvD,OAAO,CAAC,YAAY,CAAC;SACrB,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE;QAClB,MAAM,aAAa,GAAG,IAAI,aAAa,CAAC;YACvC,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,sBAAsB,CAAC;SAC9C,CAAC,CAAC;QACH,OAAO,eAAe,CAAC,aAAa,CAAC,CAAC,GAAU,EAAE,IAAI,CAAC,CAAC;IACzD,CAAC,CAAC;SACD,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE;QACjB,IAAI,GAAG,CAAC,GAAG,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAClC,wBAAwB;YACxB,OAAO,GAAG,CAAC,WAAW,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;QAC/C,CAAC;QAED,MAAM,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QAClC,MAAM,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,wBAAwB,CAAC,CAAC,UAAU,CAC7D,IAAI,CAAC,SAAS,CACd,CAAC;QACF,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,wBAAwB,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC7D,0DAA0D;QAC1D,MAAM,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QAC9C,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACrC,OAAO,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC;QAC7D,MAAM,WAAW,GAAY,IAAI,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC1E,OAAO,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IAC/B,CAAC,CAAC,CAAC;IAEJ,OAAO,GAAG,CAAC;AACZ,CAAC"}
@@ -33,7 +33,7 @@ export declare class DurableObjectLibrary {
33
33
  type: string;
34
34
  url: string | null;
35
35
  } | null>;
36
- evict: () => Promise<void>;
36
+ evict: () => Promise<boolean>;
37
37
  forceTruant: (replicaId: string) => Promise<void>;
38
38
  getInfo: () => Promise<import("@verdant-web/server").LibraryInfo | null>;
39
39
  getIsInitialized: () => boolean;
@@ -9,7 +9,7 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
9
9
  if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
10
10
  return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
11
11
  };
12
- var _DurableObjectLibrary_app, _DurableObjectLibrary_socketInfoCache, _DurableObjectLibrary_initialized, _DurableObjectLibrary_config, _DurableObjectLibrary_noop, _DurableObjectLibrary_restore, _DurableObjectLibrary_getSocketInfo;
12
+ var _DurableObjectLibrary_app, _DurableObjectLibrary_socketInfoCache, _DurableObjectLibrary_initializePromise, _DurableObjectLibrary_initialized, _DurableObjectLibrary_config, _DurableObjectLibrary_noop, _DurableObjectLibrary_restore, _DurableObjectLibrary_getSocketInfo;
13
13
  import { createOid, EventSubscriber, VerdantError, } from '@verdant-web/common';
14
14
  import { ClientConnectionManager, errorHandler, FileStorageLibraryDelegate, Library, SqlShardStorage, tokenMiddleware, TokenVerifier, UserProfileLoader, } from '@verdant-web/server/internals';
15
15
  import { Hono } from 'hono';
@@ -19,42 +19,51 @@ export class DurableObjectLibrary {
19
19
  this.ctx = ctx;
20
20
  _DurableObjectLibrary_app.set(this, void 0);
21
21
  _DurableObjectLibrary_socketInfoCache.set(this, new WeakMap());
22
+ _DurableObjectLibrary_initializePromise.set(this, null);
22
23
  _DurableObjectLibrary_initialized.set(this, false);
23
24
  _DurableObjectLibrary_config.set(this, void 0);
24
25
  this.events = new EventSubscriber();
25
26
  _DurableObjectLibrary_noop.set(this, () => { });
26
27
  this.initialize = async (libraryId) => {
27
- var _a, _b, _c, _d;
28
28
  if (__classPrivateFieldGet(this, _DurableObjectLibrary_initialized, "f")) {
29
29
  return;
30
30
  }
31
- const storedLibraryId = await this.ctx.storage.get('libraryId');
32
- if (storedLibraryId && storedLibraryId !== libraryId) {
33
- throw new VerdantError(VerdantError.Code.InvalidRequest, undefined, 'Library ID does not match existing storage');
31
+ if (__classPrivateFieldGet(this, _DurableObjectLibrary_initializePromise, "f")) {
32
+ return __classPrivateFieldGet(this, _DurableObjectLibrary_initializePromise, "f");
34
33
  }
35
- await this.ctx.storage.put('libraryId', libraryId);
36
- __classPrivateFieldSet(this, _DurableObjectLibrary_initialized, true, "f");
37
- const db = createDurableObjectSqliteExecutor(this.ctx.storage, {
38
- log: this.log,
39
- });
40
- await db.migrate();
41
- const storage = new SqlShardStorage(db, {
42
- libraryId,
43
- fileDeleteExpirationDays: (_b = (_a = __classPrivateFieldGet(this, _DurableObjectLibrary_config, "f").storageOptions) === null || _a === void 0 ? void 0 : _a.fileDeleteExpirationDays) !== null && _b !== void 0 ? _b : 14,
44
- replicaTruancyMinutes: (_d = (_c = __classPrivateFieldGet(this, _DurableObjectLibrary_config, "f").storageOptions) === null || _c === void 0 ? void 0 : _c.replicaTruancyTimeout) !== null && _d !== void 0 ? _d : 14 * 24 * 60,
45
- });
46
- this.library = new Library({
47
- id: libraryId,
48
- storage,
49
- sender: this.clientConnections,
50
- events: this.events,
51
- disableRebasing: __classPrivateFieldGet(this, _DurableObjectLibrary_config, "f").disableRebasing,
52
- fileStorage: __classPrivateFieldGet(this, _DurableObjectLibrary_config, "f").fileStorage
53
- ? new FileStorageLibraryDelegate(libraryId, __classPrivateFieldGet(this, _DurableObjectLibrary_config, "f").fileStorage)
54
- : undefined,
55
- log: this.log,
56
- presence: this.clientConnections.presence,
57
- });
34
+ __classPrivateFieldSet(this, _DurableObjectLibrary_initializePromise, (async () => {
35
+ var _a, _b, _c, _d;
36
+ const storedLibraryId = await this.ctx.storage.get('libraryId');
37
+ if (storedLibraryId && storedLibraryId !== libraryId) {
38
+ throw new VerdantError(VerdantError.Code.InvalidRequest, undefined, 'Library ID does not match existing storage');
39
+ }
40
+ this.ctx.storage.put('libraryId', libraryId);
41
+ const db = createDurableObjectSqliteExecutor(this.ctx.storage, {
42
+ log: this.log,
43
+ });
44
+ db.migrate();
45
+ const storage = new SqlShardStorage(db, {
46
+ libraryId,
47
+ fileDeleteExpirationDays: (_b = (_a = __classPrivateFieldGet(this, _DurableObjectLibrary_config, "f").storageOptions) === null || _a === void 0 ? void 0 : _a.fileDeleteExpirationDays) !== null && _b !== void 0 ? _b : 14,
48
+ replicaTruancyMinutes: (_d = (_c = __classPrivateFieldGet(this, _DurableObjectLibrary_config, "f").storageOptions) === null || _c === void 0 ? void 0 : _c.replicaTruancyTimeout) !== null && _d !== void 0 ? _d : 14 * 24 * 60,
49
+ });
50
+ this.library = new Library({
51
+ id: libraryId,
52
+ storage,
53
+ sender: this.clientConnections,
54
+ events: this.events,
55
+ disableRebasing: __classPrivateFieldGet(this, _DurableObjectLibrary_config, "f").disableRebasing,
56
+ fileStorage: __classPrivateFieldGet(this, _DurableObjectLibrary_config, "f").fileStorage
57
+ ? new FileStorageLibraryDelegate(libraryId, __classPrivateFieldGet(this, _DurableObjectLibrary_config, "f").fileStorage)
58
+ : undefined,
59
+ log: this.log,
60
+ presence: this.clientConnections.presence,
61
+ });
62
+ __classPrivateFieldSet(this, _DurableObjectLibrary_initialized, true, "f");
63
+ __classPrivateFieldSet(this, _DurableObjectLibrary_initializePromise, null, "f");
64
+ this.log('info', 'Library initialized', { libraryId: this.library.id });
65
+ })(), "f");
66
+ await __classPrivateFieldGet(this, _DurableObjectLibrary_initializePromise, "f");
58
67
  };
59
68
  _DurableObjectLibrary_restore.set(this, async () => {
60
69
  if (__classPrivateFieldGet(this, _DurableObjectLibrary_initialized, "f")) {
@@ -65,7 +74,7 @@ export class DurableObjectLibrary {
65
74
  await this.initialize(storedLibraryId);
66
75
  }
67
76
  else {
68
- throw new VerdantError(VerdantError.Code.InvalidRequest, undefined, 'A Verdant Durable Object Library was accessed before being initialized. Before using a Verdant Library DO, you must either call .initialize(libraryId) or receive a valid client request to seed the library.');
77
+ this.log('error', 'A Verdant Durable Object Library was accessed before being initialized. Before using a Verdant Library DO, you must either call .initialize(libraryId) or receive a valid client request to seed the library.');
69
78
  }
70
79
  });
71
80
  this.fetch = async (request) => {
@@ -106,26 +115,39 @@ export class DurableObjectLibrary {
106
115
  // public library API
107
116
  this.getDocumentSnapshot = async (collection, id) => {
108
117
  await __classPrivateFieldGet(this, _DurableObjectLibrary_restore, "f").call(this);
118
+ if (!this.library)
119
+ return null;
109
120
  return this.library.getDocumentSnapshot(createOid(collection, id));
110
121
  };
111
122
  this.getFileInfo = async (fileId) => {
112
123
  await __classPrivateFieldGet(this, _DurableObjectLibrary_restore, "f").call(this);
124
+ if (!this.library)
125
+ return null;
113
126
  return this.library.getFileInfo(fileId);
114
127
  };
115
128
  this.evict = async () => {
116
129
  var _a;
117
- await __classPrivateFieldGet(this, _DurableObjectLibrary_restore, "f").call(this);
118
130
  await this.clientConnections.disconnectAll();
131
+ await this.ctx
132
+ .getWebSockets()
133
+ .forEach((ws) => ws.close(1001, 'Server reset'));
134
+ await __classPrivateFieldGet(this, _DurableObjectLibrary_restore, "f").call(this);
135
+ if (!this.library)
136
+ return false;
119
137
  await ((_a = this.library) === null || _a === void 0 ? void 0 : _a.destroy());
120
138
  await this.ctx.storage.deleteAll();
121
139
  __classPrivateFieldSet(this, _DurableObjectLibrary_initialized, false, "f");
140
+ return true;
122
141
  };
123
142
  this.forceTruant = async (replicaId) => {
143
+ var _a;
124
144
  await __classPrivateFieldGet(this, _DurableObjectLibrary_restore, "f").call(this);
125
- return this.library.forceTruant(replicaId);
145
+ return (_a = this.library) === null || _a === void 0 ? void 0 : _a.forceTruant(replicaId);
126
146
  };
127
147
  this.getInfo = async () => {
128
148
  await __classPrivateFieldGet(this, _DurableObjectLibrary_restore, "f").call(this);
149
+ if (!this.library)
150
+ return null;
129
151
  return this.library.getInfo();
130
152
  };
131
153
  // helpers
@@ -145,10 +167,6 @@ export class DurableObjectLibrary {
145
167
  });
146
168
  __classPrivateFieldSet(this, _DurableObjectLibrary_app, new Hono()
147
169
  .onError(errorHandler)
148
- .use(async (ctx, next) => {
149
- console.log(`[verdant object]`, ctx.req.url);
150
- await next();
151
- })
152
170
  .use(tokenMiddleware(new TokenVerifier({ secret: verdant.tokenSecret })))
153
171
  .use(async (ctx, next) => {
154
172
  // only after authorization, migrate the database
@@ -234,8 +252,11 @@ export class DurableObjectLibrary {
234
252
  })));
235
253
  }
236
254
  get log() {
237
- return __classPrivateFieldGet(this, _DurableObjectLibrary_config, "f").log || __classPrivateFieldGet(this, _DurableObjectLibrary_noop, "f");
255
+ if (__classPrivateFieldGet(this, _DurableObjectLibrary_config, "f").log) {
256
+ return (level, ...args) => { var _a; return __classPrivateFieldGet(this, _DurableObjectLibrary_config, "f").log(level, (_a = this.library) === null || _a === void 0 ? void 0 : _a.id, ...args); };
257
+ }
258
+ return __classPrivateFieldGet(this, _DurableObjectLibrary_noop, "f");
238
259
  }
239
260
  }
240
- _DurableObjectLibrary_app = new WeakMap(), _DurableObjectLibrary_socketInfoCache = new WeakMap(), _DurableObjectLibrary_initialized = new WeakMap(), _DurableObjectLibrary_config = new WeakMap(), _DurableObjectLibrary_noop = new WeakMap(), _DurableObjectLibrary_restore = new WeakMap(), _DurableObjectLibrary_getSocketInfo = new WeakMap();
261
+ _DurableObjectLibrary_app = new WeakMap(), _DurableObjectLibrary_socketInfoCache = new WeakMap(), _DurableObjectLibrary_initializePromise = new WeakMap(), _DurableObjectLibrary_initialized = new WeakMap(), _DurableObjectLibrary_config = new WeakMap(), _DurableObjectLibrary_noop = new WeakMap(), _DurableObjectLibrary_restore = new WeakMap(), _DurableObjectLibrary_getSocketInfo = new WeakMap();
241
262
  //# sourceMappingURL=doLibrary.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"doLibrary.js","sourceRoot":"","sources":["../../src/doLibrary.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"doLibrary.js","sourceRoot":"","sources":["../../src/doLibrary.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@verdant-web/cloudflare",
3
- "version": "0.1.3",
3
+ "version": "0.1.4",
4
4
  "access": "public",
5
5
  "type": "module",
6
6
  "exports": {
@@ -22,7 +22,7 @@
22
22
  "@hono/node-server": "^1.13.8"
23
23
  },
24
24
  "dependencies": {
25
- "@verdant-web/server": "4.0.1",
25
+ "@verdant-web/server": "4.0.2",
26
26
  "@verdant-web/common": "3.0.0"
27
27
  },
28
28
  "devDependencies": {
package/src/api.ts CHANGED
@@ -48,13 +48,6 @@ export function createVerdantWorkerApp(config: VerdantWorkerConfig) {
48
48
  const thisUrl = new URL(ctx.req.url);
49
49
  thisUrl.pathname = thisUrl.pathname.replace(path, '') || '/';
50
50
  const modifiedReq: Request = new Request(thisUrl.toString(), ctx.req.raw);
51
- console.log(
52
- `[verdant worker] routing to DO ${info.libraryId}:`,
53
- ctx.req.method,
54
- ctx.req.url,
55
- path,
56
- modifiedReq.url,
57
- );
58
51
  return obj.fetch(modifiedReq);
59
52
  });
60
53
 
package/src/doLibrary.ts CHANGED
@@ -44,6 +44,7 @@ export interface DurableObjectLibraryConfig {
44
44
  export class DurableObjectLibrary {
45
45
  #app: Hono<any>;
46
46
  #socketInfoCache: WeakMap<WebSocket, SocketMeta> = new WeakMap();
47
+ #initializePromise: Promise<void> | null = null;
47
48
  #initialized = false;
48
49
  #config: DurableObjectLibraryConfig;
49
50
 
@@ -72,10 +73,6 @@ export class DurableObjectLibrary {
72
73
 
73
74
  this.#app = new Hono()
74
75
  .onError(errorHandler)
75
- .use(async (ctx, next) => {
76
- console.log(`[verdant object]`, ctx.req.url);
77
- await next();
78
- })
79
76
  .use(tokenMiddleware(new TokenVerifier({ secret: verdant.tokenSecret })))
80
77
  .use(async (ctx, next) => {
81
78
  // only after authorization, migrate the database
@@ -212,46 +209,59 @@ export class DurableObjectLibrary {
212
209
 
213
210
  #noop = () => {};
214
211
  get log() {
215
- return this.#config.log || this.#noop;
212
+ if (this.#config.log) {
213
+ return (level: string, ...args: any[]) =>
214
+ this.#config.log!(level, this.library?.id, ...args);
215
+ }
216
+ return this.#noop;
216
217
  }
217
218
 
218
219
  initialize = async (libraryId: string) => {
219
220
  if (this.#initialized) {
220
221
  return;
221
222
  }
222
- const storedLibraryId = await this.ctx.storage.get<string>('libraryId');
223
- if (storedLibraryId && storedLibraryId !== libraryId) {
224
- throw new VerdantError(
225
- VerdantError.Code.InvalidRequest,
226
- undefined,
227
- 'Library ID does not match existing storage',
228
- );
223
+ if (this.#initializePromise) {
224
+ return this.#initializePromise;
229
225
  }
230
- await this.ctx.storage.put('libraryId', libraryId);
231
- this.#initialized = true;
232
- const db = createDurableObjectSqliteExecutor(this.ctx.storage, {
233
- log: this.log,
234
- });
235
- await db.migrate();
236
- const storage = new SqlShardStorage(db, {
237
- libraryId,
238
- fileDeleteExpirationDays:
239
- this.#config.storageOptions?.fileDeleteExpirationDays ?? 14,
240
- replicaTruancyMinutes:
241
- this.#config.storageOptions?.replicaTruancyTimeout ?? 14 * 24 * 60,
242
- });
243
- this.library = new Library({
244
- id: libraryId,
245
- storage,
246
- sender: this.clientConnections,
247
- events: this.events,
248
- disableRebasing: this.#config.disableRebasing,
249
- fileStorage: this.#config.fileStorage
250
- ? new FileStorageLibraryDelegate(libraryId, this.#config.fileStorage)
251
- : undefined,
252
- log: this.log,
253
- presence: this.clientConnections.presence,
254
- });
226
+
227
+ this.#initializePromise = (async () => {
228
+ const storedLibraryId = await this.ctx.storage.get<string>('libraryId');
229
+ if (storedLibraryId && storedLibraryId !== libraryId) {
230
+ throw new VerdantError(
231
+ VerdantError.Code.InvalidRequest,
232
+ undefined,
233
+ 'Library ID does not match existing storage',
234
+ );
235
+ }
236
+ this.ctx.storage.put('libraryId', libraryId);
237
+ const db = createDurableObjectSqliteExecutor(this.ctx.storage, {
238
+ log: this.log,
239
+ });
240
+ db.migrate();
241
+ const storage = new SqlShardStorage(db, {
242
+ libraryId,
243
+ fileDeleteExpirationDays:
244
+ this.#config.storageOptions?.fileDeleteExpirationDays ?? 14,
245
+ replicaTruancyMinutes:
246
+ this.#config.storageOptions?.replicaTruancyTimeout ?? 14 * 24 * 60,
247
+ });
248
+ this.library = new Library({
249
+ id: libraryId,
250
+ storage,
251
+ sender: this.clientConnections,
252
+ events: this.events,
253
+ disableRebasing: this.#config.disableRebasing,
254
+ fileStorage: this.#config.fileStorage
255
+ ? new FileStorageLibraryDelegate(libraryId, this.#config.fileStorage)
256
+ : undefined,
257
+ log: this.log,
258
+ presence: this.clientConnections.presence,
259
+ });
260
+ this.#initialized = true;
261
+ this.#initializePromise = null;
262
+ this.log('info', 'Library initialized', { libraryId: this.library.id });
263
+ })();
264
+ await this.#initializePromise;
255
265
  };
256
266
  #restore = async () => {
257
267
  if (this.#initialized) {
@@ -261,9 +271,8 @@ export class DurableObjectLibrary {
261
271
  if (storedLibraryId) {
262
272
  await this.initialize(storedLibraryId);
263
273
  } else {
264
- throw new VerdantError(
265
- VerdantError.Code.InvalidRequest,
266
- undefined,
274
+ this.log(
275
+ 'error',
267
276
  'A Verdant Durable Object Library was accessed before being initialized. Before using a Verdant Library DO, you must either call .initialize(libraryId) or receive a valid client request to seed the library.',
268
277
  );
269
278
  }
@@ -324,27 +333,35 @@ export class DurableObjectLibrary {
324
333
  // public library API
325
334
  getDocumentSnapshot = async (collection: string, id: string) => {
326
335
  await this.#restore();
336
+ if (!this.library) return null;
327
337
  return this.library.getDocumentSnapshot(
328
338
  createOid(collection, id),
329
339
  ) as Promise<{} | null>;
330
340
  };
331
341
  getFileInfo = async (fileId: string) => {
332
342
  await this.#restore();
343
+ if (!this.library) return null;
333
344
  return this.library.getFileInfo(fileId);
334
345
  };
335
346
  evict = async () => {
336
- await this.#restore();
337
347
  await this.clientConnections.disconnectAll();
348
+ await this.ctx
349
+ .getWebSockets()
350
+ .forEach((ws) => ws.close(1001, 'Server reset'));
351
+ await this.#restore();
352
+ if (!this.library) return false;
338
353
  await this.library?.destroy();
339
354
  await this.ctx.storage.deleteAll();
340
355
  this.#initialized = false;
356
+ return true;
341
357
  };
342
358
  forceTruant = async (replicaId: string) => {
343
359
  await this.#restore();
344
- return this.library.forceTruant(replicaId);
360
+ return this.library?.forceTruant(replicaId);
345
361
  };
346
362
  getInfo = async () => {
347
363
  await this.#restore();
364
+ if (!this.library) return null;
348
365
  return this.library.getInfo();
349
366
  };
350
367