(sessionID: string, options?: { force?: boolean })
| 229 | } |
| 230 | |
| 231 | const resolve = (sessionID: string, options?: { force?: boolean }) => { |
| 232 | const cached = data.info[sessionID] |
| 233 | if (cached && !options?.force) return Promise.resolve(cached) |
| 234 | const pending = requests.get(sessionID) |
| 235 | if (pending) return pending |
| 236 | const active = generation(sessionID) |
| 237 | const request = client.session.get({ sessionID }).then((result) => { |
| 238 | if (!result.data) throw new Error(`Session not found: ${sessionID}`) |
| 239 | if (generations.get(sessionID) !== active) return result.data |
| 240 | return remember(result.data) |
| 241 | }) |
| 242 | requests.set(sessionID, request) |
| 243 | const cleanup = () => { |
| 244 | if (requests.get(sessionID) === request) requests.delete(sessionID) |
| 245 | if ( |
| 246 | generations.get(sessionID) === active && |
| 247 | !data.info[sessionID] && |
| 248 | !requests.has(sessionID) && |
| 249 | !messageLoads.has(sessionID) && |
| 250 | !inflight.has(sessionID) && |
| 251 | !inflightDiff.has(sessionID) && |
| 252 | !inflightTodo.has(sessionID) |
| 253 | ) |
| 254 | generations.delete(sessionID) |
| 255 | } |
| 256 | void request.then(cleanup, cleanup) |
| 257 | return request |
| 258 | } |
| 259 | |
| 260 | const peekLineage = (sessionID: string) => { |
| 261 | const session = data.info[sessionID] |
no test coverage detected