@verdant-web/cloudflare 0.1.2 → 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.d.ts CHANGED
@@ -16,7 +16,7 @@ export declare function createVerdantWorkerApp(config: VerdantWorkerConfig): imp
16
16
  Bindings: any;
17
17
  Variables: any;
18
18
  }, {
19
- "/": {
19
+ "*": {
20
20
  $all: {
21
21
  input: {};
22
22
  output: {};
package/dist/esm/api.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import { errorHandler, tokenMiddleware, TokenVerifier, } from '@verdant-web/server/internals';
2
2
  import { Hono } from 'hono';
3
- import { basePath } from 'hono/route';
3
+ import { routePath } from 'hono/route';
4
4
  /**
5
5
  * Creates a Hono app configured to serve Verdant library traffic.
6
6
  * This app 'router' should be mounted onto another Verdant app
@@ -22,7 +22,7 @@ export function createVerdantWorkerApp(config) {
22
22
  });
23
23
  return tokenMiddleware(tokenVerifier)(ctx, next);
24
24
  })
25
- .all((ctx) => {
25
+ .all('*', (ctx) => {
26
26
  if (ctx.req.method === 'OPTIONS') {
27
27
  // preflight request, np
28
28
  return ctx.newResponse(null, { status: 204 });
@@ -31,11 +31,10 @@ export function createVerdantWorkerApp(config) {
31
31
  const id = ctx.env[config.durableObjectBindingName].idFromName(info.libraryId);
32
32
  const obj = ctx.env[config.durableObjectBindingName].get(id);
33
33
  // remove the base path so the DO sees the correct routing
34
- const path = basePath(ctx);
34
+ const path = routePath(ctx).replace('/*', '');
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,QAAQ,EAAE,MAAM,YAAY,CAAC;AAOtC;;;;;;;;;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,CAAC,GAAG,EAAE,EAAE;QACZ,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,QAAQ,CAAC,GAAG,CAAC,CAAC;QAC3B,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"}
@@ -1,5 +1,5 @@
1
- import { ClientMessage, EventSubscriber } from '@verdant-web/common';
2
- import { FileStorage, TokenInfo, UserProfiles } from '@verdant-web/server';
1
+ import { EventSubscriber } from '@verdant-web/common';
2
+ import { FileStorage, UserProfiles } from '@verdant-web/server';
3
3
  import { ClientConnectionManager, Library, LibraryEvents } from '@verdant-web/server/internals';
4
4
  export interface DurableObjectLibraryConfig {
5
5
  tokenSecret: string;
@@ -25,7 +25,6 @@ export declare class DurableObjectLibrary {
25
25
  webSocketMessage: (ws: WebSocket, message: string | ArrayBuffer) => void | Promise<void>;
26
26
  webSocketClose: (ws: WebSocket, code: number, reason: string, wasClean: boolean) => void | Promise<void>;
27
27
  webSocketError: (ws: WebSocket, error: unknown) => void | Promise<void>;
28
- handleMessage: (key: string, info: TokenInfo, message: ClientMessage) => Promise<void>;
29
28
  getDocumentSnapshot: (collection: string, id: string) => Promise<{} | null>;
30
29
  getFileInfo: (fileId: string) => Promise<{
31
30
  libraryId: string;
@@ -34,7 +33,8 @@ export declare class DurableObjectLibrary {
34
33
  type: string;
35
34
  url: string | null;
36
35
  } | null>;
37
- evict: () => Promise<void>;
36
+ evict: () => Promise<boolean>;
38
37
  forceTruant: (replicaId: string) => Promise<void>;
39
38
  getInfo: () => Promise<import("@verdant-web/server").LibraryInfo | null>;
39
+ getIsInitialized: () => boolean;
40
40
  }
@@ -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")) {
@@ -64,6 +73,9 @@ export class DurableObjectLibrary {
64
73
  if (storedLibraryId) {
65
74
  await this.initialize(storedLibraryId);
66
75
  }
76
+ else {
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.');
78
+ }
67
79
  });
68
80
  this.fetch = async (request) => {
69
81
  return __classPrivateFieldGet(this, _DurableObjectLibrary_app, "f").fetch(request);
@@ -100,35 +112,48 @@ export class DurableObjectLibrary {
100
112
  this.clientConnections.remove(key);
101
113
  __classPrivateFieldGet(this, _DurableObjectLibrary_socketInfoCache, "f").delete(ws);
102
114
  };
103
- this.handleMessage = async (key, info, message) => {
104
- await __classPrivateFieldGet(this, _DurableObjectLibrary_restore, "f").call(this);
105
- return this.library.handleMessage(message, key, info);
106
- };
107
115
  // public library API
108
116
  this.getDocumentSnapshot = async (collection, id) => {
109
117
  await __classPrivateFieldGet(this, _DurableObjectLibrary_restore, "f").call(this);
118
+ if (!this.library)
119
+ return null;
110
120
  return this.library.getDocumentSnapshot(createOid(collection, id));
111
121
  };
112
122
  this.getFileInfo = async (fileId) => {
113
123
  await __classPrivateFieldGet(this, _DurableObjectLibrary_restore, "f").call(this);
124
+ if (!this.library)
125
+ return null;
114
126
  return this.library.getFileInfo(fileId);
115
127
  };
116
128
  this.evict = async () => {
117
129
  var _a;
118
- await __classPrivateFieldGet(this, _DurableObjectLibrary_restore, "f").call(this);
119
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;
120
137
  await ((_a = this.library) === null || _a === void 0 ? void 0 : _a.destroy());
121
138
  await this.ctx.storage.deleteAll();
122
139
  __classPrivateFieldSet(this, _DurableObjectLibrary_initialized, false, "f");
140
+ return true;
123
141
  };
124
142
  this.forceTruant = async (replicaId) => {
143
+ var _a;
125
144
  await __classPrivateFieldGet(this, _DurableObjectLibrary_restore, "f").call(this);
126
- return this.library.forceTruant(replicaId);
145
+ return (_a = this.library) === null || _a === void 0 ? void 0 : _a.forceTruant(replicaId);
127
146
  };
128
147
  this.getInfo = async () => {
129
148
  await __classPrivateFieldGet(this, _DurableObjectLibrary_restore, "f").call(this);
149
+ if (!this.library)
150
+ return null;
130
151
  return this.library.getInfo();
131
152
  };
153
+ // helpers
154
+ this.getIsInitialized = () => {
155
+ return !!this.library;
156
+ };
132
157
  __classPrivateFieldSet(this, _DurableObjectLibrary_config, verdant, "f");
133
158
  this.clientConnections = new ClientConnectionManager({
134
159
  profiles: new UserProfileLoader(__classPrivateFieldGet(this, _DurableObjectLibrary_config, "f").profiles),
@@ -142,10 +167,6 @@ export class DurableObjectLibrary {
142
167
  });
143
168
  __classPrivateFieldSet(this, _DurableObjectLibrary_app, new Hono()
144
169
  .onError(errorHandler)
145
- .use(async (ctx, next) => {
146
- console.log(`[verdant object]`, ctx.req.url);
147
- await next();
148
- })
149
170
  .use(tokenMiddleware(new TokenVerifier({ secret: verdant.tokenSecret })))
150
171
  .use(async (ctx, next) => {
151
172
  // only after authorization, migrate the database
@@ -231,8 +252,11 @@ export class DurableObjectLibrary {
231
252
  })));
232
253
  }
233
254
  get log() {
234
- 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");
235
259
  }
236
260
  }
237
- _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();
238
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.2",
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
@@ -4,7 +4,7 @@ import {
4
4
  TokenVerifier,
5
5
  } from '@verdant-web/server/internals';
6
6
  import { Hono } from 'hono';
7
- import { basePath } from 'hono/route';
7
+ import { routePath } from 'hono/route';
8
8
 
9
9
  export interface VerdantWorkerConfig {
10
10
  durableObjectBindingName: string;
@@ -32,7 +32,7 @@ export function createVerdantWorkerApp(config: VerdantWorkerConfig) {
32
32
  });
33
33
  return tokenMiddleware(tokenVerifier)(ctx as any, next);
34
34
  })
35
- .all((ctx) => {
35
+ .all('*', (ctx) => {
36
36
  if (ctx.req.method === 'OPTIONS') {
37
37
  // preflight request, np
38
38
  return ctx.newResponse(null, { status: 204 });
@@ -44,17 +44,10 @@ export function createVerdantWorkerApp(config: VerdantWorkerConfig) {
44
44
  );
45
45
  const obj = ctx.env[config.durableObjectBindingName].get(id);
46
46
  // remove the base path so the DO sees the correct routing
47
- const path = basePath(ctx);
47
+ const path = routePath(ctx).replace('/*', '');
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) {
@@ -260,6 +270,11 @@ export class DurableObjectLibrary {
260
270
  const storedLibraryId = await this.ctx.storage.get<string>('libraryId');
261
271
  if (storedLibraryId) {
262
272
  await this.initialize(storedLibraryId);
273
+ } else {
274
+ this.log(
275
+ 'error',
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.',
277
+ );
263
278
  }
264
279
  };
265
280
 
@@ -315,39 +330,43 @@ export class DurableObjectLibrary {
315
330
  this.#socketInfoCache.delete(ws);
316
331
  };
317
332
 
318
- handleMessage = async (
319
- key: string,
320
- info: TokenInfo,
321
- message: ClientMessage,
322
- ) => {
323
- await this.#restore();
324
- return this.library.handleMessage(message, key, info);
325
- };
326
-
327
333
  // public library API
328
334
  getDocumentSnapshot = async (collection: string, id: string) => {
329
335
  await this.#restore();
336
+ if (!this.library) return null;
330
337
  return this.library.getDocumentSnapshot(
331
338
  createOid(collection, id),
332
339
  ) as Promise<{} | null>;
333
340
  };
334
341
  getFileInfo = async (fileId: string) => {
335
342
  await this.#restore();
343
+ if (!this.library) return null;
336
344
  return this.library.getFileInfo(fileId);
337
345
  };
338
346
  evict = async () => {
339
- await this.#restore();
340
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;
341
353
  await this.library?.destroy();
342
354
  await this.ctx.storage.deleteAll();
343
355
  this.#initialized = false;
356
+ return true;
344
357
  };
345
358
  forceTruant = async (replicaId: string) => {
346
359
  await this.#restore();
347
- return this.library.forceTruant(replicaId);
360
+ return this.library?.forceTruant(replicaId);
348
361
  };
349
362
  getInfo = async () => {
350
363
  await this.#restore();
364
+ if (!this.library) return null;
351
365
  return this.library.getInfo();
352
366
  };
367
+
368
+ // helpers
369
+ getIsInitialized = () => {
370
+ return !!this.library;
371
+ };
353
372
  }