@orpc/experimental-durable-iterator 0.0.0-next.ebd6d63 → 0.0.0-next.f397ca2

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.
@@ -96,6 +96,9 @@ interface EventResumeStorageOptions extends StandardRPCJsonSerializerOptions {
96
96
  *
97
97
  * @remarks
98
98
  * - Use infinite values to disable
99
+ * - Note that for performance, expired event cleanup is deferred. This means
100
+ * expired events may remain in storage for a short period beyond their
101
+ * retention time.
99
102
  *
100
103
  * @default NaN (disabled)
101
104
  */
@@ -135,6 +138,7 @@ declare class EventResumeStorage<T extends object> {
135
138
  get(websocket: DurableIteratorWebsocket, lastEventId: string): T[];
136
139
  private initSchema;
137
140
  private resetSchema;
141
+ private lastCleanupTime;
138
142
  private cleanupExpiredEvents;
139
143
  private serializeEventPayload;
140
144
  private deserializeEventPayload;
@@ -96,6 +96,9 @@ interface EventResumeStorageOptions extends StandardRPCJsonSerializerOptions {
96
96
  *
97
97
  * @remarks
98
98
  * - Use infinite values to disable
99
+ * - Note that for performance, expired event cleanup is deferred. This means
100
+ * expired events may remain in storage for a short period beyond their
101
+ * retention time.
99
102
  *
100
103
  * @default NaN (disabled)
101
104
  */
@@ -135,6 +138,7 @@ declare class EventResumeStorage<T extends object> {
135
138
  get(websocket: DurableIteratorWebsocket, lastEventId: string): T[];
136
139
  private initSchema;
137
140
  private resetSchema;
141
+ private lastCleanupTime;
138
142
  private cleanupExpiredEvents;
139
143
  private serializeEventPayload;
140
144
  private deserializeEventPayload;
@@ -241,7 +241,13 @@ class EventResumeStorage {
241
241
  `);
242
242
  this.initSchema();
243
243
  }
244
+ lastCleanupTime;
244
245
  cleanupExpiredEvents() {
246
+ const now = Date.now();
247
+ if (this.lastCleanupTime && this.lastCleanupTime + this.retentionSeconds * 1e3 > now) {
248
+ return;
249
+ }
250
+ this.lastCleanupTime = now;
245
251
  this.durableState.storage.sql.exec(`
246
252
  DELETE FROM "${this.schemaPrefix}events" WHERE stored_at < unixepoch() - ?
247
253
  `, this.retentionSeconds);
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@orpc/experimental-durable-iterator",
3
3
  "type": "module",
4
- "version": "0.0.0-next.ebd6d63",
4
+ "version": "0.0.0-next.f397ca2",
5
5
  "license": "MIT",
6
6
  "homepage": "https://orpc.unnoq.com",
7
7
  "repository": {
@@ -34,17 +34,17 @@
34
34
  "dist"
35
35
  ],
36
36
  "dependencies": {
37
- "partysocket": "^1.1.5",
37
+ "partysocket": "^1.1.6",
38
38
  "valibot": "^1.1.0",
39
- "@orpc/client": "0.0.0-next.ebd6d63",
40
- "@orpc/contract": "0.0.0-next.ebd6d63",
41
- "@orpc/shared": "0.0.0-next.ebd6d63",
42
- "@orpc/server": "0.0.0-next.ebd6d63"
39
+ "@orpc/client": "0.0.0-next.f397ca2",
40
+ "@orpc/shared": "0.0.0-next.f397ca2",
41
+ "@orpc/server": "0.0.0-next.f397ca2",
42
+ "@orpc/contract": "0.0.0-next.f397ca2"
43
43
  },
44
44
  "devDependencies": {
45
- "@cloudflare/workers-types": "^4.20250924.0",
45
+ "@cloudflare/workers-types": "^4.20251109.0",
46
46
  "@types/node": "^22.15.30",
47
- "@orpc/standard-server-peer": "0.0.0-next.ebd6d63"
47
+ "@orpc/standard-server-peer": "0.0.0-next.f397ca2"
48
48
  },
49
49
  "scripts": {
50
50
  "build": "unbuild",