@moqtap/codec 0.2.2 → 0.3.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.
- package/LICENSE +21 -21
- package/README.md +100 -99
- package/dist/{chunk-RZHAPEXO.js → chunk-2A57DRXV.js} +36 -10
- package/dist/{chunk-PJRA2TQ5.js → chunk-2UTVXWFF.js} +388 -254
- package/dist/{chunk-IV2H5CFI.cjs → chunk-3XKO6PCR.cjs} +461 -322
- package/dist/{chunk-RVJAGE4S.cjs → chunk-4BDEU3D4.cjs} +415 -304
- package/dist/{chunk-XUUCOLWU.cjs → chunk-4HBKHNU2.cjs} +374 -329
- package/dist/{chunk-4RIXXEII.js → chunk-4IVZZOY3.js} +451 -312
- package/dist/{chunk-ZSPO2GF2.cjs → chunk-5O764MBD.cjs} +1320 -842
- package/dist/chunk-7KBAWOBA.js +1212 -0
- package/dist/{chunk-JSQM2MG3.js → chunk-7QOPNSDF.js} +44 -12
- package/dist/{chunk-SYHW3FLI.cjs → chunk-7RE6KSIY.cjs} +28 -8
- package/dist/{chunk-YG5KJESI.js → chunk-AY6IAHUM.js} +28 -8
- package/dist/{chunk-EFM5T7OM.js → chunk-BLQDWOSG.js} +36 -10
- package/dist/{chunk-KFTCU2P6.js → chunk-C6KUWLQC.js} +0 -3
- package/dist/{chunk-UYXTY6ZQ.cjs → chunk-E65QKRSN.cjs} +20 -12
- package/dist/{chunk-BISI45MN.cjs → chunk-EAHE3IOG.cjs} +44 -12
- package/dist/{chunk-IV2HRJVT.js → chunk-GCBFHZW6.js} +405 -294
- package/dist/{chunk-GXEW4COZ.cjs → chunk-H5NSL4MO.cjs} +36 -10
- package/dist/chunk-HZHSO7EW.cjs +1212 -0
- package/dist/{chunk-BPNL5YFQ.cjs → chunk-IILNSDEQ.cjs} +74 -46
- package/dist/{chunk-4XYGE53S.cjs → chunk-J3XCPBW3.cjs} +36 -10
- package/dist/{chunk-6AEHWULA.cjs → chunk-JKOEJZ5B.cjs} +28 -8
- package/dist/{chunk-FWISIR26.cjs → chunk-JL3NEW3O.cjs} +47 -4
- package/dist/{chunk-G7GI7LJA.js → chunk-LORZMJJB.js} +36 -10
- package/dist/{chunk-DUBCL3WF.cjs → chunk-LV5C6MEC.cjs} +36 -10
- package/dist/{chunk-ENURAVHI.cjs → chunk-MYXAD5JC.cjs} +44 -12
- package/dist/{chunk-FXZ2MYKJ.js → chunk-MZ7HUCGJ.js} +20 -12
- package/dist/{chunk-RWQ43Z4F.cjs → chunk-MZ7VU52O.cjs} +0 -3
- package/dist/{chunk-G26SJ6XS.cjs → chunk-OKG2HT25.cjs} +1193 -928
- package/dist/{chunk-IBVM4DMJ.cjs → chunk-PKEOQSSZ.cjs} +374 -329
- package/dist/{chunk-LH4NTURO.js → chunk-Q46ZURKX.js} +989 -602
- package/dist/{chunk-UR6JKS56.js → chunk-Q7IGWV3P.js} +41 -9
- package/dist/{chunk-ST24APEO.js → chunk-RW4UG7CN.js} +751 -682
- package/dist/{chunk-DWK5ZQZ4.js → chunk-RZTLQAKF.js} +28 -8
- package/dist/{chunk-UNS34PTA.cjs → chunk-S6IPIN66.cjs} +44 -12
- package/dist/{chunk-K4OLITS2.cjs → chunk-SDWRXXOO.cjs} +401 -267
- package/dist/{chunk-CXDHOMHG.js → chunk-SHMA4PBY.js} +476 -431
- package/dist/{chunk-U2B3B42P.js → chunk-U3ZVLT5L.js} +1176 -540
- package/dist/{chunk-HSVYF6XX.cjs → chunk-UJU63EFY.cjs} +1524 -1137
- package/dist/{chunk-A27S7HW7.js → chunk-VOU7PNHI.js} +47 -4
- package/dist/{chunk-E6E3NQYU.js → chunk-WRHGCVYN.js} +44 -12
- package/dist/chunk-XNWYLVGU.cjs +1854 -0
- package/dist/{chunk-NUX5BHWO.js → chunk-XS77RBY7.js} +1160 -895
- package/dist/{chunk-4YJANAXU.cjs → chunk-XZE5R57R.cjs} +829 -760
- package/dist/{chunk-NGVE2RZT.js → chunk-Y6KCSM3V.js} +476 -431
- package/dist/{chunk-TLYNOOQP.cjs → chunk-YTPZZI2M.cjs} +41 -9
- package/dist/{chunk-7DUBLRXC.js → chunk-YWRCSQBA.js} +44 -12
- package/dist/{chunk-MFAP7R6L.js → chunk-Z3VKP3PJ.js} +70 -42
- package/dist/{chunk-ZBKE2QRQ.js → chunk-Z6U26IRI.js} +1107 -629
- package/dist/codec-25u4_1HS.d.ts +35 -0
- package/dist/codec-3Ppy_5Gd.d.ts +23 -0
- package/dist/codec-BB0U8MF2.d.cts +34 -0
- package/dist/codec-BHHfBTnV.d.ts +34 -0
- package/dist/codec-BN6jk0Td.d.cts +30 -0
- package/dist/codec-BU0gaSZm.d.ts +29 -0
- package/dist/codec-C-Yk2RNa.d.ts +30 -0
- package/dist/codec-CFWQY9Lj.d.cts +18 -0
- package/dist/codec-COy4uuPO.d.cts +29 -0
- package/dist/codec-CewFCsEy.d.ts +18 -0
- package/dist/codec-Ck7ZwFF1.d.cts +35 -0
- package/dist/codec-D2QVSH9D.d.ts +30 -0
- package/dist/codec-DDUBJGn0.d.cts +23 -0
- package/dist/codec-DNfml-se.d.ts +27 -0
- package/dist/codec-DoOGjjDq.d.cts +29 -0
- package/dist/codec-J7ekOSMc.d.ts +29 -0
- package/dist/codec-R9TJCq-E.d.cts +31 -0
- package/dist/codec-ZwV-Njt6.d.ts +23 -0
- package/dist/codec-j819z_hL.d.cts +23 -0
- package/dist/codec-w8z2j_uo.d.cts +27 -0
- package/dist/codec-wtt6WF1K.d.ts +31 -0
- package/dist/codec-z6_2PSzi.d.cts +30 -0
- package/dist/draft10-session.cjs +2 -2
- package/dist/draft10-session.d.cts +6 -6
- package/dist/draft10-session.d.ts +6 -6
- package/dist/draft10-session.js +1 -1
- package/dist/draft10.cjs +8 -4
- package/dist/draft10.d.cts +23 -11
- package/dist/draft10.d.ts +23 -11
- package/dist/draft10.js +16 -12
- package/dist/draft11-session.cjs +2 -2
- package/dist/draft11-session.d.cts +6 -6
- package/dist/draft11-session.d.ts +6 -6
- package/dist/draft11-session.js +1 -1
- package/dist/draft11.cjs +8 -4
- package/dist/draft11.d.cts +21 -11
- package/dist/draft11.d.ts +21 -11
- package/dist/draft11.js +16 -12
- package/dist/draft12-session.cjs +2 -2
- package/dist/draft12-session.d.cts +6 -6
- package/dist/draft12-session.d.ts +6 -6
- package/dist/draft12-session.js +1 -1
- package/dist/draft12.cjs +8 -4
- package/dist/draft12.d.cts +23 -13
- package/dist/draft12.d.ts +23 -13
- package/dist/draft12.js +16 -12
- package/dist/draft13-session.cjs +2 -2
- package/dist/draft13-session.d.cts +6 -6
- package/dist/draft13-session.d.ts +6 -6
- package/dist/draft13-session.js +1 -1
- package/dist/draft13.cjs +8 -4
- package/dist/draft13.d.cts +23 -13
- package/dist/draft13.d.ts +23 -13
- package/dist/draft13.js +16 -12
- package/dist/draft14-session.cjs +2 -2
- package/dist/draft14-session.d.cts +6 -6
- package/dist/draft14-session.d.ts +6 -6
- package/dist/draft14-session.js +1 -1
- package/dist/draft14.cjs +14 -4
- package/dist/draft14.d.cts +67 -11
- package/dist/draft14.d.ts +67 -11
- package/dist/draft14.js +13 -3
- package/dist/draft15-session.cjs +2 -2
- package/dist/draft15-session.d.cts +6 -6
- package/dist/draft15-session.d.ts +6 -6
- package/dist/draft15-session.js +1 -1
- package/dist/draft15.cjs +8 -4
- package/dist/draft15.d.cts +56 -11
- package/dist/draft15.d.ts +56 -11
- package/dist/draft15.js +16 -12
- package/dist/draft16-session.cjs +2 -2
- package/dist/draft16-session.d.cts +6 -6
- package/dist/draft16-session.d.ts +6 -6
- package/dist/draft16-session.js +1 -1
- package/dist/draft16.cjs +8 -4
- package/dist/draft16.d.cts +45 -11
- package/dist/draft16.d.ts +45 -11
- package/dist/draft16.js +16 -12
- package/dist/draft17-session.cjs +2 -2
- package/dist/draft17-session.d.cts +7 -7
- package/dist/draft17-session.d.ts +7 -7
- package/dist/draft17-session.js +1 -1
- package/dist/draft17.cjs +8 -4
- package/dist/draft17.d.cts +21 -8
- package/dist/draft17.d.ts +21 -8
- package/dist/draft17.js +16 -12
- package/dist/draft7-session.cjs +3 -3
- package/dist/draft7-session.d.cts +6 -5
- package/dist/draft7-session.d.ts +6 -5
- package/dist/draft7-session.js +2 -2
- package/dist/draft7.cjs +83 -14
- package/dist/draft7.d.cts +59 -64
- package/dist/draft7.d.ts +59 -64
- package/dist/draft7.js +89 -20
- package/dist/draft8-session.cjs +2 -2
- package/dist/draft8-session.d.cts +6 -6
- package/dist/draft8-session.d.ts +6 -6
- package/dist/draft8-session.js +1 -1
- package/dist/draft8.cjs +8 -4
- package/dist/draft8.d.cts +23 -11
- package/dist/draft8.d.ts +23 -11
- package/dist/draft8.js +7 -3
- package/dist/draft9-session.cjs +2 -2
- package/dist/draft9-session.d.cts +6 -6
- package/dist/draft9-session.d.ts +6 -6
- package/dist/draft9-session.js +1 -1
- package/dist/draft9.cjs +8 -4
- package/dist/draft9.d.cts +23 -11
- package/dist/draft9.d.ts +23 -11
- package/dist/draft9.js +7 -3
- package/dist/index.cjs +52 -73
- package/dist/index.d.cts +41 -60
- package/dist/index.d.ts +55 -82
- package/dist/index.js +89 -93
- package/dist/{session-types-CJIFbTPd.d.ts → session-types-C7UONex5.d.cts} +28 -27
- package/dist/{session-types-Cbq8IGCP.d.cts → session-types-X-IYEGoG.d.ts} +28 -27
- package/dist/session.cjs +47 -14
- package/dist/session.d.cts +28 -9
- package/dist/session.d.ts +32 -9
- package/dist/session.js +59 -32
- package/dist/{types-4VxSL2Ho.d.ts → types--Q7_DcvP.d.cts} +49 -39
- package/dist/{types-4VxSL2Ho.d.cts → types--Q7_DcvP.d.ts} +49 -39
- package/dist/{types-Cw4WE9dh.d.ts → types-0IWbU9Z_.d.cts} +44 -36
- package/dist/{types-Cw4WE9dh.d.cts → types-0IWbU9Z_.d.ts} +44 -36
- package/dist/{types-D5gNQiDj.d.ts → types-B3g5G9KP.d.cts} +44 -36
- package/dist/{types-D5gNQiDj.d.cts → types-B3g5G9KP.d.ts} +44 -36
- package/dist/{types-B2afJZM-.d.cts → types-BFpFNM_m.d.cts} +60 -32
- package/dist/{types-B2afJZM-.d.ts → types-BFpFNM_m.d.ts} +60 -32
- package/dist/{types-ERexTpT8.d.ts → types-Br7fm2mf.d.cts} +51 -26
- package/dist/{types-ERexTpT8.d.cts → types-Br7fm2mf.d.ts} +51 -26
- package/dist/{types-Bg6QYNVt.d.cts → types-C2qKTRR_.d.cts} +55 -45
- package/dist/{types-Bg6QYNVt.d.ts → types-C2qKTRR_.d.ts} +55 -45
- package/dist/{types-BTFeKYCb.d.ts → types-DEaypVsD.d.cts} +133 -58
- package/dist/{types-BTFeKYCb.d.cts → types-DEaypVsD.d.ts} +133 -58
- package/dist/types-Dl4IaAHR.d.cts +282 -0
- package/dist/types-Dl4IaAHR.d.ts +282 -0
- package/dist/{types-C_1HrqBl.d.cts → types-DrQpTW1G.d.cts} +63 -50
- package/dist/{types-C_1HrqBl.d.ts → types-DrQpTW1G.d.ts} +63 -50
- package/dist/types-DuIO7cWK.d.cts +25 -0
- package/dist/types-DuIO7cWK.d.ts +25 -0
- package/dist/{types-DqCDFqgB.d.ts → types-DuxfOYiO.d.cts} +50 -31
- package/dist/{types-DqCDFqgB.d.cts → types-DuxfOYiO.d.ts} +50 -31
- package/dist/{types-r-CasCf1.d.cts → types-jV1yDDBA.d.cts} +43 -36
- package/dist/{types-r-CasCf1.d.ts → types-jV1yDDBA.d.ts} +43 -36
- package/package.json +15 -15
- package/src/core/buffer-reader.ts +69 -53
- package/src/core/buffer-writer.ts +55 -46
- package/src/core/errors.ts +1 -1
- package/src/core/hex.ts +21 -17
- package/src/core/session-types.ts +61 -59
- package/src/core/types.ts +18 -361
- package/src/drafts/draft07/codec.ts +1058 -933
- package/src/drafts/draft07/data-streams.ts +116 -116
- package/src/drafts/draft07/index.ts +124 -89
- package/src/drafts/draft07/messages.ts +76 -42
- package/src/drafts/draft07/rules.ts +107 -101
- package/src/drafts/draft07/session-fsm.ts +315 -287
- package/src/drafts/draft07/session.ts +8 -6
- package/src/drafts/draft07/types.ts +406 -72
- package/src/drafts/draft07/varint.ts +40 -12
- package/src/drafts/draft08/codec.ts +985 -944
- package/src/drafts/draft08/data-streams.ts +178 -174
- package/src/drafts/draft08/index.ts +10 -9
- package/src/drafts/draft08/messages.ts +59 -59
- package/src/drafts/draft08/rules.ts +73 -73
- package/src/drafts/draft08/session-fsm.ts +335 -303
- package/src/drafts/draft08/session.ts +6 -7
- package/src/drafts/draft08/types.ts +380 -384
- package/src/drafts/draft09/codec.ts +977 -936
- package/src/drafts/draft09/data-streams.ts +163 -159
- package/src/drafts/draft09/index.ts +10 -9
- package/src/drafts/draft09/messages.ts +59 -59
- package/src/drafts/draft09/rules.ts +73 -73
- package/src/drafts/draft09/session-fsm.ts +335 -303
- package/src/drafts/draft09/session.ts +6 -7
- package/src/drafts/draft09/types.ts +380 -384
- package/src/drafts/draft10/codec.ts +977 -936
- package/src/drafts/draft10/data-streams.ts +163 -159
- package/src/drafts/draft10/index.ts +10 -9
- package/src/drafts/draft10/messages.ts +59 -59
- package/src/drafts/draft10/rules.ts +73 -73
- package/src/drafts/draft10/session-fsm.ts +335 -303
- package/src/drafts/draft10/session.ts +6 -7
- package/src/drafts/draft10/types.ts +380 -384
- package/src/drafts/draft11/codec.ts +1054 -979
- package/src/drafts/draft11/data-streams.ts +189 -142
- package/src/drafts/draft11/index.ts +10 -9
- package/src/drafts/draft11/messages.ts +60 -59
- package/src/drafts/draft11/rules.ts +73 -73
- package/src/drafts/draft11/session-fsm.ts +359 -333
- package/src/drafts/draft11/session.ts +6 -7
- package/src/drafts/draft11/types.ts +385 -381
- package/src/drafts/draft12/codec.ts +1178 -1113
- package/src/drafts/draft12/data-streams.ts +192 -143
- package/src/drafts/draft12/index.ts +10 -9
- package/src/drafts/draft12/messages.ts +67 -66
- package/src/drafts/draft12/rules.ts +79 -79
- package/src/drafts/draft12/session-fsm.ts +384 -358
- package/src/drafts/draft12/session.ts +6 -7
- package/src/drafts/draft12/types.ts +424 -419
- package/src/drafts/draft13/codec.ts +1296 -1197
- package/src/drafts/draft13/data-streams.ts +194 -143
- package/src/drafts/draft13/index.ts +10 -9
- package/src/drafts/draft13/messages.ts +73 -68
- package/src/drafts/draft13/rules.ts +81 -81
- package/src/drafts/draft13/session-fsm.ts +392 -366
- package/src/drafts/draft13/session.ts +6 -7
- package/src/drafts/draft13/types.ts +447 -438
- package/src/drafts/draft14/codec.ts +1347 -1034
- package/src/drafts/draft14/data-streams.ts +429 -396
- package/src/drafts/draft14/index.ts +17 -9
- package/src/drafts/draft14/messages.ts +65 -65
- package/src/drafts/draft14/rules.ts +81 -81
- package/src/drafts/draft14/session-fsm.ts +415 -405
- package/src/drafts/draft14/session.ts +6 -7
- package/src/drafts/draft14/types.ts +451 -381
- package/src/drafts/draft15/codec.ts +1138 -969
- package/src/drafts/draft15/data-streams.ts +428 -364
- package/src/drafts/draft15/index.ts +10 -9
- package/src/drafts/draft15/messages.ts +54 -53
- package/src/drafts/draft15/rules.ts +67 -67
- package/src/drafts/draft15/session-fsm.ts +319 -299
- package/src/drafts/draft15/session.ts +6 -7
- package/src/drafts/draft15/types.ts +357 -339
- package/src/drafts/draft16/codec.ts +1242 -957
- package/src/drafts/draft16/data-streams.ts +433 -371
- package/src/drafts/draft16/index.ts +10 -9
- package/src/drafts/draft16/messages.ts +56 -55
- package/src/drafts/draft16/rules.ts +69 -69
- package/src/drafts/draft16/session-fsm.ts +319 -299
- package/src/drafts/draft16/session.ts +6 -7
- package/src/drafts/draft16/types.ts +386 -357
- package/src/drafts/draft17/codec.ts +1209 -962
- package/src/drafts/draft17/data-streams.ts +593 -366
- package/src/drafts/draft17/index.ts +9 -7
- package/src/drafts/draft17/messages.ts +43 -42
- package/src/drafts/draft17/rules.ts +58 -58
- package/src/drafts/draft17/session-fsm.ts +248 -216
- package/src/drafts/draft17/session.ts +5 -5
- package/src/drafts/draft17/types.ts +337 -313
- package/src/index.ts +85 -274
- package/src/session.ts +62 -23
- package/dist/chunk-7IVGHMKJ.cjs +0 -866
- package/dist/chunk-FUFTMAQD.cjs +0 -1218
- package/dist/chunk-TMNGRIPL.js +0 -866
- package/dist/codec-95k8CAu5.d.cts +0 -35
- package/dist/codec-AFuOxfsO.d.ts +0 -60
- package/dist/codec-B-UJ5Iow.d.cts +0 -75
- package/dist/codec-BC5jfvMb.d.ts +0 -35
- package/dist/codec-BECYPfY8.d.ts +0 -35
- package/dist/codec-BsPU1vNC.d.ts +0 -39
- package/dist/codec-BvpuF-6u.d.cts +0 -39
- package/dist/codec-C8jZI5Cx.d.cts +0 -39
- package/dist/codec-CAevkgf5.d.cts +0 -33
- package/dist/codec-CSUqCrRs.d.ts +0 -39
- package/dist/codec-C_HMXNK_.d.ts +0 -33
- package/dist/codec-CpuvYTSV.d.cts +0 -86
- package/dist/codec-D0x8-SCw.d.cts +0 -35
- package/dist/codec-D7ARhpG1.d.ts +0 -75
- package/dist/codec-DNAUGshO.d.cts +0 -60
- package/dist/codec-DPx_QNn0.d.ts +0 -31
- package/dist/codec-DRhCx_hw.d.ts +0 -86
- package/dist/codec-Db7YPe3l.d.ts +0 -31
- package/dist/codec-axkJpb7D.d.cts +0 -31
- package/dist/codec-ujAbFaep.d.cts +0 -31
- package/dist/core/buffer-reader.d.ts +0 -15
- package/dist/core/buffer-reader.d.ts.map +0 -1
- package/dist/core/buffer-reader.js +0 -98
- package/dist/core/buffer-reader.js.map +0 -1
- package/dist/core/buffer-writer.d.ts +0 -16
- package/dist/core/buffer-writer.d.ts.map +0 -1
- package/dist/core/buffer-writer.js +0 -86
- package/dist/core/buffer-writer.js.map +0 -1
- package/dist/core/errors.d.ts +0 -2
- package/dist/core/errors.d.ts.map +0 -1
- package/dist/core/errors.js +0 -2
- package/dist/core/errors.js.map +0 -1
- package/dist/core/hex.d.ts +0 -5
- package/dist/core/hex.d.ts.map +0 -1
- package/dist/core/hex.js +0 -17
- package/dist/core/hex.js.map +0 -1
- package/dist/core/session-types.d.ts +0 -99
- package/dist/core/session-types.d.ts.map +0 -1
- package/dist/core/session-types.js +0 -2
- package/dist/core/session-types.js.map +0 -1
- package/dist/core/types.d.ts +0 -235
- package/dist/core/types.d.ts.map +0 -1
- package/dist/core/types.js +0 -11
- package/dist/core/types.js.map +0 -1
- package/dist/drafts/draft07/announce-fsm.d.ts +0 -2
- package/dist/drafts/draft07/announce-fsm.d.ts.map +0 -1
- package/dist/drafts/draft07/announce-fsm.js +0 -2
- package/dist/drafts/draft07/announce-fsm.js.map +0 -1
- package/dist/drafts/draft07/codec.d.ts +0 -17
- package/dist/drafts/draft07/codec.d.ts.map +0 -1
- package/dist/drafts/draft07/codec.js +0 -722
- package/dist/drafts/draft07/codec.js.map +0 -1
- package/dist/drafts/draft07/data-streams.d.ts +0 -9
- package/dist/drafts/draft07/data-streams.d.ts.map +0 -1
- package/dist/drafts/draft07/data-streams.js +0 -228
- package/dist/drafts/draft07/data-streams.js.map +0 -1
- package/dist/drafts/draft07/index.d.ts +0 -14
- package/dist/drafts/draft07/index.d.ts.map +0 -1
- package/dist/drafts/draft07/index.js +0 -18
- package/dist/drafts/draft07/index.js.map +0 -1
- package/dist/drafts/draft07/messages.d.ts +0 -32
- package/dist/drafts/draft07/messages.d.ts.map +0 -1
- package/dist/drafts/draft07/messages.js +0 -42
- package/dist/drafts/draft07/messages.js.map +0 -1
- package/dist/drafts/draft07/parameters.d.ts +0 -4
- package/dist/drafts/draft07/parameters.d.ts.map +0 -1
- package/dist/drafts/draft07/parameters.js +0 -10
- package/dist/drafts/draft07/parameters.js.map +0 -1
- package/dist/drafts/draft07/rules.d.ts +0 -8
- package/dist/drafts/draft07/rules.d.ts.map +0 -1
- package/dist/drafts/draft07/rules.js +0 -95
- package/dist/drafts/draft07/rules.js.map +0 -1
- package/dist/drafts/draft07/session-fsm.d.ts +0 -38
- package/dist/drafts/draft07/session-fsm.d.ts.map +0 -1
- package/dist/drafts/draft07/session-fsm.js +0 -354
- package/dist/drafts/draft07/session-fsm.js.map +0 -1
- package/dist/drafts/draft07/session.d.ts +0 -4
- package/dist/drafts/draft07/session.d.ts.map +0 -1
- package/dist/drafts/draft07/session.js +0 -5
- package/dist/drafts/draft07/session.js.map +0 -1
- package/dist/drafts/draft07/subscription-fsm.d.ts +0 -2
- package/dist/drafts/draft07/subscription-fsm.d.ts.map +0 -1
- package/dist/drafts/draft07/subscription-fsm.js +0 -2
- package/dist/drafts/draft07/subscription-fsm.js.map +0 -1
- package/dist/drafts/draft07/types.d.ts +0 -61
- package/dist/drafts/draft07/types.d.ts.map +0 -1
- package/dist/drafts/draft07/types.js +0 -4
- package/dist/drafts/draft07/types.js.map +0 -1
- package/dist/drafts/draft07/varint.d.ts +0 -4
- package/dist/drafts/draft07/varint.d.ts.map +0 -1
- package/dist/drafts/draft07/varint.js +0 -22
- package/dist/drafts/draft07/varint.js.map +0 -1
- package/dist/drafts/draft08/codec.d.ts +0 -29
- package/dist/drafts/draft08/codec.d.ts.map +0 -1
- package/dist/drafts/draft08/codec.js +0 -729
- package/dist/drafts/draft08/codec.js.map +0 -1
- package/dist/drafts/draft08/data-streams.d.ts +0 -12
- package/dist/drafts/draft08/data-streams.d.ts.map +0 -1
- package/dist/drafts/draft08/data-streams.js +0 -345
- package/dist/drafts/draft08/data-streams.js.map +0 -1
- package/dist/drafts/draft08/index.d.ts +0 -9
- package/dist/drafts/draft08/index.d.ts.map +0 -1
- package/dist/drafts/draft08/index.js +0 -7
- package/dist/drafts/draft08/index.js.map +0 -1
- package/dist/drafts/draft08/messages.d.ts +0 -34
- package/dist/drafts/draft08/messages.d.ts.map +0 -1
- package/dist/drafts/draft08/messages.js +0 -66
- package/dist/drafts/draft08/messages.js.map +0 -1
- package/dist/drafts/draft08/rules.d.ts +0 -8
- package/dist/drafts/draft08/rules.d.ts.map +0 -1
- package/dist/drafts/draft08/rules.js +0 -83
- package/dist/drafts/draft08/rules.js.map +0 -1
- package/dist/drafts/draft08/session-fsm.d.ts +0 -47
- package/dist/drafts/draft08/session-fsm.d.ts.map +0 -1
- package/dist/drafts/draft08/session-fsm.js +0 -483
- package/dist/drafts/draft08/session-fsm.js.map +0 -1
- package/dist/drafts/draft08/session.d.ts +0 -5
- package/dist/drafts/draft08/session.d.ts.map +0 -1
- package/dist/drafts/draft08/session.js +0 -5
- package/dist/drafts/draft08/session.js.map +0 -1
- package/dist/drafts/draft08/types.d.ts +0 -268
- package/dist/drafts/draft08/types.d.ts.map +0 -1
- package/dist/drafts/draft08/types.js +0 -4
- package/dist/drafts/draft08/types.js.map +0 -1
- package/dist/drafts/draft09/codec.d.ts +0 -21
- package/dist/drafts/draft09/codec.d.ts.map +0 -1
- package/dist/drafts/draft09/codec.js +0 -721
- package/dist/drafts/draft09/codec.js.map +0 -1
- package/dist/drafts/draft09/data-streams.d.ts +0 -12
- package/dist/drafts/draft09/data-streams.d.ts.map +0 -1
- package/dist/drafts/draft09/data-streams.js +0 -307
- package/dist/drafts/draft09/data-streams.js.map +0 -1
- package/dist/drafts/draft09/index.d.ts +0 -9
- package/dist/drafts/draft09/index.d.ts.map +0 -1
- package/dist/drafts/draft09/index.js +0 -7
- package/dist/drafts/draft09/index.js.map +0 -1
- package/dist/drafts/draft09/messages.d.ts +0 -34
- package/dist/drafts/draft09/messages.d.ts.map +0 -1
- package/dist/drafts/draft09/messages.js +0 -66
- package/dist/drafts/draft09/messages.js.map +0 -1
- package/dist/drafts/draft09/rules.d.ts +0 -8
- package/dist/drafts/draft09/rules.d.ts.map +0 -1
- package/dist/drafts/draft09/rules.js +0 -83
- package/dist/drafts/draft09/rules.js.map +0 -1
- package/dist/drafts/draft09/session-fsm.d.ts +0 -47
- package/dist/drafts/draft09/session-fsm.d.ts.map +0 -1
- package/dist/drafts/draft09/session-fsm.js +0 -483
- package/dist/drafts/draft09/session-fsm.js.map +0 -1
- package/dist/drafts/draft09/session.d.ts +0 -5
- package/dist/drafts/draft09/session.d.ts.map +0 -1
- package/dist/drafts/draft09/session.js +0 -5
- package/dist/drafts/draft09/session.js.map +0 -1
- package/dist/drafts/draft09/types.d.ts +0 -268
- package/dist/drafts/draft09/types.d.ts.map +0 -1
- package/dist/drafts/draft09/types.js +0 -4
- package/dist/drafts/draft09/types.js.map +0 -1
- package/dist/drafts/draft10/codec.d.ts +0 -21
- package/dist/drafts/draft10/codec.d.ts.map +0 -1
- package/dist/drafts/draft10/codec.js +0 -721
- package/dist/drafts/draft10/codec.js.map +0 -1
- package/dist/drafts/draft10/data-streams.d.ts +0 -12
- package/dist/drafts/draft10/data-streams.d.ts.map +0 -1
- package/dist/drafts/draft10/data-streams.js +0 -307
- package/dist/drafts/draft10/data-streams.js.map +0 -1
- package/dist/drafts/draft10/index.d.ts +0 -9
- package/dist/drafts/draft10/index.d.ts.map +0 -1
- package/dist/drafts/draft10/index.js +0 -7
- package/dist/drafts/draft10/index.js.map +0 -1
- package/dist/drafts/draft10/messages.d.ts +0 -34
- package/dist/drafts/draft10/messages.d.ts.map +0 -1
- package/dist/drafts/draft10/messages.js +0 -66
- package/dist/drafts/draft10/messages.js.map +0 -1
- package/dist/drafts/draft10/rules.d.ts +0 -8
- package/dist/drafts/draft10/rules.d.ts.map +0 -1
- package/dist/drafts/draft10/rules.js +0 -83
- package/dist/drafts/draft10/rules.js.map +0 -1
- package/dist/drafts/draft10/session-fsm.d.ts +0 -47
- package/dist/drafts/draft10/session-fsm.d.ts.map +0 -1
- package/dist/drafts/draft10/session-fsm.js +0 -483
- package/dist/drafts/draft10/session-fsm.js.map +0 -1
- package/dist/drafts/draft10/session.d.ts +0 -5
- package/dist/drafts/draft10/session.d.ts.map +0 -1
- package/dist/drafts/draft10/session.js +0 -5
- package/dist/drafts/draft10/session.js.map +0 -1
- package/dist/drafts/draft10/types.d.ts +0 -268
- package/dist/drafts/draft10/types.d.ts.map +0 -1
- package/dist/drafts/draft10/types.js +0 -4
- package/dist/drafts/draft10/types.js.map +0 -1
- package/dist/drafts/draft11/codec.d.ts +0 -25
- package/dist/drafts/draft11/codec.d.ts.map +0 -1
- package/dist/drafts/draft11/codec.js +0 -775
- package/dist/drafts/draft11/codec.js.map +0 -1
- package/dist/drafts/draft11/data-streams.d.ts +0 -10
- package/dist/drafts/draft11/data-streams.d.ts.map +0 -1
- package/dist/drafts/draft11/data-streams.js +0 -253
- package/dist/drafts/draft11/data-streams.js.map +0 -1
- package/dist/drafts/draft11/index.d.ts +0 -9
- package/dist/drafts/draft11/index.d.ts.map +0 -1
- package/dist/drafts/draft11/index.js +0 -7
- package/dist/drafts/draft11/index.js.map +0 -1
- package/dist/drafts/draft11/messages.d.ts +0 -33
- package/dist/drafts/draft11/messages.d.ts.map +0 -1
- package/dist/drafts/draft11/messages.js +0 -65
- package/dist/drafts/draft11/messages.js.map +0 -1
- package/dist/drafts/draft11/rules.d.ts +0 -8
- package/dist/drafts/draft11/rules.d.ts.map +0 -1
- package/dist/drafts/draft11/rules.js +0 -88
- package/dist/drafts/draft11/rules.js.map +0 -1
- package/dist/drafts/draft11/session-fsm.d.ts +0 -52
- package/dist/drafts/draft11/session-fsm.d.ts.map +0 -1
- package/dist/drafts/draft11/session-fsm.js +0 -530
- package/dist/drafts/draft11/session-fsm.js.map +0 -1
- package/dist/drafts/draft11/session.d.ts +0 -5
- package/dist/drafts/draft11/session.d.ts.map +0 -1
- package/dist/drafts/draft11/session.js +0 -5
- package/dist/drafts/draft11/session.js.map +0 -1
- package/dist/drafts/draft11/types.d.ts +0 -266
- package/dist/drafts/draft11/types.d.ts.map +0 -1
- package/dist/drafts/draft11/types.js +0 -4
- package/dist/drafts/draft11/types.js.map +0 -1
- package/dist/drafts/draft12/codec.d.ts +0 -27
- package/dist/drafts/draft12/codec.d.ts.map +0 -1
- package/dist/drafts/draft12/codec.js +0 -918
- package/dist/drafts/draft12/codec.js.map +0 -1
- package/dist/drafts/draft12/data-streams.d.ts +0 -10
- package/dist/drafts/draft12/data-streams.d.ts.map +0 -1
- package/dist/drafts/draft12/data-streams.js +0 -254
- package/dist/drafts/draft12/data-streams.js.map +0 -1
- package/dist/drafts/draft12/index.d.ts +0 -9
- package/dist/drafts/draft12/index.d.ts.map +0 -1
- package/dist/drafts/draft12/index.js +0 -7
- package/dist/drafts/draft12/index.js.map +0 -1
- package/dist/drafts/draft12/messages.d.ts +0 -37
- package/dist/drafts/draft12/messages.d.ts.map +0 -1
- package/dist/drafts/draft12/messages.js +0 -77
- package/dist/drafts/draft12/messages.js.map +0 -1
- package/dist/drafts/draft12/rules.d.ts +0 -8
- package/dist/drafts/draft12/rules.d.ts.map +0 -1
- package/dist/drafts/draft12/rules.js +0 -94
- package/dist/drafts/draft12/rules.js.map +0 -1
- package/dist/drafts/draft12/session-fsm.d.ts +0 -55
- package/dist/drafts/draft12/session-fsm.d.ts.map +0 -1
- package/dist/drafts/draft12/session-fsm.js +0 -569
- package/dist/drafts/draft12/session-fsm.js.map +0 -1
- package/dist/drafts/draft12/session.d.ts +0 -5
- package/dist/drafts/draft12/session.d.ts.map +0 -1
- package/dist/drafts/draft12/session.js +0 -5
- package/dist/drafts/draft12/session.js.map +0 -1
- package/dist/drafts/draft12/types.d.ts +0 -294
- package/dist/drafts/draft12/types.d.ts.map +0 -1
- package/dist/drafts/draft12/types.js +0 -4
- package/dist/drafts/draft12/types.js.map +0 -1
- package/dist/drafts/draft13/codec.d.ts +0 -27
- package/dist/drafts/draft13/codec.d.ts.map +0 -1
- package/dist/drafts/draft13/codec.js +0 -1000
- package/dist/drafts/draft13/codec.js.map +0 -1
- package/dist/drafts/draft13/data-streams.d.ts +0 -10
- package/dist/drafts/draft13/data-streams.d.ts.map +0 -1
- package/dist/drafts/draft13/data-streams.js +0 -254
- package/dist/drafts/draft13/data-streams.js.map +0 -1
- package/dist/drafts/draft13/index.d.ts +0 -9
- package/dist/drafts/draft13/index.d.ts.map +0 -1
- package/dist/drafts/draft13/index.js +0 -7
- package/dist/drafts/draft13/index.js.map +0 -1
- package/dist/drafts/draft13/messages.d.ts +0 -38
- package/dist/drafts/draft13/messages.d.ts.map +0 -1
- package/dist/drafts/draft13/messages.js +0 -79
- package/dist/drafts/draft13/messages.js.map +0 -1
- package/dist/drafts/draft13/rules.d.ts +0 -8
- package/dist/drafts/draft13/rules.d.ts.map +0 -1
- package/dist/drafts/draft13/rules.js +0 -96
- package/dist/drafts/draft13/rules.js.map +0 -1
- package/dist/drafts/draft13/session-fsm.d.ts +0 -56
- package/dist/drafts/draft13/session-fsm.d.ts.map +0 -1
- package/dist/drafts/draft13/session-fsm.js +0 -581
- package/dist/drafts/draft13/session-fsm.js.map +0 -1
- package/dist/drafts/draft13/session.d.ts +0 -5
- package/dist/drafts/draft13/session.d.ts.map +0 -1
- package/dist/drafts/draft13/session.js +0 -5
- package/dist/drafts/draft13/session.js.map +0 -1
- package/dist/drafts/draft13/types.d.ts +0 -310
- package/dist/drafts/draft13/types.d.ts.map +0 -1
- package/dist/drafts/draft13/types.js +0 -4
- package/dist/drafts/draft13/types.js.map +0 -1
- package/dist/drafts/draft14/codec.d.ts +0 -34
- package/dist/drafts/draft14/codec.d.ts.map +0 -1
- package/dist/drafts/draft14/codec.js +0 -752
- package/dist/drafts/draft14/codec.js.map +0 -1
- package/dist/drafts/draft14/data-streams.d.ts +0 -56
- package/dist/drafts/draft14/data-streams.d.ts.map +0 -1
- package/dist/drafts/draft14/data-streams.js +0 -729
- package/dist/drafts/draft14/data-streams.js.map +0 -1
- package/dist/drafts/draft14/index.d.ts +0 -9
- package/dist/drafts/draft14/index.d.ts.map +0 -1
- package/dist/drafts/draft14/index.js +0 -7
- package/dist/drafts/draft14/index.js.map +0 -1
- package/dist/drafts/draft14/messages.d.ts +0 -36
- package/dist/drafts/draft14/messages.d.ts.map +0 -1
- package/dist/drafts/draft14/messages.js +0 -71
- package/dist/drafts/draft14/messages.js.map +0 -1
- package/dist/drafts/draft14/rules.d.ts +0 -8
- package/dist/drafts/draft14/rules.d.ts.map +0 -1
- package/dist/drafts/draft14/rules.js +0 -101
- package/dist/drafts/draft14/rules.js.map +0 -1
- package/dist/drafts/draft14/session-fsm.d.ts +0 -58
- package/dist/drafts/draft14/session-fsm.d.ts.map +0 -1
- package/dist/drafts/draft14/session-fsm.js +0 -648
- package/dist/drafts/draft14/session-fsm.js.map +0 -1
- package/dist/drafts/draft14/session.d.ts +0 -5
- package/dist/drafts/draft14/session.d.ts.map +0 -1
- package/dist/drafts/draft14/session.js +0 -5
- package/dist/drafts/draft14/session.js.map +0 -1
- package/dist/drafts/draft14/types.d.ts +0 -263
- package/dist/drafts/draft14/types.d.ts.map +0 -1
- package/dist/drafts/draft14/types.js +0 -4
- package/dist/drafts/draft14/types.js.map +0 -1
- package/dist/drafts/draft15/codec.d.ts +0 -33
- package/dist/drafts/draft15/codec.d.ts.map +0 -1
- package/dist/drafts/draft15/codec.js +0 -742
- package/dist/drafts/draft15/codec.js.map +0 -1
- package/dist/drafts/draft15/data-streams.d.ts +0 -45
- package/dist/drafts/draft15/data-streams.d.ts.map +0 -1
- package/dist/drafts/draft15/data-streams.js +0 -675
- package/dist/drafts/draft15/data-streams.js.map +0 -1
- package/dist/drafts/draft15/index.d.ts +0 -9
- package/dist/drafts/draft15/index.d.ts.map +0 -1
- package/dist/drafts/draft15/index.js +0 -7
- package/dist/drafts/draft15/index.js.map +0 -1
- package/dist/drafts/draft15/messages.d.ts +0 -31
- package/dist/drafts/draft15/messages.d.ts.map +0 -1
- package/dist/drafts/draft15/messages.js +0 -59
- package/dist/drafts/draft15/messages.js.map +0 -1
- package/dist/drafts/draft15/rules.d.ts +0 -8
- package/dist/drafts/draft15/rules.d.ts.map +0 -1
- package/dist/drafts/draft15/rules.js +0 -83
- package/dist/drafts/draft15/rules.js.map +0 -1
- package/dist/drafts/draft15/session-fsm.d.ts +0 -48
- package/dist/drafts/draft15/session-fsm.d.ts.map +0 -1
- package/dist/drafts/draft15/session-fsm.js +0 -479
- package/dist/drafts/draft15/session-fsm.js.map +0 -1
- package/dist/drafts/draft15/session.d.ts +0 -5
- package/dist/drafts/draft15/session.d.ts.map +0 -1
- package/dist/drafts/draft15/session.js +0 -5
- package/dist/drafts/draft15/session.js.map +0 -1
- package/dist/drafts/draft15/types.d.ts +0 -232
- package/dist/drafts/draft15/types.d.ts.map +0 -1
- package/dist/drafts/draft15/types.js +0 -4
- package/dist/drafts/draft15/types.js.map +0 -1
- package/dist/drafts/draft16/codec.d.ts +0 -29
- package/dist/drafts/draft16/codec.d.ts.map +0 -1
- package/dist/drafts/draft16/codec.js +0 -747
- package/dist/drafts/draft16/codec.js.map +0 -1
- package/dist/drafts/draft16/data-streams.d.ts +0 -34
- package/dist/drafts/draft16/data-streams.d.ts.map +0 -1
- package/dist/drafts/draft16/data-streams.js +0 -667
- package/dist/drafts/draft16/data-streams.js.map +0 -1
- package/dist/drafts/draft16/index.d.ts +0 -9
- package/dist/drafts/draft16/index.d.ts.map +0 -1
- package/dist/drafts/draft16/index.js +0 -7
- package/dist/drafts/draft16/index.js.map +0 -1
- package/dist/drafts/draft16/messages.d.ts +0 -32
- package/dist/drafts/draft16/messages.d.ts.map +0 -1
- package/dist/drafts/draft16/messages.js +0 -62
- package/dist/drafts/draft16/messages.js.map +0 -1
- package/dist/drafts/draft16/rules.d.ts +0 -8
- package/dist/drafts/draft16/rules.d.ts.map +0 -1
- package/dist/drafts/draft16/rules.js +0 -84
- package/dist/drafts/draft16/rules.js.map +0 -1
- package/dist/drafts/draft16/session-fsm.d.ts +0 -48
- package/dist/drafts/draft16/session-fsm.d.ts.map +0 -1
- package/dist/drafts/draft16/session-fsm.js +0 -474
- package/dist/drafts/draft16/session-fsm.js.map +0 -1
- package/dist/drafts/draft16/session.d.ts +0 -5
- package/dist/drafts/draft16/session.d.ts.map +0 -1
- package/dist/drafts/draft16/session.js +0 -5
- package/dist/drafts/draft16/session.js.map +0 -1
- package/dist/drafts/draft16/types.d.ts +0 -238
- package/dist/drafts/draft16/types.d.ts.map +0 -1
- package/dist/drafts/draft16/types.js +0 -4
- package/dist/drafts/draft16/types.js.map +0 -1
- package/dist/drafts/draft17/codec.d.ts +0 -29
- package/dist/drafts/draft17/codec.d.ts.map +0 -1
- package/dist/drafts/draft17/codec.js +0 -799
- package/dist/drafts/draft17/codec.js.map +0 -1
- package/dist/drafts/draft17/data-streams.d.ts +0 -13
- package/dist/drafts/draft17/data-streams.d.ts.map +0 -1
- package/dist/drafts/draft17/data-streams.js +0 -633
- package/dist/drafts/draft17/data-streams.js.map +0 -1
- package/dist/drafts/draft17/index.d.ts +0 -8
- package/dist/drafts/draft17/index.d.ts.map +0 -1
- package/dist/drafts/draft17/index.js +0 -6
- package/dist/drafts/draft17/index.js.map +0 -1
- package/dist/drafts/draft17/messages.d.ts +0 -25
- package/dist/drafts/draft17/messages.d.ts.map +0 -1
- package/dist/drafts/draft17/messages.js +0 -48
- package/dist/drafts/draft17/messages.js.map +0 -1
- package/dist/drafts/draft17/rules.d.ts +0 -8
- package/dist/drafts/draft17/rules.d.ts.map +0 -1
- package/dist/drafts/draft17/rules.js +0 -71
- package/dist/drafts/draft17/rules.js.map +0 -1
- package/dist/drafts/draft17/session-fsm.d.ts +0 -45
- package/dist/drafts/draft17/session-fsm.d.ts.map +0 -1
- package/dist/drafts/draft17/session-fsm.js +0 -328
- package/dist/drafts/draft17/session-fsm.js.map +0 -1
- package/dist/drafts/draft17/session.d.ts +0 -5
- package/dist/drafts/draft17/session.d.ts.map +0 -1
- package/dist/drafts/draft17/session.js +0 -6
- package/dist/drafts/draft17/session.js.map +0 -1
- package/dist/drafts/draft17/types.d.ts +0 -219
- package/dist/drafts/draft17/types.d.ts.map +0 -1
- package/dist/drafts/draft17/types.js +0 -3
- package/dist/drafts/draft17/types.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/session.d.ts.map +0 -1
- package/dist/session.js.map +0 -1
- package/dist/types-QNXoxC9Y.d.cts +0 -236
- package/dist/types-QNXoxC9Y.d.ts +0 -236
- package/src/drafts/draft07/announce-fsm.ts +0 -2
- package/src/drafts/draft07/parameters.ts +0 -12
- package/src/drafts/draft07/subscription-fsm.ts +0 -3
|
@@ -7,84 +7,84 @@ import type {
|
|
|
7
7
|
SubscriptionState,
|
|
8
8
|
TransitionResult,
|
|
9
9
|
ValidationResult,
|
|
10
|
-
} from
|
|
10
|
+
} from '../../core/session-types.js'
|
|
11
11
|
import {
|
|
12
12
|
CLIENT_ONLY_MESSAGES,
|
|
13
13
|
getLegalIncoming,
|
|
14
14
|
getLegalOutgoing,
|
|
15
15
|
SERVER_ONLY_MESSAGES,
|
|
16
|
-
} from
|
|
17
|
-
import type { Draft13Message, Draft13MessageType } from
|
|
16
|
+
} from './rules.js'
|
|
17
|
+
import type { Draft13Message, Draft13MessageType } from './types.js'
|
|
18
18
|
|
|
19
19
|
function violation(
|
|
20
|
-
code: ProtocolViolation<Draft13MessageType>[
|
|
20
|
+
code: ProtocolViolation<Draft13MessageType>['code'],
|
|
21
21
|
message: string,
|
|
22
22
|
currentPhase: SessionPhase,
|
|
23
23
|
offendingMessage: Draft13MessageType,
|
|
24
24
|
): ProtocolViolation<Draft13MessageType> {
|
|
25
|
-
return { code, message, currentPhase, offendingMessage }
|
|
25
|
+
return { code, message, currentPhase, offendingMessage }
|
|
26
26
|
}
|
|
27
27
|
|
|
28
28
|
export class Draft13SessionFSM {
|
|
29
|
-
private _phase: SessionPhase =
|
|
30
|
-
private _role:
|
|
31
|
-
private _subscriptions = new Map<bigint, SubscriptionState>()
|
|
32
|
-
private _announces = new Map<string, AnnounceState>()
|
|
33
|
-
private _fetches = new Map<bigint, FetchState>()
|
|
34
|
-
private _requestIds = new Set<bigint>()
|
|
29
|
+
private _phase: SessionPhase = 'idle'
|
|
30
|
+
private _role: 'client' | 'server'
|
|
31
|
+
private _subscriptions = new Map<bigint, SubscriptionState>()
|
|
32
|
+
private _announces = new Map<string, AnnounceState>()
|
|
33
|
+
private _fetches = new Map<bigint, FetchState>()
|
|
34
|
+
private _requestIds = new Set<bigint>()
|
|
35
35
|
|
|
36
|
-
constructor(role:
|
|
37
|
-
this._role = role
|
|
36
|
+
constructor(role: 'client' | 'server') {
|
|
37
|
+
this._role = role
|
|
38
38
|
}
|
|
39
39
|
|
|
40
40
|
get phase(): SessionPhase {
|
|
41
|
-
return this._phase
|
|
41
|
+
return this._phase
|
|
42
42
|
}
|
|
43
|
-
get role():
|
|
44
|
-
return this._role
|
|
43
|
+
get role(): 'client' | 'server' {
|
|
44
|
+
return this._role
|
|
45
45
|
}
|
|
46
46
|
get subscriptions(): ReadonlyMap<bigint, SubscriptionState> {
|
|
47
|
-
return this._subscriptions
|
|
47
|
+
return this._subscriptions
|
|
48
48
|
}
|
|
49
49
|
get announces(): ReadonlyMap<string, AnnounceState> {
|
|
50
|
-
return this._announces
|
|
50
|
+
return this._announces
|
|
51
51
|
}
|
|
52
52
|
get fetches(): ReadonlyMap<bigint, FetchState> {
|
|
53
|
-
return this._fetches
|
|
53
|
+
return this._fetches
|
|
54
54
|
}
|
|
55
55
|
|
|
56
56
|
get legalOutgoing(): ReadonlySet<Draft13MessageType> {
|
|
57
|
-
return getLegalOutgoing(this._phase, this._role)
|
|
57
|
+
return getLegalOutgoing(this._phase, this._role)
|
|
58
58
|
}
|
|
59
59
|
|
|
60
60
|
get legalIncoming(): ReadonlySet<Draft13MessageType> {
|
|
61
|
-
return getLegalIncoming(this._phase, this._role)
|
|
61
|
+
return getLegalIncoming(this._phase, this._role)
|
|
62
62
|
}
|
|
63
63
|
|
|
64
64
|
private checkRole(
|
|
65
65
|
message: Draft13Message,
|
|
66
|
-
direction:
|
|
66
|
+
direction: 'inbound' | 'outbound',
|
|
67
67
|
): ProtocolViolation<Draft13MessageType> | null {
|
|
68
68
|
const senderRole =
|
|
69
|
-
direction ===
|
|
69
|
+
direction === 'outbound' ? this._role : this._role === 'client' ? 'server' : 'client'
|
|
70
70
|
|
|
71
|
-
if (CLIENT_ONLY_MESSAGES.has(message.type) && senderRole !==
|
|
71
|
+
if (CLIENT_ONLY_MESSAGES.has(message.type) && senderRole !== 'client') {
|
|
72
72
|
return violation(
|
|
73
|
-
|
|
73
|
+
'ROLE_VIOLATION',
|
|
74
74
|
`${message.type} can only be sent by client`,
|
|
75
75
|
this._phase,
|
|
76
76
|
message.type,
|
|
77
|
-
)
|
|
77
|
+
)
|
|
78
78
|
}
|
|
79
|
-
if (SERVER_ONLY_MESSAGES.has(message.type) && senderRole !==
|
|
79
|
+
if (SERVER_ONLY_MESSAGES.has(message.type) && senderRole !== 'server') {
|
|
80
80
|
return violation(
|
|
81
|
-
|
|
81
|
+
'ROLE_VIOLATION',
|
|
82
82
|
`${message.type} can only be sent by server`,
|
|
83
83
|
this._phase,
|
|
84
84
|
message.type,
|
|
85
|
-
)
|
|
85
|
+
)
|
|
86
86
|
}
|
|
87
|
-
return null
|
|
87
|
+
return null
|
|
88
88
|
}
|
|
89
89
|
|
|
90
90
|
private checkDuplicateRequestId(
|
|
@@ -93,13 +93,13 @@ export class Draft13SessionFSM {
|
|
|
93
93
|
): ProtocolViolation<Draft13MessageType> | null {
|
|
94
94
|
if (this._requestIds.has(requestId)) {
|
|
95
95
|
return violation(
|
|
96
|
-
|
|
96
|
+
'DUPLICATE_REQUEST_ID',
|
|
97
97
|
`Request ID ${requestId} already in use`,
|
|
98
98
|
this._phase,
|
|
99
99
|
msgType,
|
|
100
|
-
)
|
|
100
|
+
)
|
|
101
101
|
}
|
|
102
|
-
return null
|
|
102
|
+
return null
|
|
103
103
|
}
|
|
104
104
|
|
|
105
105
|
private checkKnownRequestId(
|
|
@@ -108,218 +108,225 @@ export class Draft13SessionFSM {
|
|
|
108
108
|
): ProtocolViolation<Draft13MessageType> | null {
|
|
109
109
|
if (!this._requestIds.has(requestId)) {
|
|
110
110
|
return violation(
|
|
111
|
-
|
|
111
|
+
'UNKNOWN_REQUEST_ID',
|
|
112
112
|
`No request with ID ${requestId}`,
|
|
113
113
|
this._phase,
|
|
114
114
|
msgType,
|
|
115
|
-
)
|
|
115
|
+
)
|
|
116
116
|
}
|
|
117
|
-
return null
|
|
117
|
+
return null
|
|
118
118
|
}
|
|
119
119
|
|
|
120
120
|
validateOutgoing(message: Draft13Message): ValidationResult<Draft13MessageType> {
|
|
121
|
-
const roleViolation = this.checkRole(message,
|
|
122
|
-
if (roleViolation) return { ok: false, violation: roleViolation }
|
|
121
|
+
const roleViolation = this.checkRole(message, 'outbound')
|
|
122
|
+
if (roleViolation) return { ok: false, violation: roleViolation }
|
|
123
123
|
|
|
124
124
|
if (!this.legalOutgoing.has(message.type)) {
|
|
125
125
|
return {
|
|
126
126
|
ok: false,
|
|
127
127
|
violation: violation(
|
|
128
|
-
this._phase ===
|
|
129
|
-
?
|
|
130
|
-
:
|
|
128
|
+
this._phase === 'idle' || this._phase === 'setup'
|
|
129
|
+
? 'MESSAGE_BEFORE_SETUP'
|
|
130
|
+
: 'UNEXPECTED_MESSAGE',
|
|
131
131
|
`Cannot send ${message.type} in phase ${this._phase}`,
|
|
132
132
|
this._phase,
|
|
133
133
|
message.type,
|
|
134
134
|
),
|
|
135
|
-
}
|
|
135
|
+
}
|
|
136
136
|
}
|
|
137
|
-
return { ok: true }
|
|
137
|
+
return { ok: true }
|
|
138
138
|
}
|
|
139
139
|
|
|
140
140
|
receive(message: Draft13Message): TransitionResult<Draft13MessageType> {
|
|
141
|
-
const roleViolation = this.checkRole(message,
|
|
142
|
-
if (roleViolation) return { ok: false, violation: roleViolation }
|
|
143
|
-
return this.applyTransition(message,
|
|
141
|
+
const roleViolation = this.checkRole(message, 'inbound')
|
|
142
|
+
if (roleViolation) return { ok: false, violation: roleViolation }
|
|
143
|
+
return this.applyTransition(message, 'inbound')
|
|
144
144
|
}
|
|
145
145
|
|
|
146
146
|
send(message: Draft13Message): TransitionResult<Draft13MessageType> {
|
|
147
|
-
const roleViolation = this.checkRole(message,
|
|
148
|
-
if (roleViolation) return { ok: false, violation: roleViolation }
|
|
149
|
-
return this.applyTransition(message,
|
|
147
|
+
const roleViolation = this.checkRole(message, 'outbound')
|
|
148
|
+
if (roleViolation) return { ok: false, violation: roleViolation }
|
|
149
|
+
return this.applyTransition(message, 'outbound')
|
|
150
150
|
}
|
|
151
151
|
|
|
152
152
|
private applyTransition(
|
|
153
153
|
message: Draft13Message,
|
|
154
|
-
direction:
|
|
154
|
+
direction: 'inbound' | 'outbound',
|
|
155
155
|
): TransitionResult<Draft13MessageType> {
|
|
156
|
-
const sideEffects: SideEffect[] = []
|
|
156
|
+
const sideEffects: SideEffect[] = []
|
|
157
157
|
|
|
158
158
|
switch (message.type) {
|
|
159
|
-
case
|
|
160
|
-
return this.handleClientSetup(direction)
|
|
161
|
-
case
|
|
162
|
-
return this.handleServerSetup(direction)
|
|
163
|
-
case
|
|
164
|
-
return this.handleGoAway(message, sideEffects)
|
|
159
|
+
case 'client_setup':
|
|
160
|
+
return this.handleClientSetup(direction)
|
|
161
|
+
case 'server_setup':
|
|
162
|
+
return this.handleServerSetup(direction)
|
|
163
|
+
case 'goaway':
|
|
164
|
+
return this.handleGoAway(message, sideEffects)
|
|
165
165
|
|
|
166
166
|
// Subscribe lifecycle
|
|
167
|
-
case
|
|
168
|
-
return this.handleSubscribe(message, sideEffects)
|
|
169
|
-
case
|
|
170
|
-
return this.handleSubscribeOk(message, sideEffects)
|
|
171
|
-
case
|
|
172
|
-
return this.handleSubscribeError(message, sideEffects)
|
|
173
|
-
case
|
|
174
|
-
return this.handleSubscribeUpdate(message, sideEffects)
|
|
175
|
-
case
|
|
176
|
-
return this.handleSubscribeDone(message, sideEffects)
|
|
177
|
-
case
|
|
178
|
-
return this.handleUnsubscribe(message, sideEffects)
|
|
167
|
+
case 'subscribe':
|
|
168
|
+
return this.handleSubscribe(message, sideEffects)
|
|
169
|
+
case 'subscribe_ok':
|
|
170
|
+
return this.handleSubscribeOk(message, sideEffects)
|
|
171
|
+
case 'subscribe_error':
|
|
172
|
+
return this.handleSubscribeError(message, sideEffects)
|
|
173
|
+
case 'subscribe_update':
|
|
174
|
+
return this.handleSubscribeUpdate(message, sideEffects)
|
|
175
|
+
case 'subscribe_done':
|
|
176
|
+
return this.handleSubscribeDone(message, sideEffects)
|
|
177
|
+
case 'unsubscribe':
|
|
178
|
+
return this.handleUnsubscribe(message, sideEffects)
|
|
179
179
|
|
|
180
180
|
// Announce lifecycle
|
|
181
|
-
case
|
|
182
|
-
return this.handleAnnounce(message, sideEffects)
|
|
183
|
-
case
|
|
184
|
-
return this.handleAnnounceOk(message, sideEffects)
|
|
185
|
-
case
|
|
186
|
-
return this.handleAnnounceError(message, sideEffects)
|
|
187
|
-
case
|
|
188
|
-
return this.handleUnannounce(message, sideEffects)
|
|
189
|
-
case
|
|
190
|
-
return this.handleAnnounceCancel(message, sideEffects)
|
|
181
|
+
case 'announce':
|
|
182
|
+
return this.handleAnnounce(message, sideEffects)
|
|
183
|
+
case 'announce_ok':
|
|
184
|
+
return this.handleAnnounceOk(message, sideEffects)
|
|
185
|
+
case 'announce_error':
|
|
186
|
+
return this.handleAnnounceError(message, sideEffects)
|
|
187
|
+
case 'unannounce':
|
|
188
|
+
return this.handleUnannounce(message, sideEffects)
|
|
189
|
+
case 'announce_cancel':
|
|
190
|
+
return this.handleAnnounceCancel(message, sideEffects)
|
|
191
191
|
|
|
192
192
|
// Publish lifecycle
|
|
193
|
-
case
|
|
194
|
-
return this.handlePublish(message, sideEffects)
|
|
195
|
-
case
|
|
196
|
-
return this.handlePublishOk(message, sideEffects)
|
|
197
|
-
case
|
|
198
|
-
return this.handlePublishError(message, sideEffects)
|
|
193
|
+
case 'publish':
|
|
194
|
+
return this.handlePublish(message, sideEffects)
|
|
195
|
+
case 'publish_ok':
|
|
196
|
+
return this.handlePublishOk(message, sideEffects)
|
|
197
|
+
case 'publish_error':
|
|
198
|
+
return this.handlePublishError(message, sideEffects)
|
|
199
199
|
|
|
200
200
|
// Fetch lifecycle
|
|
201
|
-
case
|
|
202
|
-
return this.handleFetch(message, sideEffects)
|
|
203
|
-
case
|
|
204
|
-
return this.handleFetchOk(message, sideEffects)
|
|
205
|
-
case
|
|
206
|
-
return this.handleFetchError(message, sideEffects)
|
|
207
|
-
case
|
|
208
|
-
return this.handleFetchCancel(message, sideEffects)
|
|
201
|
+
case 'fetch':
|
|
202
|
+
return this.handleFetch(message, sideEffects)
|
|
203
|
+
case 'fetch_ok':
|
|
204
|
+
return this.handleFetchOk(message, sideEffects)
|
|
205
|
+
case 'fetch_error':
|
|
206
|
+
return this.handleFetchError(message, sideEffects)
|
|
207
|
+
case 'fetch_cancel':
|
|
208
|
+
return this.handleFetchCancel(message, sideEffects)
|
|
209
209
|
|
|
210
210
|
// Subscribe namespace lifecycle
|
|
211
|
-
case
|
|
212
|
-
return this.handleSubscribeNamespace(message, sideEffects)
|
|
213
|
-
case
|
|
214
|
-
return this.handleSubscribeNamespaceOk(message, sideEffects)
|
|
215
|
-
case
|
|
216
|
-
return this.handleSubscribeNamespaceError(message, sideEffects)
|
|
211
|
+
case 'subscribe_namespace':
|
|
212
|
+
return this.handleSubscribeNamespace(message, sideEffects)
|
|
213
|
+
case 'subscribe_namespace_ok':
|
|
214
|
+
return this.handleSubscribeNamespaceOk(message, sideEffects)
|
|
215
|
+
case 'subscribe_namespace_error':
|
|
216
|
+
return this.handleSubscribeNamespaceError(message, sideEffects)
|
|
217
217
|
|
|
218
218
|
// Track status lifecycle
|
|
219
|
-
case
|
|
220
|
-
return this.handleTrackStatus(message, sideEffects)
|
|
221
|
-
case
|
|
222
|
-
return this.handleTrackStatusOk(message, sideEffects)
|
|
223
|
-
case
|
|
224
|
-
return this.handleTrackStatusError(message, sideEffects)
|
|
219
|
+
case 'track_status':
|
|
220
|
+
return this.handleTrackStatus(message, sideEffects)
|
|
221
|
+
case 'track_status_ok':
|
|
222
|
+
return this.handleTrackStatusOk(message, sideEffects)
|
|
223
|
+
case 'track_status_error':
|
|
224
|
+
return this.handleTrackStatusError(message, sideEffects)
|
|
225
225
|
|
|
226
226
|
// Other ready-phase messages
|
|
227
227
|
default:
|
|
228
|
-
return this.handleReadyPhaseMessage(message)
|
|
228
|
+
return this.handleReadyPhaseMessage(message)
|
|
229
229
|
}
|
|
230
230
|
}
|
|
231
231
|
|
|
232
232
|
private handleClientSetup(
|
|
233
|
-
direction:
|
|
233
|
+
direction: 'inbound' | 'outbound',
|
|
234
234
|
): TransitionResult<Draft13MessageType> {
|
|
235
|
-
if (this._phase !==
|
|
235
|
+
if (this._phase !== 'idle') {
|
|
236
236
|
return {
|
|
237
237
|
ok: false,
|
|
238
238
|
violation: violation(
|
|
239
|
-
|
|
240
|
-
|
|
239
|
+
'SETUP_VIOLATION',
|
|
240
|
+
'CLIENT_SETUP already sent/received',
|
|
241
241
|
this._phase,
|
|
242
|
-
|
|
242
|
+
'client_setup',
|
|
243
243
|
),
|
|
244
|
-
}
|
|
244
|
+
}
|
|
245
245
|
}
|
|
246
|
-
if (direction ===
|
|
246
|
+
if (direction === 'outbound' && this._role !== 'client') {
|
|
247
247
|
return {
|
|
248
248
|
ok: false,
|
|
249
249
|
violation: violation(
|
|
250
|
-
|
|
251
|
-
|
|
250
|
+
'ROLE_VIOLATION',
|
|
251
|
+
'Only client can send CLIENT_SETUP',
|
|
252
252
|
this._phase,
|
|
253
|
-
|
|
253
|
+
'client_setup',
|
|
254
254
|
),
|
|
255
|
-
}
|
|
255
|
+
}
|
|
256
256
|
}
|
|
257
|
-
this._phase =
|
|
258
|
-
return { ok: true, phase: this._phase, sideEffects: [] }
|
|
257
|
+
this._phase = 'setup'
|
|
258
|
+
return { ok: true, phase: this._phase, sideEffects: [] }
|
|
259
259
|
}
|
|
260
260
|
|
|
261
261
|
private handleServerSetup(
|
|
262
|
-
direction:
|
|
262
|
+
direction: 'inbound' | 'outbound',
|
|
263
263
|
): TransitionResult<Draft13MessageType> {
|
|
264
|
-
if (this._phase !==
|
|
264
|
+
if (this._phase !== 'setup') {
|
|
265
265
|
return {
|
|
266
266
|
ok: false,
|
|
267
267
|
violation: violation(
|
|
268
|
-
|
|
269
|
-
|
|
268
|
+
'SETUP_VIOLATION',
|
|
269
|
+
'SERVER_SETUP before CLIENT_SETUP',
|
|
270
270
|
this._phase,
|
|
271
|
-
|
|
271
|
+
'server_setup',
|
|
272
272
|
),
|
|
273
|
-
}
|
|
273
|
+
}
|
|
274
274
|
}
|
|
275
|
-
if (direction ===
|
|
275
|
+
if (direction === 'outbound' && this._role !== 'server') {
|
|
276
276
|
return {
|
|
277
277
|
ok: false,
|
|
278
278
|
violation: violation(
|
|
279
|
-
|
|
280
|
-
|
|
279
|
+
'ROLE_VIOLATION',
|
|
280
|
+
'Only server can send SERVER_SETUP',
|
|
281
281
|
this._phase,
|
|
282
|
-
|
|
282
|
+
'server_setup',
|
|
283
283
|
),
|
|
284
|
-
}
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
this._phase = 'ready'
|
|
287
|
+
return {
|
|
288
|
+
ok: true,
|
|
289
|
+
phase: this._phase,
|
|
290
|
+
sideEffects: [{ type: 'session-ready' }],
|
|
285
291
|
}
|
|
286
|
-
this._phase = "ready";
|
|
287
|
-
return { ok: true, phase: this._phase, sideEffects: [{ type: "session-ready" }] };
|
|
288
292
|
}
|
|
289
293
|
|
|
290
294
|
private handleGoAway(
|
|
291
295
|
message: Draft13Message,
|
|
292
296
|
sideEffects: SideEffect[],
|
|
293
297
|
): TransitionResult<Draft13MessageType> {
|
|
294
|
-
if (this._phase !==
|
|
298
|
+
if (this._phase !== 'ready' && this._phase !== 'draining') {
|
|
295
299
|
return {
|
|
296
300
|
ok: false,
|
|
297
301
|
violation: violation(
|
|
298
|
-
|
|
302
|
+
'UNEXPECTED_MESSAGE',
|
|
299
303
|
`GOAWAY not valid in phase ${this._phase}`,
|
|
300
304
|
this._phase,
|
|
301
|
-
|
|
305
|
+
'goaway',
|
|
302
306
|
),
|
|
303
|
-
}
|
|
307
|
+
}
|
|
304
308
|
}
|
|
305
|
-
this._phase =
|
|
306
|
-
const goaway = message as import(
|
|
307
|
-
sideEffects.push({
|
|
308
|
-
|
|
309
|
+
this._phase = 'draining'
|
|
310
|
+
const goaway = message as import('./types.js').Draft13GoAway
|
|
311
|
+
sideEffects.push({
|
|
312
|
+
type: 'session-draining',
|
|
313
|
+
goAwayUri: goaway.new_session_uri,
|
|
314
|
+
})
|
|
315
|
+
return { ok: true, phase: this._phase, sideEffects }
|
|
309
316
|
}
|
|
310
317
|
|
|
311
318
|
private requireReady(msgType: Draft13MessageType): ProtocolViolation<Draft13MessageType> | null {
|
|
312
|
-
if (this._phase !==
|
|
319
|
+
if (this._phase !== 'ready' && this._phase !== 'draining') {
|
|
313
320
|
return violation(
|
|
314
|
-
this._phase ===
|
|
315
|
-
?
|
|
316
|
-
:
|
|
321
|
+
this._phase === 'idle' || this._phase === 'setup'
|
|
322
|
+
? 'MESSAGE_BEFORE_SETUP'
|
|
323
|
+
: 'UNEXPECTED_MESSAGE',
|
|
317
324
|
`${msgType} requires ready phase, current: ${this._phase}`,
|
|
318
325
|
this._phase,
|
|
319
326
|
msgType,
|
|
320
|
-
)
|
|
327
|
+
)
|
|
321
328
|
}
|
|
322
|
-
return null
|
|
329
|
+
return null
|
|
323
330
|
}
|
|
324
331
|
|
|
325
332
|
// ─── Subscribe lifecycle ───
|
|
@@ -328,184 +335,187 @@ export class Draft13SessionFSM {
|
|
|
328
335
|
message: Draft13Message,
|
|
329
336
|
sideEffects: SideEffect[],
|
|
330
337
|
): TransitionResult<Draft13MessageType> {
|
|
331
|
-
const err = this.requireReady(message.type)
|
|
332
|
-
if (err) return { ok: false, violation: err }
|
|
333
|
-
const sub = message as import(
|
|
334
|
-
const dupErr = this.checkDuplicateRequestId(sub.request_id, message.type)
|
|
335
|
-
if (dupErr) return { ok: false, violation: dupErr }
|
|
336
|
-
this._requestIds.add(sub.request_id)
|
|
338
|
+
const err = this.requireReady(message.type)
|
|
339
|
+
if (err) return { ok: false, violation: err }
|
|
340
|
+
const sub = message as import('./types.js').Draft13Subscribe
|
|
341
|
+
const dupErr = this.checkDuplicateRequestId(sub.request_id, message.type)
|
|
342
|
+
if (dupErr) return { ok: false, violation: dupErr }
|
|
343
|
+
this._requestIds.add(sub.request_id)
|
|
337
344
|
this._subscriptions.set(sub.request_id, {
|
|
338
345
|
subscribeId: sub.request_id,
|
|
339
|
-
phase:
|
|
346
|
+
phase: 'pending',
|
|
340
347
|
trackNamespace: sub.track_namespace,
|
|
341
348
|
trackName: sub.track_name,
|
|
342
|
-
})
|
|
343
|
-
return { ok: true, phase: this._phase, sideEffects }
|
|
349
|
+
})
|
|
350
|
+
return { ok: true, phase: this._phase, sideEffects }
|
|
344
351
|
}
|
|
345
352
|
|
|
346
353
|
private handleSubscribeOk(
|
|
347
354
|
message: Draft13Message,
|
|
348
355
|
sideEffects: SideEffect[],
|
|
349
356
|
): TransitionResult<Draft13MessageType> {
|
|
350
|
-
const err = this.requireReady(message.type)
|
|
351
|
-
if (err) return { ok: false, violation: err }
|
|
352
|
-
const ok = message as import(
|
|
353
|
-
const idErr = this.checkKnownRequestId(ok.request_id, message.type)
|
|
354
|
-
if (idErr) return { ok: false, violation: idErr }
|
|
355
|
-
const existing = this._subscriptions.get(ok.request_id)
|
|
357
|
+
const err = this.requireReady(message.type)
|
|
358
|
+
if (err) return { ok: false, violation: err }
|
|
359
|
+
const ok = message as import('./types.js').Draft13SubscribeOk
|
|
360
|
+
const idErr = this.checkKnownRequestId(ok.request_id, message.type)
|
|
361
|
+
if (idErr) return { ok: false, violation: idErr }
|
|
362
|
+
const existing = this._subscriptions.get(ok.request_id)
|
|
356
363
|
if (!existing)
|
|
357
364
|
return {
|
|
358
365
|
ok: false,
|
|
359
366
|
violation: violation(
|
|
360
|
-
|
|
367
|
+
'UNKNOWN_REQUEST_ID',
|
|
361
368
|
`No subscription with request ID ${ok.request_id}`,
|
|
362
369
|
this._phase,
|
|
363
370
|
message.type,
|
|
364
371
|
),
|
|
365
|
-
}
|
|
366
|
-
if (existing.phase !==
|
|
372
|
+
}
|
|
373
|
+
if (existing.phase !== 'pending')
|
|
367
374
|
return {
|
|
368
375
|
ok: false,
|
|
369
376
|
violation: violation(
|
|
370
|
-
|
|
377
|
+
'STATE_VIOLATION',
|
|
371
378
|
`Subscription ${ok.request_id} is ${existing.phase}, not pending`,
|
|
372
379
|
this._phase,
|
|
373
380
|
message.type,
|
|
374
381
|
),
|
|
375
|
-
}
|
|
376
|
-
this._subscriptions.set(ok.request_id, { ...existing, phase:
|
|
377
|
-
sideEffects.push({
|
|
378
|
-
|
|
382
|
+
}
|
|
383
|
+
this._subscriptions.set(ok.request_id, { ...existing, phase: 'active' })
|
|
384
|
+
sideEffects.push({
|
|
385
|
+
type: 'subscription-activated',
|
|
386
|
+
subscribeId: ok.request_id,
|
|
387
|
+
})
|
|
388
|
+
return { ok: true, phase: this._phase, sideEffects }
|
|
379
389
|
}
|
|
380
390
|
|
|
381
391
|
private handleSubscribeError(
|
|
382
392
|
message: Draft13Message,
|
|
383
393
|
sideEffects: SideEffect[],
|
|
384
394
|
): TransitionResult<Draft13MessageType> {
|
|
385
|
-
const err = this.requireReady(message.type)
|
|
386
|
-
if (err) return { ok: false, violation: err }
|
|
387
|
-
const subErr = message as import(
|
|
388
|
-
const idErr = this.checkKnownRequestId(subErr.request_id, message.type)
|
|
389
|
-
if (idErr) return { ok: false, violation: idErr }
|
|
390
|
-
const existing = this._subscriptions.get(subErr.request_id)
|
|
395
|
+
const err = this.requireReady(message.type)
|
|
396
|
+
if (err) return { ok: false, violation: err }
|
|
397
|
+
const subErr = message as import('./types.js').Draft13SubscribeError
|
|
398
|
+
const idErr = this.checkKnownRequestId(subErr.request_id, message.type)
|
|
399
|
+
if (idErr) return { ok: false, violation: idErr }
|
|
400
|
+
const existing = this._subscriptions.get(subErr.request_id)
|
|
391
401
|
if (!existing)
|
|
392
402
|
return {
|
|
393
403
|
ok: false,
|
|
394
404
|
violation: violation(
|
|
395
|
-
|
|
405
|
+
'UNKNOWN_REQUEST_ID',
|
|
396
406
|
`No subscription with request ID ${subErr.request_id}`,
|
|
397
407
|
this._phase,
|
|
398
408
|
message.type,
|
|
399
409
|
),
|
|
400
|
-
}
|
|
401
|
-
if (existing.phase !==
|
|
410
|
+
}
|
|
411
|
+
if (existing.phase !== 'pending')
|
|
402
412
|
return {
|
|
403
413
|
ok: false,
|
|
404
414
|
violation: violation(
|
|
405
|
-
|
|
415
|
+
'STATE_VIOLATION',
|
|
406
416
|
`Subscription ${subErr.request_id} is ${existing.phase}, not pending`,
|
|
407
417
|
this._phase,
|
|
408
418
|
message.type,
|
|
409
419
|
),
|
|
410
|
-
}
|
|
411
|
-
this._subscriptions.set(subErr.request_id, { ...existing, phase:
|
|
420
|
+
}
|
|
421
|
+
this._subscriptions.set(subErr.request_id, { ...existing, phase: 'error' })
|
|
412
422
|
sideEffects.push({
|
|
413
|
-
type:
|
|
423
|
+
type: 'subscription-ended',
|
|
414
424
|
subscribeId: subErr.request_id,
|
|
415
425
|
reason: subErr.reason_phrase,
|
|
416
|
-
})
|
|
417
|
-
return { ok: true, phase: this._phase, sideEffects }
|
|
426
|
+
})
|
|
427
|
+
return { ok: true, phase: this._phase, sideEffects }
|
|
418
428
|
}
|
|
419
429
|
|
|
420
430
|
private handleSubscribeUpdate(
|
|
421
431
|
message: Draft13Message,
|
|
422
432
|
sideEffects: SideEffect[],
|
|
423
433
|
): TransitionResult<Draft13MessageType> {
|
|
424
|
-
const err = this.requireReady(message.type)
|
|
425
|
-
if (err) return { ok: false, violation: err }
|
|
426
|
-
const update = message as import(
|
|
427
|
-
const idErr = this.checkKnownRequestId(update.request_id, message.type)
|
|
428
|
-
if (idErr) return { ok: false, violation: idErr }
|
|
429
|
-
const existing = this._subscriptions.get(update.request_id)
|
|
434
|
+
const err = this.requireReady(message.type)
|
|
435
|
+
if (err) return { ok: false, violation: err }
|
|
436
|
+
const update = message as import('./types.js').Draft13SubscribeUpdate
|
|
437
|
+
const idErr = this.checkKnownRequestId(update.request_id, message.type)
|
|
438
|
+
if (idErr) return { ok: false, violation: idErr }
|
|
439
|
+
const existing = this._subscriptions.get(update.request_id)
|
|
430
440
|
if (!existing)
|
|
431
441
|
return {
|
|
432
442
|
ok: false,
|
|
433
443
|
violation: violation(
|
|
434
|
-
|
|
444
|
+
'UNKNOWN_REQUEST_ID',
|
|
435
445
|
`No subscription with request ID ${update.request_id}`,
|
|
436
446
|
this._phase,
|
|
437
447
|
message.type,
|
|
438
448
|
),
|
|
439
|
-
}
|
|
440
|
-
if (existing.phase !==
|
|
449
|
+
}
|
|
450
|
+
if (existing.phase !== 'active')
|
|
441
451
|
return {
|
|
442
452
|
ok: false,
|
|
443
453
|
violation: violation(
|
|
444
|
-
|
|
454
|
+
'STATE_VIOLATION',
|
|
445
455
|
`Subscription ${update.request_id} is ${existing.phase}, not active`,
|
|
446
456
|
this._phase,
|
|
447
457
|
message.type,
|
|
448
458
|
),
|
|
449
|
-
}
|
|
450
|
-
return { ok: true, phase: this._phase, sideEffects }
|
|
459
|
+
}
|
|
460
|
+
return { ok: true, phase: this._phase, sideEffects }
|
|
451
461
|
}
|
|
452
462
|
|
|
453
463
|
private handleSubscribeDone(
|
|
454
464
|
message: Draft13Message,
|
|
455
465
|
sideEffects: SideEffect[],
|
|
456
466
|
): TransitionResult<Draft13MessageType> {
|
|
457
|
-
const err = this.requireReady(message.type)
|
|
458
|
-
if (err) return { ok: false, violation: err }
|
|
459
|
-
const done = message as import(
|
|
460
|
-
const idErr = this.checkKnownRequestId(done.request_id, message.type)
|
|
461
|
-
if (idErr) return { ok: false, violation: idErr }
|
|
462
|
-
const existing = this._subscriptions.get(done.request_id)
|
|
467
|
+
const err = this.requireReady(message.type)
|
|
468
|
+
if (err) return { ok: false, violation: err }
|
|
469
|
+
const done = message as import('./types.js').Draft13SubscribeDone
|
|
470
|
+
const idErr = this.checkKnownRequestId(done.request_id, message.type)
|
|
471
|
+
if (idErr) return { ok: false, violation: idErr }
|
|
472
|
+
const existing = this._subscriptions.get(done.request_id)
|
|
463
473
|
if (!existing)
|
|
464
474
|
return {
|
|
465
475
|
ok: false,
|
|
466
476
|
violation: violation(
|
|
467
|
-
|
|
477
|
+
'UNKNOWN_REQUEST_ID',
|
|
468
478
|
`No subscription with request ID ${done.request_id}`,
|
|
469
479
|
this._phase,
|
|
470
480
|
message.type,
|
|
471
481
|
),
|
|
472
|
-
}
|
|
473
|
-
this._subscriptions.set(done.request_id, { ...existing, phase:
|
|
482
|
+
}
|
|
483
|
+
this._subscriptions.set(done.request_id, { ...existing, phase: 'done' })
|
|
474
484
|
sideEffects.push({
|
|
475
|
-
type:
|
|
485
|
+
type: 'subscription-ended',
|
|
476
486
|
subscribeId: done.request_id,
|
|
477
487
|
reason: done.reason_phrase,
|
|
478
|
-
})
|
|
479
|
-
return { ok: true, phase: this._phase, sideEffects }
|
|
488
|
+
})
|
|
489
|
+
return { ok: true, phase: this._phase, sideEffects }
|
|
480
490
|
}
|
|
481
491
|
|
|
482
492
|
private handleUnsubscribe(
|
|
483
493
|
message: Draft13Message,
|
|
484
494
|
sideEffects: SideEffect[],
|
|
485
495
|
): TransitionResult<Draft13MessageType> {
|
|
486
|
-
const err = this.requireReady(message.type)
|
|
487
|
-
if (err) return { ok: false, violation: err }
|
|
488
|
-
const unsub = message as import(
|
|
489
|
-
const idErr = this.checkKnownRequestId(unsub.request_id, message.type)
|
|
490
|
-
if (idErr) return { ok: false, violation: idErr }
|
|
491
|
-
const existing = this._subscriptions.get(unsub.request_id)
|
|
496
|
+
const err = this.requireReady(message.type)
|
|
497
|
+
if (err) return { ok: false, violation: err }
|
|
498
|
+
const unsub = message as import('./types.js').Draft13Unsubscribe
|
|
499
|
+
const idErr = this.checkKnownRequestId(unsub.request_id, message.type)
|
|
500
|
+
if (idErr) return { ok: false, violation: idErr }
|
|
501
|
+
const existing = this._subscriptions.get(unsub.request_id)
|
|
492
502
|
if (!existing)
|
|
493
503
|
return {
|
|
494
504
|
ok: false,
|
|
495
505
|
violation: violation(
|
|
496
|
-
|
|
506
|
+
'UNKNOWN_REQUEST_ID',
|
|
497
507
|
`No subscription with request ID ${unsub.request_id}`,
|
|
498
508
|
this._phase,
|
|
499
509
|
message.type,
|
|
500
510
|
),
|
|
501
|
-
}
|
|
502
|
-
this._subscriptions.set(unsub.request_id, { ...existing, phase:
|
|
511
|
+
}
|
|
512
|
+
this._subscriptions.set(unsub.request_id, { ...existing, phase: 'done' })
|
|
503
513
|
sideEffects.push({
|
|
504
|
-
type:
|
|
514
|
+
type: 'subscription-ended',
|
|
505
515
|
subscribeId: unsub.request_id,
|
|
506
|
-
reason:
|
|
507
|
-
})
|
|
508
|
-
return { ok: true, phase: this._phase, sideEffects }
|
|
516
|
+
reason: 'unsubscribed',
|
|
517
|
+
})
|
|
518
|
+
return { ok: true, phase: this._phase, sideEffects }
|
|
509
519
|
}
|
|
510
520
|
|
|
511
521
|
// ─── Announce lifecycle ───
|
|
@@ -514,69 +524,78 @@ export class Draft13SessionFSM {
|
|
|
514
524
|
message: Draft13Message,
|
|
515
525
|
sideEffects: SideEffect[],
|
|
516
526
|
): TransitionResult<Draft13MessageType> {
|
|
517
|
-
const err = this.requireReady(message.type)
|
|
518
|
-
if (err) return { ok: false, violation: err }
|
|
519
|
-
const ann = message as import(
|
|
520
|
-
const nsKey = ann.track_namespace.join(
|
|
521
|
-
this._requestIds.add(ann.request_id)
|
|
522
|
-
this._announces.set(nsKey, {
|
|
523
|
-
|
|
527
|
+
const err = this.requireReady(message.type)
|
|
528
|
+
if (err) return { ok: false, violation: err }
|
|
529
|
+
const ann = message as import('./types.js').Draft13Announce
|
|
530
|
+
const nsKey = ann.track_namespace.join('/')
|
|
531
|
+
this._requestIds.add(ann.request_id)
|
|
532
|
+
this._announces.set(nsKey, {
|
|
533
|
+
namespace: ann.track_namespace,
|
|
534
|
+
phase: 'pending',
|
|
535
|
+
})
|
|
536
|
+
return { ok: true, phase: this._phase, sideEffects }
|
|
524
537
|
}
|
|
525
538
|
|
|
526
539
|
private handleAnnounceOk(
|
|
527
540
|
message: Draft13Message,
|
|
528
541
|
sideEffects: SideEffect[],
|
|
529
542
|
): TransitionResult<Draft13MessageType> {
|
|
530
|
-
const err = this.requireReady(message.type)
|
|
531
|
-
if (err) return { ok: false, violation: err }
|
|
532
|
-
const ok = message as import(
|
|
533
|
-
const idErr = this.checkKnownRequestId(ok.request_id, message.type)
|
|
534
|
-
if (idErr) return { ok: false, violation: idErr }
|
|
535
|
-
return { ok: true, phase: this._phase, sideEffects }
|
|
543
|
+
const err = this.requireReady(message.type)
|
|
544
|
+
if (err) return { ok: false, violation: err }
|
|
545
|
+
const ok = message as import('./types.js').Draft13AnnounceOk
|
|
546
|
+
const idErr = this.checkKnownRequestId(ok.request_id, message.type)
|
|
547
|
+
if (idErr) return { ok: false, violation: idErr }
|
|
548
|
+
return { ok: true, phase: this._phase, sideEffects }
|
|
536
549
|
}
|
|
537
550
|
|
|
538
551
|
private handleAnnounceError(
|
|
539
552
|
message: Draft13Message,
|
|
540
553
|
sideEffects: SideEffect[],
|
|
541
554
|
): TransitionResult<Draft13MessageType> {
|
|
542
|
-
const err = this.requireReady(message.type)
|
|
543
|
-
if (err) return { ok: false, violation: err }
|
|
544
|
-
const annErr = message as import(
|
|
545
|
-
const idErr = this.checkKnownRequestId(annErr.request_id, message.type)
|
|
546
|
-
if (idErr) return { ok: false, violation: idErr }
|
|
547
|
-
return { ok: true, phase: this._phase, sideEffects }
|
|
555
|
+
const err = this.requireReady(message.type)
|
|
556
|
+
if (err) return { ok: false, violation: err }
|
|
557
|
+
const annErr = message as import('./types.js').Draft13AnnounceError
|
|
558
|
+
const idErr = this.checkKnownRequestId(annErr.request_id, message.type)
|
|
559
|
+
if (idErr) return { ok: false, violation: idErr }
|
|
560
|
+
return { ok: true, phase: this._phase, sideEffects }
|
|
548
561
|
}
|
|
549
562
|
|
|
550
563
|
private handleUnannounce(
|
|
551
564
|
message: Draft13Message,
|
|
552
565
|
sideEffects: SideEffect[],
|
|
553
566
|
): TransitionResult<Draft13MessageType> {
|
|
554
|
-
const err = this.requireReady(message.type)
|
|
555
|
-
if (err) return { ok: false, violation: err }
|
|
556
|
-
const unann = message as import(
|
|
557
|
-
const nsKey = unann.track_namespace.join(
|
|
558
|
-
const existing = this._announces.get(nsKey)
|
|
567
|
+
const err = this.requireReady(message.type)
|
|
568
|
+
if (err) return { ok: false, violation: err }
|
|
569
|
+
const unann = message as import('./types.js').Draft13Unannounce
|
|
570
|
+
const nsKey = unann.track_namespace.join('/')
|
|
571
|
+
const existing = this._announces.get(nsKey)
|
|
559
572
|
if (existing) {
|
|
560
|
-
this._announces.delete(nsKey)
|
|
561
|
-
sideEffects.push({
|
|
573
|
+
this._announces.delete(nsKey)
|
|
574
|
+
sideEffects.push({
|
|
575
|
+
type: 'announce-ended',
|
|
576
|
+
namespace: unann.track_namespace,
|
|
577
|
+
})
|
|
562
578
|
}
|
|
563
|
-
return { ok: true, phase: this._phase, sideEffects }
|
|
579
|
+
return { ok: true, phase: this._phase, sideEffects }
|
|
564
580
|
}
|
|
565
581
|
|
|
566
582
|
private handleAnnounceCancel(
|
|
567
583
|
message: Draft13Message,
|
|
568
584
|
sideEffects: SideEffect[],
|
|
569
585
|
): TransitionResult<Draft13MessageType> {
|
|
570
|
-
const err = this.requireReady(message.type)
|
|
571
|
-
if (err) return { ok: false, violation: err }
|
|
572
|
-
const cancel = message as import(
|
|
573
|
-
const nsKey = cancel.track_namespace.join(
|
|
574
|
-
const existing = this._announces.get(nsKey)
|
|
586
|
+
const err = this.requireReady(message.type)
|
|
587
|
+
if (err) return { ok: false, violation: err }
|
|
588
|
+
const cancel = message as import('./types.js').Draft13AnnounceCancel
|
|
589
|
+
const nsKey = cancel.track_namespace.join('/')
|
|
590
|
+
const existing = this._announces.get(nsKey)
|
|
575
591
|
if (existing) {
|
|
576
|
-
this._announces.delete(nsKey)
|
|
577
|
-
sideEffects.push({
|
|
592
|
+
this._announces.delete(nsKey)
|
|
593
|
+
sideEffects.push({
|
|
594
|
+
type: 'announce-ended',
|
|
595
|
+
namespace: cancel.track_namespace,
|
|
596
|
+
})
|
|
578
597
|
}
|
|
579
|
-
return { ok: true, phase: this._phase, sideEffects }
|
|
598
|
+
return { ok: true, phase: this._phase, sideEffects }
|
|
580
599
|
}
|
|
581
600
|
|
|
582
601
|
// ─── Publish lifecycle ───
|
|
@@ -585,37 +604,37 @@ export class Draft13SessionFSM {
|
|
|
585
604
|
message: Draft13Message,
|
|
586
605
|
sideEffects: SideEffect[],
|
|
587
606
|
): TransitionResult<Draft13MessageType> {
|
|
588
|
-
const err = this.requireReady(message.type)
|
|
589
|
-
if (err) return { ok: false, violation: err }
|
|
590
|
-
const pub = message as import(
|
|
591
|
-
const dupErr = this.checkDuplicateRequestId(pub.request_id, message.type)
|
|
592
|
-
if (dupErr) return { ok: false, violation: dupErr }
|
|
593
|
-
this._requestIds.add(pub.request_id)
|
|
594
|
-
return { ok: true, phase: this._phase, sideEffects }
|
|
607
|
+
const err = this.requireReady(message.type)
|
|
608
|
+
if (err) return { ok: false, violation: err }
|
|
609
|
+
const pub = message as import('./types.js').Draft13Publish
|
|
610
|
+
const dupErr = this.checkDuplicateRequestId(pub.request_id, message.type)
|
|
611
|
+
if (dupErr) return { ok: false, violation: dupErr }
|
|
612
|
+
this._requestIds.add(pub.request_id)
|
|
613
|
+
return { ok: true, phase: this._phase, sideEffects }
|
|
595
614
|
}
|
|
596
615
|
|
|
597
616
|
private handlePublishOk(
|
|
598
617
|
message: Draft13Message,
|
|
599
618
|
sideEffects: SideEffect[],
|
|
600
619
|
): TransitionResult<Draft13MessageType> {
|
|
601
|
-
const err = this.requireReady(message.type)
|
|
602
|
-
if (err) return { ok: false, violation: err }
|
|
603
|
-
const ok = message as import(
|
|
604
|
-
const idErr = this.checkKnownRequestId(ok.request_id, message.type)
|
|
605
|
-
if (idErr) return { ok: false, violation: idErr }
|
|
606
|
-
return { ok: true, phase: this._phase, sideEffects }
|
|
620
|
+
const err = this.requireReady(message.type)
|
|
621
|
+
if (err) return { ok: false, violation: err }
|
|
622
|
+
const ok = message as import('./types.js').Draft13PublishOk
|
|
623
|
+
const idErr = this.checkKnownRequestId(ok.request_id, message.type)
|
|
624
|
+
if (idErr) return { ok: false, violation: idErr }
|
|
625
|
+
return { ok: true, phase: this._phase, sideEffects }
|
|
607
626
|
}
|
|
608
627
|
|
|
609
628
|
private handlePublishError(
|
|
610
629
|
message: Draft13Message,
|
|
611
630
|
sideEffects: SideEffect[],
|
|
612
631
|
): TransitionResult<Draft13MessageType> {
|
|
613
|
-
const err = this.requireReady(message.type)
|
|
614
|
-
if (err) return { ok: false, violation: err }
|
|
615
|
-
const pubErr = message as import(
|
|
616
|
-
const idErr = this.checkKnownRequestId(pubErr.request_id, message.type)
|
|
617
|
-
if (idErr) return { ok: false, violation: idErr }
|
|
618
|
-
return { ok: true, phase: this._phase, sideEffects }
|
|
632
|
+
const err = this.requireReady(message.type)
|
|
633
|
+
if (err) return { ok: false, violation: err }
|
|
634
|
+
const pubErr = message as import('./types.js').Draft13PublishError
|
|
635
|
+
const idErr = this.checkKnownRequestId(pubErr.request_id, message.type)
|
|
636
|
+
if (idErr) return { ok: false, violation: idErr }
|
|
637
|
+
return { ok: true, phase: this._phase, sideEffects }
|
|
619
638
|
}
|
|
620
639
|
|
|
621
640
|
// ─── Fetch lifecycle ───
|
|
@@ -624,103 +643,110 @@ export class Draft13SessionFSM {
|
|
|
624
643
|
message: Draft13Message,
|
|
625
644
|
sideEffects: SideEffect[],
|
|
626
645
|
): TransitionResult<Draft13MessageType> {
|
|
627
|
-
const err = this.requireReady(message.type)
|
|
628
|
-
if (err) return { ok: false, violation: err }
|
|
629
|
-
const fetch = message as import(
|
|
630
|
-
const dupErr = this.checkDuplicateRequestId(fetch.request_id, message.type)
|
|
631
|
-
if (dupErr) return { ok: false, violation: dupErr }
|
|
632
|
-
this._requestIds.add(fetch.request_id)
|
|
633
|
-
this._fetches.set(fetch.request_id, {
|
|
634
|
-
|
|
646
|
+
const err = this.requireReady(message.type)
|
|
647
|
+
if (err) return { ok: false, violation: err }
|
|
648
|
+
const fetch = message as import('./types.js').Draft13Fetch
|
|
649
|
+
const dupErr = this.checkDuplicateRequestId(fetch.request_id, message.type)
|
|
650
|
+
if (dupErr) return { ok: false, violation: dupErr }
|
|
651
|
+
this._requestIds.add(fetch.request_id)
|
|
652
|
+
this._fetches.set(fetch.request_id, {
|
|
653
|
+
requestId: fetch.request_id,
|
|
654
|
+
phase: 'pending',
|
|
655
|
+
})
|
|
656
|
+
return { ok: true, phase: this._phase, sideEffects }
|
|
635
657
|
}
|
|
636
658
|
|
|
637
659
|
private handleFetchOk(
|
|
638
660
|
message: Draft13Message,
|
|
639
661
|
sideEffects: SideEffect[],
|
|
640
662
|
): TransitionResult<Draft13MessageType> {
|
|
641
|
-
const err = this.requireReady(message.type)
|
|
642
|
-
if (err) return { ok: false, violation: err }
|
|
643
|
-
const ok = message as import(
|
|
644
|
-
const idErr = this.checkKnownRequestId(ok.request_id, message.type)
|
|
645
|
-
if (idErr) return { ok: false, violation: idErr }
|
|
646
|
-
const existing = this._fetches.get(ok.request_id)
|
|
663
|
+
const err = this.requireReady(message.type)
|
|
664
|
+
if (err) return { ok: false, violation: err }
|
|
665
|
+
const ok = message as import('./types.js').Draft13FetchOk
|
|
666
|
+
const idErr = this.checkKnownRequestId(ok.request_id, message.type)
|
|
667
|
+
if (idErr) return { ok: false, violation: idErr }
|
|
668
|
+
const existing = this._fetches.get(ok.request_id)
|
|
647
669
|
if (!existing)
|
|
648
670
|
return {
|
|
649
671
|
ok: false,
|
|
650
672
|
violation: violation(
|
|
651
|
-
|
|
673
|
+
'UNKNOWN_REQUEST_ID',
|
|
652
674
|
`No fetch with request ID ${ok.request_id}`,
|
|
653
675
|
this._phase,
|
|
654
676
|
message.type,
|
|
655
677
|
),
|
|
656
|
-
}
|
|
657
|
-
if (existing.phase !==
|
|
678
|
+
}
|
|
679
|
+
if (existing.phase !== 'pending')
|
|
658
680
|
return {
|
|
659
681
|
ok: false,
|
|
660
682
|
violation: violation(
|
|
661
|
-
|
|
683
|
+
'STATE_VIOLATION',
|
|
662
684
|
`Fetch ${ok.request_id} is ${existing.phase}, not pending`,
|
|
663
685
|
this._phase,
|
|
664
686
|
message.type,
|
|
665
687
|
),
|
|
666
|
-
}
|
|
667
|
-
this._fetches.set(ok.request_id, { ...existing, phase:
|
|
668
|
-
sideEffects.push({ type:
|
|
669
|
-
return { ok: true, phase: this._phase, sideEffects }
|
|
688
|
+
}
|
|
689
|
+
this._fetches.set(ok.request_id, { ...existing, phase: 'active' })
|
|
690
|
+
sideEffects.push({ type: 'fetch-activated', requestId: ok.request_id })
|
|
691
|
+
return { ok: true, phase: this._phase, sideEffects }
|
|
670
692
|
}
|
|
671
693
|
|
|
672
694
|
private handleFetchError(
|
|
673
695
|
message: Draft13Message,
|
|
674
696
|
sideEffects: SideEffect[],
|
|
675
697
|
): TransitionResult<Draft13MessageType> {
|
|
676
|
-
const err = this.requireReady(message.type)
|
|
677
|
-
if (err) return { ok: false, violation: err }
|
|
678
|
-
const fetchErr = message as import(
|
|
679
|
-
const idErr = this.checkKnownRequestId(fetchErr.request_id, message.type)
|
|
680
|
-
if (idErr) return { ok: false, violation: idErr }
|
|
681
|
-
const existing = this._fetches.get(fetchErr.request_id)
|
|
698
|
+
const err = this.requireReady(message.type)
|
|
699
|
+
if (err) return { ok: false, violation: err }
|
|
700
|
+
const fetchErr = message as import('./types.js').Draft13FetchError
|
|
701
|
+
const idErr = this.checkKnownRequestId(fetchErr.request_id, message.type)
|
|
702
|
+
if (idErr) return { ok: false, violation: idErr }
|
|
703
|
+
const existing = this._fetches.get(fetchErr.request_id)
|
|
682
704
|
if (!existing)
|
|
683
705
|
return {
|
|
684
706
|
ok: false,
|
|
685
707
|
violation: violation(
|
|
686
|
-
|
|
708
|
+
'UNKNOWN_REQUEST_ID',
|
|
687
709
|
`No fetch with request ID ${fetchErr.request_id}`,
|
|
688
710
|
this._phase,
|
|
689
711
|
message.type,
|
|
690
712
|
),
|
|
691
|
-
}
|
|
692
|
-
this._fetches.set(fetchErr.request_id, { ...existing, phase:
|
|
713
|
+
}
|
|
714
|
+
this._fetches.set(fetchErr.request_id, { ...existing, phase: 'error' })
|
|
693
715
|
sideEffects.push({
|
|
694
|
-
type:
|
|
716
|
+
type: 'fetch-ended',
|
|
695
717
|
requestId: fetchErr.request_id,
|
|
696
718
|
reason: fetchErr.reason_phrase,
|
|
697
|
-
})
|
|
698
|
-
return { ok: true, phase: this._phase, sideEffects }
|
|
719
|
+
})
|
|
720
|
+
return { ok: true, phase: this._phase, sideEffects }
|
|
699
721
|
}
|
|
700
722
|
|
|
701
723
|
private handleFetchCancel(
|
|
702
724
|
message: Draft13Message,
|
|
703
725
|
sideEffects: SideEffect[],
|
|
704
726
|
): TransitionResult<Draft13MessageType> {
|
|
705
|
-
const err = this.requireReady(message.type)
|
|
706
|
-
if (err) return { ok: false, violation: err }
|
|
707
|
-
const cancel = message as import(
|
|
708
|
-
const idErr = this.checkKnownRequestId(cancel.request_id, message.type)
|
|
709
|
-
if (idErr) return { ok: false, violation: idErr }
|
|
710
|
-
const existing = this._fetches.get(cancel.request_id)
|
|
727
|
+
const err = this.requireReady(message.type)
|
|
728
|
+
if (err) return { ok: false, violation: err }
|
|
729
|
+
const cancel = message as import('./types.js').Draft13FetchCancel
|
|
730
|
+
const idErr = this.checkKnownRequestId(cancel.request_id, message.type)
|
|
731
|
+
if (idErr) return { ok: false, violation: idErr }
|
|
732
|
+
const existing = this._fetches.get(cancel.request_id)
|
|
711
733
|
if (!existing)
|
|
712
734
|
return {
|
|
713
735
|
ok: false,
|
|
714
736
|
violation: violation(
|
|
715
|
-
|
|
737
|
+
'UNKNOWN_REQUEST_ID',
|
|
716
738
|
`No fetch with request ID ${cancel.request_id}`,
|
|
717
739
|
this._phase,
|
|
718
740
|
message.type,
|
|
719
741
|
),
|
|
720
|
-
}
|
|
721
|
-
this._fetches.set(cancel.request_id, { ...existing, phase:
|
|
722
|
-
sideEffects.push({
|
|
723
|
-
|
|
742
|
+
}
|
|
743
|
+
this._fetches.set(cancel.request_id, { ...existing, phase: 'cancelled' })
|
|
744
|
+
sideEffects.push({
|
|
745
|
+
type: 'fetch-ended',
|
|
746
|
+
requestId: cancel.request_id,
|
|
747
|
+
reason: 'cancelled',
|
|
748
|
+
})
|
|
749
|
+
return { ok: true, phase: this._phase, sideEffects }
|
|
724
750
|
}
|
|
725
751
|
|
|
726
752
|
// ─── Track status lifecycle ───
|
|
@@ -729,37 +755,37 @@ export class Draft13SessionFSM {
|
|
|
729
755
|
message: Draft13Message,
|
|
730
756
|
sideEffects: SideEffect[],
|
|
731
757
|
): TransitionResult<Draft13MessageType> {
|
|
732
|
-
const err = this.requireReady(message.type)
|
|
733
|
-
if (err) return { ok: false, violation: err }
|
|
734
|
-
const ts = message as import(
|
|
735
|
-
const dupErr = this.checkDuplicateRequestId(ts.request_id, message.type)
|
|
736
|
-
if (dupErr) return { ok: false, violation: dupErr }
|
|
737
|
-
this._requestIds.add(ts.request_id)
|
|
738
|
-
return { ok: true, phase: this._phase, sideEffects }
|
|
758
|
+
const err = this.requireReady(message.type)
|
|
759
|
+
if (err) return { ok: false, violation: err }
|
|
760
|
+
const ts = message as import('./types.js').Draft13TrackStatus
|
|
761
|
+
const dupErr = this.checkDuplicateRequestId(ts.request_id, message.type)
|
|
762
|
+
if (dupErr) return { ok: false, violation: dupErr }
|
|
763
|
+
this._requestIds.add(ts.request_id)
|
|
764
|
+
return { ok: true, phase: this._phase, sideEffects }
|
|
739
765
|
}
|
|
740
766
|
|
|
741
767
|
private handleTrackStatusOk(
|
|
742
768
|
message: Draft13Message,
|
|
743
769
|
sideEffects: SideEffect[],
|
|
744
770
|
): TransitionResult<Draft13MessageType> {
|
|
745
|
-
const err = this.requireReady(message.type)
|
|
746
|
-
if (err) return { ok: false, violation: err }
|
|
747
|
-
const ok = message as import(
|
|
748
|
-
const idErr = this.checkKnownRequestId(ok.request_id, message.type)
|
|
749
|
-
if (idErr) return { ok: false, violation: idErr }
|
|
750
|
-
return { ok: true, phase: this._phase, sideEffects }
|
|
771
|
+
const err = this.requireReady(message.type)
|
|
772
|
+
if (err) return { ok: false, violation: err }
|
|
773
|
+
const ok = message as import('./types.js').Draft13TrackStatusOk
|
|
774
|
+
const idErr = this.checkKnownRequestId(ok.request_id, message.type)
|
|
775
|
+
if (idErr) return { ok: false, violation: idErr }
|
|
776
|
+
return { ok: true, phase: this._phase, sideEffects }
|
|
751
777
|
}
|
|
752
778
|
|
|
753
779
|
private handleTrackStatusError(
|
|
754
780
|
message: Draft13Message,
|
|
755
781
|
sideEffects: SideEffect[],
|
|
756
782
|
): TransitionResult<Draft13MessageType> {
|
|
757
|
-
const err = this.requireReady(message.type)
|
|
758
|
-
if (err) return { ok: false, violation: err }
|
|
759
|
-
const tsErr = message as import(
|
|
760
|
-
const idErr = this.checkKnownRequestId(tsErr.request_id, message.type)
|
|
761
|
-
if (idErr) return { ok: false, violation: idErr }
|
|
762
|
-
return { ok: true, phase: this._phase, sideEffects }
|
|
783
|
+
const err = this.requireReady(message.type)
|
|
784
|
+
if (err) return { ok: false, violation: err }
|
|
785
|
+
const tsErr = message as import('./types.js').Draft13TrackStatusError
|
|
786
|
+
const idErr = this.checkKnownRequestId(tsErr.request_id, message.type)
|
|
787
|
+
if (idErr) return { ok: false, violation: idErr }
|
|
788
|
+
return { ok: true, phase: this._phase, sideEffects }
|
|
763
789
|
}
|
|
764
790
|
|
|
765
791
|
// ─── Subscribe namespace lifecycle ───
|
|
@@ -768,52 +794,52 @@ export class Draft13SessionFSM {
|
|
|
768
794
|
message: Draft13Message,
|
|
769
795
|
sideEffects: SideEffect[],
|
|
770
796
|
): TransitionResult<Draft13MessageType> {
|
|
771
|
-
const err = this.requireReady(message.type)
|
|
772
|
-
if (err) return { ok: false, violation: err }
|
|
773
|
-
const sn = message as import(
|
|
774
|
-
const dupErr = this.checkDuplicateRequestId(sn.request_id, message.type)
|
|
775
|
-
if (dupErr) return { ok: false, violation: dupErr }
|
|
776
|
-
this._requestIds.add(sn.request_id)
|
|
777
|
-
return { ok: true, phase: this._phase, sideEffects }
|
|
797
|
+
const err = this.requireReady(message.type)
|
|
798
|
+
if (err) return { ok: false, violation: err }
|
|
799
|
+
const sn = message as import('./types.js').Draft13SubscribeNamespace
|
|
800
|
+
const dupErr = this.checkDuplicateRequestId(sn.request_id, message.type)
|
|
801
|
+
if (dupErr) return { ok: false, violation: dupErr }
|
|
802
|
+
this._requestIds.add(sn.request_id)
|
|
803
|
+
return { ok: true, phase: this._phase, sideEffects }
|
|
778
804
|
}
|
|
779
805
|
|
|
780
806
|
private handleSubscribeNamespaceOk(
|
|
781
807
|
message: Draft13Message,
|
|
782
808
|
sideEffects: SideEffect[],
|
|
783
809
|
): TransitionResult<Draft13MessageType> {
|
|
784
|
-
const err = this.requireReady(message.type)
|
|
785
|
-
if (err) return { ok: false, violation: err }
|
|
786
|
-
const ok = message as import(
|
|
787
|
-
const idErr = this.checkKnownRequestId(ok.request_id, message.type)
|
|
788
|
-
if (idErr) return { ok: false, violation: idErr }
|
|
789
|
-
return { ok: true, phase: this._phase, sideEffects }
|
|
810
|
+
const err = this.requireReady(message.type)
|
|
811
|
+
if (err) return { ok: false, violation: err }
|
|
812
|
+
const ok = message as import('./types.js').Draft13SubscribeNamespaceOk
|
|
813
|
+
const idErr = this.checkKnownRequestId(ok.request_id, message.type)
|
|
814
|
+
if (idErr) return { ok: false, violation: idErr }
|
|
815
|
+
return { ok: true, phase: this._phase, sideEffects }
|
|
790
816
|
}
|
|
791
817
|
|
|
792
818
|
private handleSubscribeNamespaceError(
|
|
793
819
|
message: Draft13Message,
|
|
794
820
|
sideEffects: SideEffect[],
|
|
795
821
|
): TransitionResult<Draft13MessageType> {
|
|
796
|
-
const err = this.requireReady(message.type)
|
|
797
|
-
if (err) return { ok: false, violation: err }
|
|
798
|
-
const snErr = message as import(
|
|
799
|
-
const idErr = this.checkKnownRequestId(snErr.request_id, message.type)
|
|
800
|
-
if (idErr) return { ok: false, violation: idErr }
|
|
801
|
-
return { ok: true, phase: this._phase, sideEffects }
|
|
822
|
+
const err = this.requireReady(message.type)
|
|
823
|
+
if (err) return { ok: false, violation: err }
|
|
824
|
+
const snErr = message as import('./types.js').Draft13SubscribeNamespaceError
|
|
825
|
+
const idErr = this.checkKnownRequestId(snErr.request_id, message.type)
|
|
826
|
+
if (idErr) return { ok: false, violation: idErr }
|
|
827
|
+
return { ok: true, phase: this._phase, sideEffects }
|
|
802
828
|
}
|
|
803
829
|
|
|
804
830
|
// ─── Generic ready-phase handler ───
|
|
805
831
|
|
|
806
832
|
private handleReadyPhaseMessage(message: Draft13Message): TransitionResult<Draft13MessageType> {
|
|
807
|
-
const err = this.requireReady(message.type)
|
|
808
|
-
if (err) return { ok: false, violation: err }
|
|
809
|
-
return { ok: true, phase: this._phase, sideEffects: [] }
|
|
833
|
+
const err = this.requireReady(message.type)
|
|
834
|
+
if (err) return { ok: false, violation: err }
|
|
835
|
+
return { ok: true, phase: this._phase, sideEffects: [] }
|
|
810
836
|
}
|
|
811
837
|
|
|
812
838
|
reset(): void {
|
|
813
|
-
this._phase =
|
|
814
|
-
this._subscriptions.clear()
|
|
815
|
-
this._announces.clear()
|
|
816
|
-
this._fetches.clear()
|
|
817
|
-
this._requestIds.clear()
|
|
839
|
+
this._phase = 'idle'
|
|
840
|
+
this._subscriptions.clear()
|
|
841
|
+
this._announces.clear()
|
|
842
|
+
this._fetches.clear()
|
|
843
|
+
this._requestIds.clear()
|
|
818
844
|
}
|
|
819
845
|
}
|