@moqtap/codec 0.10.0 → 0.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (213) hide show
  1. package/CHANGELOG.md +147 -0
  2. package/dist/auth-redaction-DsdLq4Qs.d.cts +102 -0
  3. package/dist/auth-redaction-DsdLq4Qs.d.ts +102 -0
  4. package/dist/{chunk-RYKQXBG6.cjs → chunk-27K5BUAG.cjs} +481 -517
  5. package/dist/{chunk-WCPENYNE.js → chunk-3RNQMGKA.js} +359 -390
  6. package/dist/{chunk-TSUZ6GJV.js → chunk-5AWIXOLB.js} +438 -469
  7. package/dist/{chunk-4XLYCT5Q.cjs → chunk-5IMHJIAZ.cjs} +52 -2
  8. package/dist/{chunk-KTNERCTZ.cjs → chunk-5JGZCKJO.cjs} +488 -518
  9. package/dist/{chunk-WCTMPDUX.cjs → chunk-73K4OSAN.cjs} +401 -432
  10. package/dist/{chunk-N2V7Z37J.js → chunk-7VQKRGRD.js} +19 -3
  11. package/dist/{chunk-BIBMDTU5.cjs → chunk-A3UCQOIB.cjs} +486 -517
  12. package/dist/{chunk-K2B3OVFK.js → chunk-A7PDMVXM.js} +24 -3
  13. package/dist/{chunk-VZHL2U2N.cjs → chunk-A7VQO6YC.cjs} +54 -38
  14. package/dist/{chunk-AQ445VV7.cjs → chunk-ACQHZLRZ.cjs} +66 -46
  15. package/dist/{chunk-L5DRACXS.js → chunk-BBICOMW6.js} +25 -3
  16. package/dist/{chunk-T4VWPKDG.cjs → chunk-BNIUVOCJ.cjs} +529 -599
  17. package/dist/{chunk-UKKDOOUO.cjs → chunk-CNC6ANS4.cjs} +58 -37
  18. package/dist/{chunk-OZRK73NQ.js → chunk-FDLQSWHK.js} +433 -469
  19. package/dist/{chunk-IJAF6PAY.js → chunk-FFNOE4UR.js} +19 -3
  20. package/dist/{chunk-CZNW3R5E.cjs → chunk-GMENT63T.cjs} +54 -38
  21. package/dist/{chunk-XCRCAUGI.cjs → chunk-HM7BLRVP.cjs} +291 -297
  22. package/dist/{chunk-XHAP2YST.js → chunk-HZONHFNO.js} +19 -3
  23. package/dist/{chunk-SDJTSMOW.cjs → chunk-ILYABWDK.cjs} +60 -38
  24. package/dist/{chunk-IDV2JYJ6.cjs → chunk-KRSFTZVO.cjs} +56 -40
  25. package/dist/{chunk-RIIA4ALQ.cjs → chunk-KSPH6KMH.cjs} +54 -38
  26. package/dist/{chunk-OUNN4IQB.cjs → chunk-KTY4LAUV.cjs} +482 -497
  27. package/dist/{chunk-RZTLQAKF.js → chunk-OJNLJT5D.js} +0 -1
  28. package/dist/{chunk-FT3HDNIB.js → chunk-PJK2ZS3I.js} +467 -537
  29. package/dist/{chunk-G53WYUXL.js → chunk-PSMZKHOC.js} +441 -456
  30. package/dist/{chunk-7RE6KSIY.cjs → chunk-Q5JQGHWY.cjs} +0 -1
  31. package/dist/{chunk-BX2N7TZM.js → chunk-SQTUQY5E.js} +31 -11
  32. package/dist/{chunk-CF5DDD3Q.js → chunk-WCRLAKDW.js} +239 -245
  33. package/dist/{chunk-KYVTM5VI.js → chunk-WL2YUEXH.js} +19 -3
  34. package/dist/{chunk-KGDVC4O6.js → chunk-YCNIVZS7.js} +439 -469
  35. package/dist/{chunk-KLPWJU6W.js → chunk-YRZQVNZO.js} +50 -0
  36. package/dist/{codec-CFWu5KVT.d.cts → codec-76xzrLTL.d.cts} +21 -2
  37. package/dist/{codec-gl4_QEva.d.ts → codec-8p40WdLg.d.ts} +20 -1
  38. package/dist/{codec-Dl_QIXMz.d.ts → codec-BN2Bu0KI.d.ts} +20 -1
  39. package/dist/{codec-Bux_Q40X.d.ts → codec-Bb6GKTrv.d.ts} +21 -2
  40. package/dist/{codec-EvybrBuY.d.cts → codec-BgpfHoAd.d.cts} +20 -1
  41. package/dist/{codec-alVA27Uc.d.ts → codec-BkheTXO7.d.ts} +20 -1
  42. package/dist/{codec-Czejcmxr.d.cts → codec-BwVDkokh.d.cts} +21 -2
  43. package/dist/{codec-BrTi4K7r.d.cts → codec-C5s1eBJX.d.cts} +21 -2
  44. package/dist/codec-CM5yd6n3.d.ts +38 -0
  45. package/dist/{codec-CWnf8mn_.d.cts → codec-Cb8HC3XV.d.cts} +21 -2
  46. package/dist/codec-Clu_skx8.d.cts +38 -0
  47. package/dist/{codec-DzkdW4kO.d.cts → codec-CpOpemR8.d.cts} +20 -1
  48. package/dist/{codec-CXCjya_G.d.cts → codec-Cshdl9Tt.d.cts} +20 -1
  49. package/dist/{codec-f7vxeVIS.d.cts → codec-DELe00w_.d.cts} +21 -2
  50. package/dist/{codec-DNmiG2e0.d.cts → codec-DHzKAUCa.d.cts} +20 -1
  51. package/dist/{codec--CVeqGQv.d.ts → codec-DdVBtvx7.d.ts} +20 -1
  52. package/dist/{codec-CBdOIfMY.d.ts → codec-DlxGuYMv.d.ts} +21 -2
  53. package/dist/{codec-BNy5syCU.d.ts → codec-DxtgPxJS.d.ts} +20 -1
  54. package/dist/{codec-guzqtfMk.d.cts → codec-GAY4lybi.d.cts} +20 -1
  55. package/dist/{codec-Cfo_z5ET.d.cts → codec-I8u2pfS4.d.cts} +20 -1
  56. package/dist/{codec-BxQTybUX.d.cts → codec-XLrnreeu.d.cts} +21 -2
  57. package/dist/{codec-DOmAmFkI.d.ts → codec-c0YEwwWn.d.ts} +20 -1
  58. package/dist/{codec-DaXjRrOV.d.ts → codec-ejDu-va6.d.ts} +21 -2
  59. package/dist/{codec-C3mdsGx3.d.ts → codec-kaBUzdpV.d.ts} +21 -2
  60. package/dist/{codec-CwZ6OCPP.d.ts → codec-mVYqkIUF.d.ts} +21 -2
  61. package/dist/{codec-08ZOr5wI.d.ts → codec-qSbO5nOa.d.ts} +21 -2
  62. package/dist/{codec-Cm3D261p.d.ts → codec-yYKGOipj.d.ts} +20 -1
  63. package/dist/{codec-Bd60SGKH.d.cts → codec-zfzg9uiy.d.cts} +20 -1
  64. package/dist/draft07.cjs +48 -4
  65. package/dist/draft07.d.cts +42 -2
  66. package/dist/draft07.d.ts +42 -2
  67. package/dist/draft07.js +49 -5
  68. package/dist/draft08.cjs +76 -3
  69. package/dist/draft08.d.cts +70 -2
  70. package/dist/draft08.d.ts +70 -2
  71. package/dist/draft08.js +77 -4
  72. package/dist/draft09.cjs +76 -3
  73. package/dist/draft09.d.cts +70 -2
  74. package/dist/draft09.d.ts +70 -2
  75. package/dist/draft09.js +77 -4
  76. package/dist/draft10.cjs +76 -3
  77. package/dist/draft10.d.cts +70 -2
  78. package/dist/draft10.d.ts +70 -2
  79. package/dist/draft10.js +77 -4
  80. package/dist/draft11.cjs +104 -3
  81. package/dist/draft11.d.cts +98 -2
  82. package/dist/draft11.d.ts +98 -2
  83. package/dist/draft11.js +105 -4
  84. package/dist/draft12.cjs +113 -3
  85. package/dist/draft12.d.cts +107 -2
  86. package/dist/draft12.d.ts +107 -2
  87. package/dist/draft12.js +114 -4
  88. package/dist/draft13.cjs +105 -3
  89. package/dist/draft13.d.cts +99 -2
  90. package/dist/draft13.d.ts +99 -2
  91. package/dist/draft13.js +106 -4
  92. package/dist/draft14.cjs +107 -3
  93. package/dist/draft14.d.cts +101 -28
  94. package/dist/draft14.d.ts +101 -28
  95. package/dist/draft14.js +108 -4
  96. package/dist/draft15-session.d.cts +1 -1
  97. package/dist/draft15-session.d.ts +1 -1
  98. package/dist/draft15.cjs +69 -3
  99. package/dist/draft15.d.cts +65 -22
  100. package/dist/draft15.d.ts +65 -22
  101. package/dist/draft15.js +70 -4
  102. package/dist/draft16-session.cjs +2 -2
  103. package/dist/draft16-session.d.cts +1 -1
  104. package/dist/draft16-session.d.ts +1 -1
  105. package/dist/draft16-session.js +1 -1
  106. package/dist/draft16.cjs +76 -8
  107. package/dist/draft16.d.cts +67 -13
  108. package/dist/draft16.d.ts +67 -13
  109. package/dist/draft16.js +73 -5
  110. package/dist/draft17-session.d.cts +1 -1
  111. package/dist/draft17-session.d.ts +1 -1
  112. package/dist/draft17.cjs +77 -3
  113. package/dist/draft17.d.cts +73 -4
  114. package/dist/draft17.d.ts +73 -4
  115. package/dist/draft17.js +78 -4
  116. package/dist/draft18-session.d.cts +1 -1
  117. package/dist/draft18-session.d.ts +1 -1
  118. package/dist/draft18.cjs +8 -3
  119. package/dist/draft18.d.cts +4 -3
  120. package/dist/draft18.d.ts +4 -3
  121. package/dist/draft18.js +9 -4
  122. package/dist/draft19-session.d.cts +1 -1
  123. package/dist/draft19-session.d.ts +1 -1
  124. package/dist/draft19.cjs +11 -4
  125. package/dist/draft19.d.cts +4 -3
  126. package/dist/draft19.d.ts +4 -3
  127. package/dist/draft19.js +12 -5
  128. package/dist/draft20-session.d.cts +1 -1
  129. package/dist/draft20-session.d.ts +1 -1
  130. package/dist/draft20.cjs +8 -3
  131. package/dist/draft20.d.cts +4 -3
  132. package/dist/draft20.d.ts +4 -3
  133. package/dist/draft20.js +9 -4
  134. package/dist/index.cjs +30 -30
  135. package/dist/index.d.cts +21 -20
  136. package/dist/index.d.ts +21 -20
  137. package/dist/index.js +15 -15
  138. package/dist/session.cjs +2 -2
  139. package/dist/session.d.cts +6 -6
  140. package/dist/session.d.ts +6 -6
  141. package/dist/session.js +1 -1
  142. package/dist/{types-C1rxh-id.d.cts → types-Btp416jt.d.cts} +8 -0
  143. package/dist/{types-C1rxh-id.d.ts → types-Btp416jt.d.ts} +8 -0
  144. package/dist/{types-CZTzbIzQ.d.cts → types-BxTL1NXw.d.cts} +7 -0
  145. package/dist/{types-CZTzbIzQ.d.ts → types-BxTL1NXw.d.ts} +7 -0
  146. package/dist/{types-pShrs3fN.d.cts → types-CuibHYcf.d.cts} +7 -0
  147. package/dist/{types-pShrs3fN.d.ts → types-CuibHYcf.d.ts} +7 -0
  148. package/dist/{types-CY-QWxd-.d.cts → types-CwN7AEoL.d.cts} +13 -1
  149. package/dist/{types-CY-QWxd-.d.ts → types-CwN7AEoL.d.ts} +13 -1
  150. package/dist/{types-D4bmW8rY.d.cts → types-DAnalt5K.d.cts} +7 -0
  151. package/dist/{types-D4bmW8rY.d.ts → types-DAnalt5K.d.ts} +7 -0
  152. package/dist/{types-Bg86GGVZ.d.cts → types-DxXNP32l.d.cts} +8 -0
  153. package/dist/{types-Bg86GGVZ.d.ts → types-DxXNP32l.d.ts} +8 -0
  154. package/package.json +3 -3
  155. package/src/core/auth-redaction.ts +192 -0
  156. package/src/drafts/draft07/codec.ts +40 -0
  157. package/src/drafts/draft07/error-codes.ts +44 -0
  158. package/src/drafts/draft07/index.ts +15 -0
  159. package/src/drafts/draft08/codec.ts +40 -0
  160. package/src/drafts/draft08/error-codes.ts +76 -0
  161. package/src/drafts/draft08/index.ts +21 -0
  162. package/src/drafts/draft09/codec.ts +40 -0
  163. package/src/drafts/draft09/error-codes.ts +76 -0
  164. package/src/drafts/draft09/index.ts +21 -0
  165. package/src/drafts/draft10/codec.ts +40 -0
  166. package/src/drafts/draft10/error-codes.ts +76 -0
  167. package/src/drafts/draft10/index.ts +21 -0
  168. package/src/drafts/draft11/codec.ts +60 -0
  169. package/src/drafts/draft11/error-codes.ts +106 -0
  170. package/src/drafts/draft11/index.ts +23 -0
  171. package/src/drafts/draft12/codec.ts +61 -0
  172. package/src/drafts/draft12/error-codes.ts +116 -0
  173. package/src/drafts/draft12/index.ts +25 -0
  174. package/src/drafts/draft13/codec.ts +69 -11
  175. package/src/drafts/draft13/error-codes.ts +107 -0
  176. package/src/drafts/draft13/index.ts +23 -0
  177. package/src/drafts/draft13/types.ts +1 -1
  178. package/src/drafts/draft14/codec.ts +65 -4
  179. package/src/drafts/draft14/data-streams.ts +331 -259
  180. package/src/drafts/draft14/error-codes.ts +109 -0
  181. package/src/drafts/draft14/index.ts +23 -0
  182. package/src/drafts/draft15/codec.ts +65 -8
  183. package/src/drafts/draft15/data-streams.ts +489 -444
  184. package/src/drafts/draft15/error-codes.ts +66 -0
  185. package/src/drafts/draft15/index.ts +15 -0
  186. package/src/drafts/draft15/types.ts +7 -0
  187. package/src/drafts/draft16/codec.ts +146 -52
  188. package/src/drafts/draft16/data-streams.ts +513 -442
  189. package/src/drafts/draft16/error-codes.ts +68 -0
  190. package/src/drafts/draft16/index.ts +15 -0
  191. package/src/drafts/draft16/messages.ts +4 -4
  192. package/src/drafts/draft16/session-fsm.ts +0 -1
  193. package/src/drafts/draft16/types.ts +22 -8
  194. package/src/drafts/draft17/codec.ts +73 -12
  195. package/src/drafts/draft17/data-streams.ts +567 -488
  196. package/src/drafts/draft17/index.ts +15 -0
  197. package/src/drafts/draft17/types.ts +7 -0
  198. package/src/drafts/draft18/codec.ts +66 -9
  199. package/src/drafts/draft18/data-streams.ts +570 -482
  200. package/src/drafts/draft18/index.ts +3 -0
  201. package/src/drafts/draft18/types.ts +16 -8
  202. package/src/drafts/draft19/codec.ts +70 -10
  203. package/src/drafts/draft19/data-streams.ts +570 -482
  204. package/src/drafts/draft19/error-codes.ts +3 -1
  205. package/src/drafts/draft19/index.ts +3 -0
  206. package/src/drafts/draft19/messages.ts +3 -1
  207. package/src/drafts/draft19/types.ts +22 -11
  208. package/src/drafts/draft20/codec.ts +90 -23
  209. package/src/drafts/draft20/data-streams.ts +610 -563
  210. package/src/drafts/draft20/index.ts +3 -0
  211. package/src/drafts/draft20/types.ts +14 -2
  212. package/dist/codec-BJ7BHuiZ.d.ts +0 -18
  213. package/dist/codec-C6Mx4bwz.d.cts +0 -18
