Commit 95178cf
committed
fix(cloud): #96 review, round two — another window's sign-in; a cancelled request starts no renewal
1. A sign-in in ANOTHER window could still be replayed into. Round one bound a
request to the host's sessionGeneration, which counts the sessions THIS
window has been through. The stored tokens belong to every window: one that
signs in as someone else changes them without moving this window's count. A
401 arriving after that found "a different token for the same gateway", and
the old account's prompt went out again on the new account's token — an
inline edit in flight, or the nodes still to come of a Sketch run.
What every window can see, and a renewal does not change, is who the token
says it is for. providers/session.js gains jwtSubject: `sub`, read the way
`exp` already is, not verified. A different stored token is a renewal only if
it names the subject the refused one named — checked where the count is,
before refreshing and again before re-sending. Tokens that name no subject
cannot be told apart this way and are left to the count; one that stops, or
starts, naming a subject is not taken for the same account. The same-account
case still works across windows: a token another window renewed is used, with
no second refresh of it.
2. A request cancelled while the stored session was being read still started a
renewal. Cancel, Stop or the next keystroke could land during that read;
recovery went on to start the refresh before it looked at the signal, and for
ghost text used up the minute's one renewal. The signal is now checked as soon
as the read returns: a request nobody is waiting for starts nothing.
Verified: 48 suites, 924 cases, 0 failing — on develop, which this branch now
contains (d056588: #92 and #95 have merged). session.test.js goes from 15 to 19
cases, authRetry.test.js from 39 to 45, authRetryCallers.test.js from 72 to 76:
another window signing in as someone else while an inline edit is out, and
half-way through a Sketch run, against the shipped host code; another window
renewing the same session; a keystroke landing during the read. On the module as
last pushed, the new cases fail and the rest pass. 55 breakages — each rule
removed, each caller reverted, each option dropped — fail a case each.
node --check is clean, and tsc --checkJs reports nothing new. Not run in the
editor. The subject check rests on the access token being a JWT that carries
`sub`, as the session tests model it; the backend is not in this repository.1 parent 125f1ae commit 95178cf
6 files changed
Lines changed: 238 additions & 25 deletions
File tree
- extensions/levelcode-ai
- providers
- test
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
671 | 671 | | |
672 | 672 | | |
673 | 673 | | |
674 | | - | |
| 674 | + | |
| 675 | + | |
675 | 676 | | |
676 | 677 | | |
677 | 678 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
20 | 20 | | |
21 | 21 | | |
22 | 22 | | |
23 | | - | |
| 23 | + | |
| 24 | + | |
24 | 25 | | |
25 | 26 | | |
26 | 27 | | |
| |||
41 | 42 | | |
42 | 43 | | |
43 | 44 | | |
44 | | - | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
45 | 49 | | |
46 | 50 | | |
47 | 51 | | |
| |||
50 | 54 | | |
51 | 55 | | |
52 | 56 | | |
53 | | - | |
| 57 | + | |
54 | 58 | | |
55 | 59 | | |
56 | 60 | | |
| |||
138 | 142 | | |
139 | 143 | | |
140 | 144 | | |
141 | | - | |
142 | | - | |
143 | | - | |
| 145 | + | |
| 146 | + | |
| 147 | + | |
| 148 | + | |
| 149 | + | |
144 | 150 | | |
145 | 151 | | |
146 | 152 | | |
| |||
153 | 159 | | |
154 | 160 | | |
155 | 161 | | |
156 | | - | |
| 162 | + | |
| 163 | + | |
| 164 | + | |
| 165 | + | |
| 166 | + | |
| 167 | + | |
157 | 168 | | |
158 | 169 | | |
159 | 170 | | |
| |||
165 | 176 | | |
166 | 177 | | |
167 | 178 | | |
| 179 | + | |
| 180 | + | |
| 181 | + | |
168 | 182 | | |
169 | 183 | | |
170 | 184 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
26 | 26 | | |
27 | 27 | | |
28 | 28 | | |
29 | | - | |
30 | | - | |
31 | | - | |
| 29 | + | |
32 | 30 | | |
33 | | - | |
| 31 | + | |
34 | 32 | | |
35 | | - | |
| 33 | + | |
36 | 34 | | |
37 | 35 | | |
38 | 36 | | |
39 | 37 | | |
40 | 38 | | |
41 | | - | |
42 | | - | |
| 39 | + | |
43 | 40 | | |
44 | 41 | | |
45 | 42 | | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
46 | 74 | | |
47 | 75 | | |
48 | 76 | | |
| |||
97 | 125 | | |
98 | 126 | | |
99 | 127 | | |
100 | | - | |
| 128 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
13 | 13 | | |
14 | 14 | | |
15 | 15 | | |
16 | | - | |
| 16 | + | |
17 | 17 | | |
18 | 18 | | |
19 | 19 | | |
| |||
42 | 42 | | |
43 | 43 | | |
44 | 44 | | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
45 | 54 | | |
46 | 55 | | |
47 | 56 | | |
| |||
365 | 374 | | |
366 | 375 | | |
367 | 376 | | |
| 377 | + | |
| 378 | + | |
| 379 | + | |
| 380 | + | |
| 381 | + | |
| 382 | + | |
| 383 | + | |
| 384 | + | |
| 385 | + | |
| 386 | + | |
| 387 | + | |
| 388 | + | |
| 389 | + | |
| 390 | + | |
| 391 | + | |
| 392 | + | |
| 393 | + | |
| 394 | + | |
| 395 | + | |
| 396 | + | |
| 397 | + | |
| 398 | + | |
| 399 | + | |
| 400 | + | |
| 401 | + | |
| 402 | + | |
| 403 | + | |
| 404 | + | |
| 405 | + | |
| 406 | + | |
| 407 | + | |
| 408 | + | |
| 409 | + | |
| 410 | + | |
| 411 | + | |
| 412 | + | |
| 413 | + | |
| 414 | + | |
| 415 | + | |
| 416 | + | |
| 417 | + | |
| 418 | + | |
| 419 | + | |
| 420 | + | |
| 421 | + | |
| 422 | + | |
| 423 | + | |
368 | 424 | | |
369 | 425 | | |
370 | 426 | | |
| |||
416 | 472 | | |
417 | 473 | | |
418 | 474 | | |
| 475 | + | |
| 476 | + | |
| 477 | + | |
| 478 | + | |
| 479 | + | |
| 480 | + | |
| 481 | + | |
| 482 | + | |
| 483 | + | |
| 484 | + | |
| 485 | + | |
| 486 | + | |
419 | 487 | | |
420 | 488 | | |
421 | 489 | | |
| |||
0 commit comments