@pairlobby/server-core 0.31.0 → 0.33.0

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 (56) hide show
  1. package/README.md +1 -1
  2. package/dist/admission.d.ts +11 -0
  3. package/dist/admission.d.ts.map +1 -1
  4. package/dist/admission.js +18 -12
  5. package/dist/admission.js.map +1 -1
  6. package/dist/auto-close-store.d.ts +10 -8
  7. package/dist/auto-close-store.d.ts.map +1 -1
  8. package/dist/auto-close-store.js +35 -22
  9. package/dist/auto-close-store.js.map +1 -1
  10. package/dist/changes.d.ts +25 -11
  11. package/dist/changes.d.ts.map +1 -1
  12. package/dist/changes.js +81 -22
  13. package/dist/changes.js.map +1 -1
  14. package/dist/commit.d.ts +12 -0
  15. package/dist/commit.d.ts.map +1 -0
  16. package/dist/commit.js +33 -0
  17. package/dist/commit.js.map +1 -0
  18. package/dist/export.d.ts +12 -0
  19. package/dist/export.d.ts.map +1 -0
  20. package/dist/export.js +72 -0
  21. package/dist/export.js.map +1 -0
  22. package/dist/index.d.ts +4 -1
  23. package/dist/index.d.ts.map +1 -1
  24. package/dist/index.js +4 -1
  25. package/dist/index.js.map +1 -1
  26. package/dist/paging.d.ts +12 -0
  27. package/dist/paging.d.ts.map +1 -0
  28. package/dist/paging.js +32 -0
  29. package/dist/paging.js.map +1 -0
  30. package/dist/ports.d.ts +12 -5
  31. package/dist/ports.d.ts.map +1 -1
  32. package/dist/ports.js +12 -9
  33. package/dist/ports.js.map +1 -1
  34. package/dist/relay.d.ts +14 -4
  35. package/dist/relay.d.ts.map +1 -1
  36. package/dist/relay.js +79 -39
  37. package/dist/relay.js.map +1 -1
  38. package/dist/service.d.ts +53 -3
  39. package/dist/service.d.ts.map +1 -1
  40. package/dist/service.js +459 -207
  41. package/dist/service.js.map +1 -1
  42. package/dist/settings.d.ts +33 -0
  43. package/dist/settings.d.ts.map +1 -0
  44. package/dist/settings.js +66 -0
  45. package/dist/settings.js.map +1 -0
  46. package/dist/store.d.ts +32 -13
  47. package/dist/store.d.ts.map +1 -1
  48. package/dist/turns.d.ts +1 -0
  49. package/dist/turns.d.ts.map +1 -1
  50. package/dist/turns.js +150 -117
  51. package/dist/turns.js.map +1 -1
  52. package/package.json +4 -3
  53. package/dist/request-backfill.d.ts +0 -3
  54. package/dist/request-backfill.d.ts.map +0 -1
  55. package/dist/request-backfill.js +0 -34
  56. package/dist/request-backfill.js.map +0 -1
package/dist/turns.js CHANGED
@@ -1,3 +1,4 @@
1
+ import { retryRoomConflict } from './commit.js';
1
2
  import { ACK_TIMEOUT_MS, ProtocolError, TURN_LEASE_MS, hashCredential, newCredential, newId } from '@pairlobby/protocol';
2
3
  import { appendEvent, assertCanWrite, assertController, assertMayTarget, assertPermitted, assertRoomWritable, authenticate, emptyMutation } from '@pairlobby/room-core';