@@ -0,0 +1,109 @@
1
+ // Draft-14 error, status and termination code registries.
2
+
3
+ export const SessionErrorCode = {
4
+ NoError: 0x0n,
5
+ InternalError: 0x1n,
6
+ Unauthorized: 0x2n,
7
+ ProtocolViolation: 0x3n,
8
+ InvalidRequestId: 0x4n,
9
+ DuplicateTrackAlias: 0x5n,
10
+ KeyValueFormattingError: 0x6n,
11
+ TooManyRequests: 0x7n,
12
+ InvalidPath: 0x8n,
13
+ MalformedPath: 0x9n,
14
+ GoawayTimeout: 0x10n,
15
+ ControlMessageTimeout: 0x11n,
16
+ DataStreamTimeout: 0x12n,
17
+ AuthTokenCacheOverflow: 0x13n,
18
+ DuplicateAuthTokenAlias: 0x14n,
19
+ VersionNegotiationFailed: 0x15n,
20
+ MalformedAuthToken: 0x16n,
21
+ UnknownAuthTokenAlias: 0x17n,
22
+ ExpiredAuthToken: 0x18n,
23
+ InvalidAuthority: 0x19n,
24
+ MalformedAuthority: 0x1an,
25
+ } as const
26
+ export type SessionErrorCodeValue = (typeof SessionErrorCode)[keyof typeof SessionErrorCode]
27
+
28
+ export const SubscribeErrorCode = {
29
+ InternalError: 0x0n,
30
+ Unauthorized: 0x1n,
31
+ Timeout: 0x2n,
32
+ NotSupported: 0x3n,
33
+ TrackDoesNotExist: 0x4n,
34
+ InvalidRange: 0x5n,
35
+ MalformedAuthToken: 0x10n,
36
+ ExpiredAuthToken: 0x12n,
37
+ } as const
38
+ export type SubscribeErrorCodeValue = (typeof SubscribeErrorCode)[keyof typeof SubscribeErrorCode]
39
+
40
+ export const PublishDoneStatusCode = {
41
+ InternalError: 0x0n,
42
+ Unauthorized: 0x1n,
43
+ TrackEnded: 0x2n,
44
+ SubscriptionEnded: 0x3n,
45
+ GoingAway: 0x4n,
46
+ Expired: 0x5n,
47
+ TooFarBehind: 0x6n,
48
+ MalformedTrack: 0x7n,
49
+ } as const
50
+ export type PublishDoneStatusCodeValue =
51
+ (typeof PublishDoneStatusCode)[keyof typeof PublishDoneStatusCode]
52
+
53
+ export const PublishErrorCode = {
54
+ InternalError: 0x0n,
55
+ Unauthorized: 0x1n,
56
+ Timeout: 0x2n,
57
+ NotSupported: 0x3n,
58
+ Uninterested: 0x4n,
59
+ } as const
60
+ export type PublishErrorCodeValue = (typeof PublishErrorCode)[keyof typeof PublishErrorCode]
61
+
62
+ export const FetchErrorCode = {
63
+ InternalError: 0x0n,
64
+ Unauthorized: 0x1n,
65
+ Timeout: 0x2n,
66
+ NotSupported: 0x3n,
67
+ TrackDoesNotExist: 0x4n,
68
+ InvalidRange: 0x5n,
69
+ NoObjects: 0x6n,
70
+ InvalidJoiningRequestId: 0x7n,
71
+ UnknownStatusInRange: 0x8n,
72
+ MalformedTrack: 0x9n,
73
+ MalformedAuthToken: 0x10n,
74
+ ExpiredAuthToken: 0x12n,
75
+ } as const
76
+ export type FetchErrorCodeValue = (typeof FetchErrorCode)[keyof typeof FetchErrorCode]
77
+
78
+ export const AnnounceErrorCode = {
79
+ InternalError: 0x0n,
80
+ Unauthorized: 0x1n,
81
+ Timeout: 0x2n,
82
+ NotSupported: 0x3n,
83
+ Uninterested: 0x4n,
84
+ MalformedAuthToken: 0x10n,
85
+ ExpiredAuthToken: 0x12n,
86
+ } as const
87
+ export type AnnounceErrorCodeValue = (typeof AnnounceErrorCode)[keyof typeof AnnounceErrorCode]
88
+
89
+ export const SubscribeNamespaceErrorCode = {
90
+ InternalError: 0x0n,
91
+ Unauthorized: 0x1n,
92
+ Timeout: 0x2n,
93
+ NotSupported: 0x3n,
94
+ NamespacePrefixUnknown: 0x4n,
95
+ NamespacePrefixOverlap: 0x5n,
96
+ MalformedAuthToken: 0x10n,
97
+ ExpiredAuthToken: 0x12n,
98
+ } as const
99
+ export type SubscribeNamespaceErrorCodeValue =
100
+ (typeof SubscribeNamespaceErrorCode)[keyof typeof SubscribeNamespaceErrorCode]
101
+
102
+ export const DataStreamResetErrorCode = {
103
+ InternalError: 0x0n,
104
+ Cancelled: 0x1n,
105
+ DeliveryTimeout: 0x2n,
106
+ SessionClosed: 0x3n,
107
+ } as const
108
+ export type DataStreamResetErrorCodeValue =
109
+ (typeof DataStreamResetErrorCode)[keyof typeof DataStreamResetErrorCode]
@@ -1,5 +1,7 @@
1
1
  export const DRAFT_VERSION = 0xff00000en
2
2
 
3
+ export type { AuthRedaction } from '../../core/auth-redaction.js'
4
+ export { REDACTION_FILL } from '../../core/auth-redaction.js'
3
5
  export type { Draft14Codec } from './codec.js'
4
6
  export {
5
7
  createDataStreamDecoder,
@@ -16,7 +18,28 @@ export {
16
18
  encodeFetchStream,
17
19
  encodeMessage,
18
20
  encodeSubgroupStream,
21
+ redactAuthTokens,
19
22
  } from './codec.js'
23
+ export type {
24
+ AnnounceErrorCodeValue,
25
+ DataStreamResetErrorCodeValue,
26
+ FetchErrorCodeValue,
27
+ PublishDoneStatusCodeValue,
28
+ PublishErrorCodeValue,
29
+ SessionErrorCodeValue,
30
+ SubscribeErrorCodeValue,
31
+ SubscribeNamespaceErrorCodeValue,
32
+ } from './error-codes.js'
33
+ export {
34
+ AnnounceErrorCode,
35
+ DataStreamResetErrorCode,
36
+ FetchErrorCode,
37
+ PublishDoneStatusCode,
38
+ PublishErrorCode,
39
+ SessionErrorCode,
40
+ SubscribeErrorCode,
41
+ SubscribeNamespaceErrorCode,
42
+ } from './error-codes.js'
20
43
  export {
21
44
  MESSAGE_ID_MAP,
22
45
  MESSAGE_TYPE_MAP,
@@ -1,3 +1,4 @@
1
+ import { type AuthRedaction, recordAuthValueSpan, redactWith } from '../../core/auth-redaction.js'
1
2
  import { BufferReader } from '../../core/buffer-reader.js'
2
3
  import { BufferWriter } from '../../core/buffer-writer.js'
3
4
  import { bytesToHex, hexToBytes } from '../../core/hex.js'
@@ -170,10 +171,9 @@ function decodeSetupParams(reader: BufferReader): Draft15SetupParams {
170
171
  if (paramType === SETUP_PARAM_PATH) {
171
172
  result.path = textDecoder.decode(bytes)
172
173
  } else if (paramType === SETUP_PARAM_AUTHORIZATION_TOKEN) {
173
- result.authorization_token = [
174
- ...(result.authorization_token ?? []),
175
- decodeAuthorizationToken(new BufferReader(bytes)),
176
- ]
174
+ const token = decodeAuthorizationToken(new BufferReader(bytes))
175
+ noteAuthTokenValue(reader.offset - length, length, token.token_value)
176
+ result.authorization_token = [...(result.authorization_token ?? []), token]
177
177
  } else if (paramType === SETUP_PARAM_AUTHORITY) {
178
178
  result.authority = textDecoder.decode(bytes)
179
179
  } else if (paramType === SETUP_PARAM_MOQT_IMPLEMENTATION) {
@@ -361,10 +361,9 @@ function decodeParams(reader: BufferReader): Draft15Params {
361
361
  } else if (paramType === PARAM_AUTHORIZATION_TOKEN) {
362
362
  const length = Number(reader.readVarInt())
363
363
  const tokenBytes = reader.readBytes(length)
364
- result.authorization_token = [
365
- ...(result.authorization_token ?? []),
366
- decodeAuthorizationToken(new BufferReader(tokenBytes)),
367
- ]
364
+ const token = decodeAuthorizationToken(new BufferReader(tokenBytes))
365
+ noteAuthTokenValue(reader.offset - length, length, token.token_value)
366
+ result.authorization_token = [...(result.authorization_token ?? []), token]
368
367
  } else if (paramType === PARAM_MAX_CACHE_DURATION) {
369
368
  result.max_cache_duration = reader.readVarInt()
370
369
  } else if (paramType === PARAM_EXPIRES) {
@@ -1140,3 +1139,61 @@ export function createDraft15Codec(): Draft15Codec {
1140
1139
  createDataStreamDecoder,
1141
1140
  }
1142
1141
  }
1142
+
1143
+ /**
1144
+ * Record where a Token Value sits, so it can be overwritten before the frame
1145
+ * reaches anything that keeps it.
1146
+ *
1147
+ * The span falls out of the decode with no second walk. The Token Value is the
1148
+ * last field of the Token structure, so its start is the parameter value's end
1149
+ * minus the value's own length. The fields before it are left alone
1150
+ * deliberately: Alias Type, Token Alias and Token Type are structure rather
1151
+ * than secret, and they are what distinguishes a session that failed to
1152
+ * authenticate from one that never tried.
1153
+ *
1154
+ * A token carrying no value at all -- DELETE and USE_ALIAS -- records nothing,
1155
+ * and its frame passes through untouched.
1156
+ */
1157
+ function noteAuthTokenValue(
1158
+ valueStart: number,
1159
+ valueLength: number,
1160
+ value: Uint8Array | undefined,
1161
+ ): void {
1162
+ if (value === undefined || value.byteLength === 0) return
1163
+ recordAuthValueSpan(valueStart + valueLength - value.byteLength, value.byteLength)
1164
+ }
1165
+
1166
+ /**
1167
+ * Overwrite every Authorization Token value in a draft-15 control frame.
1168
+ *
1169
+ * One decode, whose *output is discarded*: the point is not to read the
1170
+ * message, it is to learn where the credentials were so the caller never has to
1171
+ * hold a frame that contains one. A caller that also wants the message should
1172
+ * decode the **redacted** frame with {@link decodeMessage}, which then cannot
1173
+ * produce a value because there is no longer one in the bytes.
1174
+ *
1175
+ * A frame that fails to decode is still redacted as far as the decode got. That
1176
+ * is the useful direction to fail in: a value that was read is a value that was
1177
+ * exposed, whatever went wrong after it.
1178
+ *
1179
+ * See {@link AuthRedaction.incomplete} for the one result a caller must not
1180
+ * treat as clean, and {@link AuthRedaction.decoded} for the residual it cannot
1181
+ * close.
1182
+ */
1183
+ export function redactAuthTokens(bytes: Uint8Array): AuthRedaction {
1184
+ let payloadStart: number
1185
+ try {
1186
+ const probe = new BufferReader(bytes)
1187
+ probe.readVarInt()
1188
+ probe.readUint8()
1189
+ probe.readUint8()
1190
+ payloadStart = probe.offset
1191
+ } catch {
1192
+ // Too short to carry a message header, and so too short for the parameters
1193
+ // that carry a credential. Reported as not decoded rather than as clean: a
1194
+ // framer only ever emits complete frames, so a caller that gets here is
1195
+ // holding something this function did not check.
1196
+ return { bytes, redacted: 0, incomplete: false, decoded: false }
1197
+ }
1198
+ return redactWith(bytes, payloadStart, () => decodeMessage(bytes).ok)
1199
+ }