3
4
  export function assertTurn(request, token, now) {
@@ -19,14 +20,31 @@ export class TurnCoordinator {
19
20
  this.now = now;
20
21
  }
21
22
  async view(roomId) {
22
- const view = await this.store.loadRoom(roomId);
23
+ const view = await this.store.loadRoom(roomId, { handovers: false });
23
24
  if (!view) {
24
25
  throw new ProtocolError('room_not_found', 'room not found');
25
26
  }
26
27
  return view;
27
28
  }
29
+ async requests(roomId) {
30
+ const requests = [];
31
+ let after = 0;
32
+ while (requests.length <= 1000) {
33
+ const page = await this.store.messageRequests(roomId, after, 200);
34
+ requests.push(...page.requests);
35
+ if (!page.hasMore) {
36
+ return requests;
37
+ }
38
+ const next = page.requests.at(-1)?.seq;
39
+ if (next === undefined || next <= after) {
40
+ throw new ProtocolError('server_unavailable', 'request pagination did not advance');
41
+ }
42
+ after = next;
43
+ }
44
+ throw new ProtocolError('server_unavailable', 'pending request limit exceeded');
45
+ }
28
46
  async pending(roomId) {
29
- return (await this.store.messageRequests(roomId, 0, 1000)).requests.filter((request) => !request.failureAt && !request.responseEventId && request.requiresReply);
47
+ return (await this.requests(roomId)).filter((request) => !request.failureAt && !request.responseEventId && request.requiresReply);
30
48
  }
31
49
  async resolve(roomId, requestId, participantId) {
32
50
  const direct = await this.store.messageRequest(roomId, requestId);
@@ -56,7 +74,7 @@ export class TurnCoordinator {
56
74
  async status(roomId, credential) {
57
75
  const view = await this.view(roomId);
58
76
  authenticate(view, await hashCredential(credential), this.now());
59
- const pending = (await this.store.messageRequests(roomId, 0, 1000)).requests;
77
+ const pending = await this.requests(roomId);
60
78
  const hasRunning = pending.some((request) => !request.failureAt && request.turnStatus === 'running');
61
79
  const next = pending.find((request) => !request.failureAt && this.eligible(view, request));
62
80
  return {
@@ -72,6 +90,7 @@ export class TurnCoordinator {
72
90
  state: request.failureAt ? 'failed' : request.providerWait ? 'provider_wait' : request.turnStatus === 'running' ? ((request.turnExpiresAt ?? 0) <= this.now() ? 'stalled' : request.action === 'waiting' || request.action === 'reply_pending' ? 'waiting' : 'answering') : unavailable ? 'unavailable' : paused ? 'paused' : overdue ? 'stalled' : 'waiting',
73
91
  ...(request.workingAt !== undefined && !unavailable && !paused ? { workingAt: request.workingAt } : {}),
74
92
  ...(participant?.capabilities?.runtime ? { runtime: participant.capabilities.runtime } : {}),
93
+ ...(!hasRunning && request.eventId === next?.eventId ? { stallAt: Math.max(request.at, view.room.turnChangedAt ?? 0) + ACK_TIMEOUT_MS } : {}),
75
94
  expiresAt: request.turnExpiresAt ?? null
76
95
  };
77
96
  })
@@ -169,102 +188,112 @@ export class TurnCoordinator {
169
188
  await this.change(view, actor, [{ ...request, workingAt: this.now() }], 'working');
170
189
  }
171
190
  async renew(roomId, credential, requestId, token) {
172
- const view = await this.view(roomId);
173
- const actor = authenticate(view, await hashCredential(credential), this.now());
174
- const participant = assertCanWrite(actor);
175
- assertRoomWritable(view, this.now());
176
- const request = await this.resolve(roomId, requestId, participant.participantId);
177
- if (!request || request.to !== participant.participantId) {
178
- throw new ProtocolError('unauthorized', 'this turn belongs to another participant');
179
- }
180
- if (!request.turnRequired) {
181
- throw new ProtocolError('turn_required', 'claim the speaking turn first');
182
- }
183
- assertTurn(request, token, this.now());
184
- const revision = view.room.turnRevision ?? 0;
185
- const next = { ...request, turnExpiresAt: this.now() + TURN_LEASE_MS, turnRevision: revision + 1 };
186
- await this.store.updateTurns({ ...view.room, turnRevision: revision + 1 }, [next], revision);
187
- return { state: 'granted', token, expiresAt: next.turnExpiresAt };
191
+ return retryRoomConflict(async () => {
192
+ const view = await this.view(roomId);
193
+ const actor = authenticate(view, await hashCredential(credential), this.now());
194
+ const participant = assertCanWrite(actor);
195
+ assertRoomWritable(view, this.now());
196
+ const request = await this.resolve(roomId, requestId, participant.participantId);
197
+ if (!request || request.to !== participant.participantId) {
198
+ throw new ProtocolError('unauthorized', 'this turn belongs to another participant');
199
+ }
200
+ if (!request.turnRequired) {
201
+ throw new ProtocolError('turn_required', 'claim the speaking turn first');
202
+ }
203
+ assertTurn(request, token, this.now());
204
+ const revision = view.room.turnRevision ?? 0;
205
+ const next = { ...request, turnExpiresAt: this.now() + TURN_LEASE_MS, turnRevision: revision + 1 };
206
+ await this.store.updateTurns({ ...view.room, turnRevision: revision + 1 }, [next], revision);
207
+ return { state: 'granted', token, expiresAt: next.turnExpiresAt };
208
+ });
188
209
  }
189
210
  async pass(roomId, credential, requestId, token) {
190
- const view = await this.view(roomId);
191
- const actor = authenticate(view, await hashCredential(credential), this.now());
192
- assertRoomWritable(view, this.now());
193
- const participant = assertCanWrite(actor);
194
- const request = await this.resolve(roomId, requestId, participant.participantId);
195
- if (!request || request.to !== participant.participantId) {
196
- throw new ProtocolError('unauthorized', 'this turn belongs to another participant');
197
- }
198
- if (request.turnStatus === 'passed') {
199
- return;
200
- }
201
- if (!request.turnRequired) {
202
- throw new ProtocolError('turn_required', 'claim the speaking turn first');
203
- }
204
- assertTurn(request, token, this.now());
205
- await this.change(view, actor, [{ ...request, requiresReply: false, turnStatus: 'passed', turnToken: '', turnExpiresAt: 0 }], 'passed');
211
+ return retryRoomConflict(async () => {
212
+ const view = await this.view(roomId);
213
+ const actor = authenticate(view, await hashCredential(credential), this.now());
214
+ assertRoomWritable(view, this.now());
215
+ const participant = assertCanWrite(actor);
216
+ const request = await this.resolve(roomId, requestId, participant.participantId);
217
+ if (!request || request.to !== participant.participantId) {
218
+ throw new ProtocolError('unauthorized', 'this turn belongs to another participant');
219
+ }
220
+ if (request.turnStatus === 'passed') {
221
+ return;
222
+ }
223
+ if (!request.turnRequired) {
224
+ throw new ProtocolError('turn_required', 'claim the speaking turn first');
225
+ }
226
+ assertTurn(request, token, this.now());
227
+ await this.change(view, actor, [{ ...request, requiresReply: false, turnStatus: 'passed', turnToken: '', turnExpiresAt: 0 }], 'passed');
228
+ });
206
229
  }
207
230
  async defer(roomId, credential, requestId, token, providerWait) {
208
- const view = await this.view(roomId);
209
- const actor = authenticate(view, await hashCredential(credential), this.now());
210
- const participant = assertCanWrite(actor);
211
- assertRoomWritable(view, this.now());
212
- const request = await this.resolve(roomId, requestId, participant.participantId);
213
- if (!request || request.to !== participant.participantId) {
214
- throw new ProtocolError('unauthorized', 'this request belongs to another participant');
215
- }
216
- if (request.providerWait) {
217
- return;
218
- }
219
- if (!request.turnRequired || request.turnStatus !== 'running' || !token || request.turnToken !== token) {
220
- throw new ProtocolError('turn_required', 'only the receiver holding this speaking turn may defer it');
221
- }
222
- const next = { ...request, providerWait, action: 'provider_wait', actionAt: this.now(), actionReason: providerWait.displayMessage, turnToken: '', turnExpiresAt: 0 };
223
- delete next.workingAt;
224
- delete next.turnStatus;
225
- delete next.turnClaimId;
226
- await this.change(view, actor, [next], 'deferred', view.room.turnMode ?? 'sequential', providerWait.displayMessage);
231
+ return retryRoomConflict(async () => {
232
+ const view = await this.view(roomId);
233
+ const actor = authenticate(view, await hashCredential(credential), this.now());
234
+ const participant = assertCanWrite(actor);
235
+ assertRoomWritable(view, this.now());
236
+ const request = await this.resolve(roomId, requestId, participant.participantId);
237
+ if (!request || request.to !== participant.participantId) {
238
+ throw new ProtocolError('unauthorized', 'this request belongs to another participant');
239
+ }
240
+ if (request.providerWait) {
241
+ return;
242
+ }
243
+ if (!request.turnRequired || request.turnStatus !== 'running' || !token || request.turnToken !== token) {
244
+ throw new ProtocolError('turn_required', 'only the receiver holding this speaking turn may defer it');
245
+ }
246
+ const next = { ...request, providerWait, action: 'provider_wait', actionAt: this.now(), actionReason: providerWait.displayMessage, turnToken: '', turnExpiresAt: 0 };
247
+ delete next.workingAt;
248
+ delete next.turnStatus;
249
+ delete next.turnClaimId;
250
+ await this.change(view, actor, [next], 'deferred', view.room.turnMode ?? 'sequential', providerWait.displayMessage);
251
+ });
227
252
  }
228
253
  async resume(roomId, credential, requestId) {
229
- const view = await this.view(roomId);
230
- const actor = authenticate(view, await hashCredential(credential), this.now());
231
- const participant = assertCanWrite(actor);
232
- assertRoomWritable(view, this.now());
233
- const request = await this.resolve(roomId, requestId, participant.participantId);
234
- if (!request || request.to !== participant.participantId) {
235
- throw new ProtocolError('unauthorized', 'this request belongs to another participant');
236
- }
237
- if (!request.providerWait) {
238
- return request;
239
- }
240
- if (!request.requiresReply || request.responseEventId || request.resolution || request.recoveredByEventId) {
241
- throw new ProtocolError('invalid_request', 'this request is no longer actionable');
242
- }
243
- if (view.controls.find((control) => control.targetParticipantId === participant.participantId)?.paused) {
244
- throw new ProtocolError('invalid_request', 'provider retry is held while this participant is paused');
245
- }
246
- const next = { ...request, attempt: (request.attempt ?? 1) + 1 };
247
- delete next.providerWait;
248
- delete next.action;
249
- delete next.actionAt;
250
- delete next.actionReason;
251
- delete next.turnStatus;
252
- delete next.turnToken;
253
- delete next.turnExpiresAt;
254
- delete next.turnClaimId;
255
- delete next.workingAt;
256
- await this.change(view, actor, [next], 'resumed', view.room.turnMode ?? 'sequential', 'Provider capacity retry started.');
257
- return next;
254
+ return retryRoomConflict(async () => {
255
+ const view = await this.view(roomId);
256
+ const actor = authenticate(view, await hashCredential(credential), this.now());
257
+ const participant = assertCanWrite(actor);
258
+ assertRoomWritable(view, this.now());
259
+ const request = await this.resolve(roomId, requestId, participant.participantId);
260
+ if (!request || request.to !== participant.participantId) {
261
+ throw new ProtocolError('unauthorized', 'this request belongs to another participant');
262
+ }
263
+ if (!request.providerWait) {
264
+ return request;
265
+ }
266
+ if (!request.requiresReply || request.responseEventId || request.resolution || request.recoveredByEventId) {
267
+ throw new ProtocolError('invalid_request', 'this request is no longer actionable');
268
+ }
269
+ if (view.controls.find((control) => control.targetParticipantId === participant.participantId)?.paused) {
270
+ throw new ProtocolError('invalid_request', 'provider retry is held while this participant is paused');
271
+ }
272
+ const next = { ...request, attempt: (request.attempt ?? 1) + 1 };
273
+ delete next.providerWait;
274
+ delete next.action;
275
+ delete next.actionAt;
276
+ delete next.actionReason;
277
+ delete next.turnStatus;
278
+ delete next.turnToken;
279
+ delete next.turnExpiresAt;
280
+ delete next.turnClaimId;
281
+ delete next.workingAt;
282
+ await this.change(view, actor, [next], 'resumed', view.room.turnMode ?? 'sequential', 'Provider capacity retry started.');
283
+ return next;
284
+ });
258
285
  }
259
286
  async mode(roomId, credential, mode) {
260
- const view = await this.view(roomId);
261
- const actor = authenticate(view, await hashCredential(credential), this.now());
262
- assertController(actor);
263
- if (mode === 'sequential' && (await this.pending(roomId)).filter((request) => request.turnStatus === 'running').length > 1) {
264
- throw new ProtocolError('turn_conflict', 'wait for the active parallel turns to finish or cancel them first');
265
- }
266
- await this.change(view, actor, [], 'mode', mode);
267
- return this.status(roomId, credential);
287
+ return retryRoomConflict(async () => {
288
+ const view = await this.view(roomId);
289
+ const actor = authenticate(view, await hashCredential(credential), this.now());
290
+ assertController(actor);
291
+ if (mode === 'sequential' && (await this.pending(roomId)).filter((request) => request.turnStatus === 'running').length > 1) {
292
+ throw new ProtocolError('turn_conflict', 'wait for the active parallel turns to finish or cancel them first');
293
+ }
294
+ await this.change(view, actor, [], 'mode', mode);
295
+ return this.status(roomId, credential);
296
+ });
268
297
  }
269
298
  /**
270
299
  * Fences the turns a participant is running right now, as a skip: its late reply,
@@ -272,34 +301,38 @@ export class TurnCoordinator {
272
301
  * Queued requests are left alone; a pause holds them. Returns the fenced request ids.
273
302
  */
274
303
  async fenceRunning(roomId, credential, participantId) {
275
- const view = await this.view(roomId);
276
- const actor = authenticate(view, await hashCredential(credential), this.now());
277
- assertPermitted(view, actor, 'pause');
278
- const target = view.participants.find((participant) => participant.participantId === participantId);
279
- if (target) {
280
- assertMayTarget(actor, target);
281
- }
282
- const running = (await this.pending(roomId)).filter((request) => request.to === participantId && request.turnStatus === 'running');
283
- if (running.length) {
284
- await this.change(view, actor, running.map((request) => ({ ...request, requiresReply: false, turnStatus: 'skipped', turnToken: '', turnExpiresAt: 0 })), 'skipped');
285
- }
286
- return running.map((request) => request.eventId);
304
+ return retryRoomConflict(async () => {
305
+ const view = await this.view(roomId);
306
+ const actor = authenticate(view, await hashCredential(credential), this.now());
307
+ assertPermitted(view, actor, 'pause');
308
+ const target = view.participants.find((participant) => participant.participantId === participantId);
309
+ if (target) {
310
+ assertMayTarget(actor, target);
311
+ }
312
+ const running = (await this.pending(roomId)).filter((request) => request.to === participantId && request.turnStatus === 'running');
313
+ if (running.length) {
314
+ await this.change(view, actor, running.map((request) => ({ ...request, requiresReply: false, turnStatus: 'skipped', turnToken: '', turnExpiresAt: 0 })), 'skipped');
315
+ }
316
+ return running.map((request) => request.eventId);
317
+ });
287
318
  }
288
319
  async control(roomId, credential, action) {
289
- const view = await this.view(roomId);
290
- const actor = authenticate(view, await hashCredential(credential), this.now());
291
- assertPermitted(view, actor, 'turns');
292
- const pending = (await this.store.messageRequests(roomId, 0, 1000)).requests;
293
- const chosen = action.requestId
294
- ? pending.find((request) => request.eventId === action.requestId || request.conversationId === action.requestId)
295
- : action.participantId ? pending.find((request) => request.to === action.participantId) : pending.find((request) => request.turnStatus === 'running') ?? pending.find((request) => !request.failureAt && this.eligible(view, request)) ?? pending.find((request) => request.turnRequired);
296
- if (!chosen) {
297
- throw new ProtocolError('invalid_request', 'no matching pending turn');
298
- }
299
- const selected = action.action === 'cancel' && chosen.conversationId ? pending.filter((request) => request.conversationId === chosen.conversationId) : [chosen];
300
- const turnStatus = action.action === 'skip' ? 'skipped' : 'cancelled';
301
- await this.change(view, actor, selected.map((request) => ({ ...request, requiresReply: false, turnStatus, turnToken: '', turnExpiresAt: 0 })), turnStatus);
302
- return this.status(roomId, credential);
320
+ return retryRoomConflict(async () => {
321
+ const view = await this.view(roomId);
322
+ const actor = authenticate(view, await hashCredential(credential), this.now());
323
+ assertPermitted(view, actor, 'turns');
324
+ const pending = await this.requests(roomId);
325
+ const chosen = action.requestId
326
+ ? pending.find((request) => request.eventId === action.requestId || request.conversationId === action.requestId)
327
+ : action.participantId ? pending.find((request) => request.to === action.participantId) : pending.find((request) => request.turnStatus === 'running') ?? pending.find((request) => !request.failureAt && this.eligible(view, request)) ?? pending.find((request) => request.turnRequired);
328
+ if (!chosen) {
329
+ throw new ProtocolError('invalid_request', 'no matching pending turn');
330
+ }
331
+ const selected = action.action === 'cancel' && chosen.conversationId ? pending.filter((request) => request.conversationId === chosen.conversationId) : [chosen];
332
+ const turnStatus = action.action === 'skip' ? 'skipped' : 'cancelled';
333
+ await this.change(view, actor, selected.map((request) => ({ ...request, requiresReply: false, turnStatus, turnToken: '', turnExpiresAt: 0 })), turnStatus);
334
+ return this.status(roomId, credential);
335
+ });
303
336
  }
304
337
  }
305
338
  //# sourceMappingURL=turns.js.map
package/dist/turns.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"turns.js","sourceRoot":"","sources":["../src/turns.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"turns.js","sourceRoot":"","sources":["../src/turns.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pairlobby/server-core",
3
- "version": "0.31.0",
3
+ "version": "0.33.0",
4
4
  "description": "PairLobby server-core: part of the PairLobby room protocol and relay",
5
5
  "license": "Elastic-2.0",
6
6
  "type": "module",
@@ -30,7 +30,8 @@
30
30
  "access": "public"
31
31
  },
32
32
  "dependencies": {
33
- "@pairlobby/protocol": "0.31.0",
34
- "@pairlobby/room-core": "0.31.0"
33
+ "@noble/hashes": "2.4.0",
34
+ "@pairlobby/protocol": "0.33.0",
35
+ "@pairlobby/room-core": "0.33.0"
35
36
  }
36
37
  }
@@ -1,3 +0,0 @@
1
- /** Upgrade only retained legacy events; no synthetic acknowledgements or replies. */
2
- export declare const REQUEST_BACKFILL_SQL = "\nINSERT OR IGNORE INTO message_requests(event_id,room_id,seq,received_at,response_event_id,requires_reply,body)\nSELECT json_extract(body,'$.eventId'),room_id,seq,NULL,NULL,\n CASE WHEN json_extract(body,'$.replyTo') IS NULL THEN 1 ELSE 0 END,\n json_object('roomId',room_id,'eventId',json_extract(body,'$.eventId'),'seq',seq,\n 'from',json_extract(body,'$.senderId'),'to',json_extract(body,'$.recipientId'),\n 'text',json_extract(body,'$.payload.text'),'at',json_extract(body,'$.at'),\n 'requiresReply',json(CASE WHEN json_extract(body,'$.replyTo') IS NULL THEN 'true' ELSE 'false' END),\n 'receivedAt',NULL,'responseEventId',NULL,'respondedAt',NULL,'progressAt',NULL)\nFROM events WHERE json_extract(body,'$.type')='message'\nAND json_extract(body,'$.senderId') IS NOT NULL AND json_extract(body,'$.recipientId') IS NOT NULL;\nUPDATE message_requests AS r SET received_at=(\n SELECT min(json_extract(e.body,'$.at')) FROM events e WHERE e.room_id=r.room_id\n AND json_extract(e.body,'$.type')='message.received'\n AND json_extract(e.body,'$.senderId')=json_extract(r.body,'$.to')\n AND json_extract(e.body,'$.payload.eventId')=r.event_id\n);\nUPDATE message_requests SET body=json_set(body,'$.receivedAt',received_at);\nUPDATE message_requests AS r SET response_event_id=(\n SELECT json_extract(e.body,'$.eventId') FROM events e WHERE e.room_id=r.room_id\n AND json_extract(e.body,'$.type')='message'\n AND json_extract(e.body,'$.replyTo')=r.event_id\n AND json_extract(e.body,'$.senderId')=json_extract(r.body,'$.to')\n AND json_extract(e.body,'$.recipientId')=json_extract(r.body,'$.from')\n AND coalesce(json_extract(e.body,'$.payload.responseStage'),'final')='final'\n ORDER BY e.seq LIMIT 1\n);\nUPDATE message_requests AS r SET body=json_set(body,'$.responseEventId',response_event_id,'$.respondedAt',(\n SELECT json_extract(e.body,'$.at') FROM events e WHERE e.room_id=r.room_id AND json_extract(e.body,'$.eventId')=r.response_event_id LIMIT 1\n));\nINSERT OR REPLACE INTO meta(key,value) VALUES('message_requests_v1','complete');\n";
3
- //# sourceMappingURL=request-backfill.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"request-backfill.d.ts","sourceRoot":"","sources":["../src/request-backfill.ts"],"names":[],"mappings":"AAAA,qFAAqF;AACrF,eAAO,MAAM,oBAAoB,slEA+BhC,CAAC"}
@@ -1,34 +0,0 @@
1
- /** Upgrade only retained legacy events; no synthetic acknowledgements or replies. */
2
- export const REQUEST_BACKFILL_SQL = `
3
- INSERT OR IGNORE INTO message_requests(event_id,room_id,seq,received_at,response_event_id,requires_reply,body)
4
- SELECT json_extract(body,'$.eventId'),room_id,seq,NULL,NULL,
5
- CASE WHEN json_extract(body,'$.replyTo') IS NULL THEN 1 ELSE 0 END,
6
- json_object('roomId',room_id,'eventId',json_extract(body,'$.eventId'),'seq',seq,
7
- 'from',json_extract(body,'$.senderId'),'to',json_extract(body,'$.recipientId'),
8
- 'text',json_extract(body,'$.payload.text'),'at',json_extract(body,'$.at'),
9
- 'requiresReply',json(CASE WHEN json_extract(body,'$.replyTo') IS NULL THEN 'true' ELSE 'false' END),
10
- 'receivedAt',NULL,'responseEventId',NULL,'respondedAt',NULL,'progressAt',NULL)
11
- FROM events WHERE json_extract(body,'$.type')='message'
12
- AND json_extract(body,'$.senderId') IS NOT NULL AND json_extract(body,'$.recipientId') IS NOT NULL;
13
- UPDATE message_requests AS r SET received_at=(
14
- SELECT min(json_extract(e.body,'$.at')) FROM events e WHERE e.room_id=r.room_id
15
- AND json_extract(e.body,'$.type')='message.received'
16
- AND json_extract(e.body,'$.senderId')=json_extract(r.body,'$.to')
17
- AND json_extract(e.body,'$.payload.eventId')=r.event_id
18
- );
19
- UPDATE message_requests SET body=json_set(body,'$.receivedAt',received_at);
20
- UPDATE message_requests AS r SET response_event_id=(
21
- SELECT json_extract(e.body,'$.eventId') FROM events e WHERE e.room_id=r.room_id
22
- AND json_extract(e.body,'$.type')='message'
23
- AND json_extract(e.body,'$.replyTo')=r.event_id
24
- AND json_extract(e.body,'$.senderId')=json_extract(r.body,'$.to')
25
- AND json_extract(e.body,'$.recipientId')=json_extract(r.body,'$.from')
26
- AND coalesce(json_extract(e.body,'$.payload.responseStage'),'final')='final'
27
- ORDER BY e.seq LIMIT 1
28
- );
29
- UPDATE message_requests AS r SET body=json_set(body,'$.responseEventId',response_event_id,'$.respondedAt',(
30
- SELECT json_extract(e.body,'$.at') FROM events e WHERE e.room_id=r.room_id AND json_extract(e.body,'$.eventId')=r.response_event_id LIMIT 1
31
- ));
32
- INSERT OR REPLACE INTO meta(key,value) VALUES('message_requests_v1','complete');
33
- `;
34
- //# sourceMappingURL=request-backfill.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"request-backfill.js","sourceRoot":"","sources":["../src/request-backfill.ts"],"names":[],"mappings":"AAAA,qFAAqF;AACrF,MAAM,CAAC,MAAM,oBAAoB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+BnC,CAAC"}