homebridge-plugin-utils 1.35.0 → 2.0.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 (198) hide show
  1. package/README.md +130 -2
  2. package/build/eslint-plugin/README.md +164 -0
  3. package/build/eslint-plugin/config.mjs +308 -0
  4. package/build/eslint-plugin/index.mjs +7 -0
  5. package/build/eslint-plugin/plugin.mjs +46 -0
  6. package/build/eslint-plugin/rules/blank-line-after-open-brace.mjs +137 -0
  7. package/build/eslint-plugin/rules/blank-line-after-open-brace.test.mjs +112 -0
  8. package/build/eslint-plugin/rules/comment-style.mjs +190 -0
  9. package/build/eslint-plugin/rules/comment-style.test.mjs +190 -0
  10. package/build/eslint-plugin/rules/enforce-node-protocol.mjs +114 -0
  11. package/build/eslint-plugin/rules/enforce-node-protocol.test.mjs +116 -0
  12. package/build/eslint-plugin/rules/paren-comparisons-in-logical.mjs +94 -0
  13. package/build/eslint-plugin/rules/paren-comparisons-in-logical.test.mjs +107 -0
  14. package/build/eslint-plugin/rules/split-type-imports.mjs +354 -0
  15. package/build/eslint-plugin/rules/split-type-imports.test.mjs +268 -0
  16. package/build/eslint-plugin/test-setup.mjs +21 -0
  17. package/build/fs-ops.mjs +184 -0
  18. package/build/tsconfig.json +18 -3
  19. package/dist/backpressure.d.ts +94 -45
  20. package/dist/backpressure.js +229 -93
  21. package/dist/backpressure.js.map +1 -1
  22. package/dist/cli/index.d.ts +95 -0
  23. package/dist/cli/index.js +355 -0
  24. package/dist/cli/index.js.map +1 -0
  25. package/dist/clock-double.d.ts +93 -0
  26. package/dist/clock-double.js +141 -0
  27. package/dist/clock-double.js.map +1 -0
  28. package/dist/clock.d.ts +39 -0
  29. package/dist/clock.js +34 -0
  30. package/dist/clock.js.map +1 -0
  31. package/dist/eslint-plugin/config.d.mts +193 -0
  32. package/dist/eslint-plugin/index.d.mts +2 -0
  33. package/dist/eslint-plugin/plugin.d.mts +87 -0
  34. package/dist/eslint-plugin/rules/blank-line-after-open-brace.d.mts +19 -0
  35. package/dist/eslint-plugin/rules/comment-style.d.mts +15 -0
  36. package/dist/eslint-plugin/rules/enforce-node-protocol.d.mts +18 -0
  37. package/dist/eslint-plugin/rules/paren-comparisons-in-logical.d.mts +15 -0
  38. package/dist/eslint-plugin/rules/split-type-imports.d.mts +16 -0
  39. package/dist/featureOptions-docs.d.ts +96 -0
  40. package/dist/featureOptions-docs.js +193 -0
  41. package/dist/featureOptions-docs.js.map +1 -0
  42. package/dist/featureOptions.d.ts +674 -0
  43. package/dist/featureOptions.js +870 -0
  44. package/dist/featureOptions.js.map +1 -0
  45. package/dist/ffmpeg/codecs.d.ts +256 -72
  46. package/dist/ffmpeg/codecs.js +477 -262
  47. package/dist/ffmpeg/codecs.js.map +1 -1
  48. package/dist/ffmpeg/dgram-util.d.ts +46 -0
  49. package/dist/ffmpeg/dgram-util.js +38 -0
  50. package/dist/ffmpeg/dgram-util.js.map +1 -0
  51. package/dist/ffmpeg/exec.d.ts +83 -64
  52. package/dist/ffmpeg/exec.js +77 -86
  53. package/dist/ffmpeg/exec.js.map +1 -1
  54. package/dist/ffmpeg/fmp4.d.ts +49 -2
  55. package/dist/ffmpeg/fmp4.js +47 -11
  56. package/dist/ffmpeg/fmp4.js.map +1 -1
  57. package/dist/ffmpeg/hap-enums.d.ts +214 -0
  58. package/dist/ffmpeg/hap-enums.js +92 -0
  59. package/dist/ffmpeg/hap-enums.js.map +1 -0
  60. package/dist/ffmpeg/index.d.ts +16 -9
  61. package/dist/ffmpeg/index.js +6 -0
  62. package/dist/ffmpeg/index.js.map +1 -1
  63. package/dist/ffmpeg/mp4-assembler.d.ts +120 -0
  64. package/dist/ffmpeg/mp4-assembler.js +387 -0
  65. package/dist/ffmpeg/mp4-assembler.js.map +1 -0
  66. package/dist/ffmpeg/mp4-parser.d.ts +94 -0
  67. package/dist/ffmpeg/mp4-parser.js +130 -0
  68. package/dist/ffmpeg/mp4-parser.js.map +1 -0
  69. package/dist/ffmpeg/options.d.ts +62 -149
  70. package/dist/ffmpeg/options.js +608 -499
  71. package/dist/ffmpeg/options.js.map +1 -1
  72. package/dist/ffmpeg/process.d.ts +142 -96
  73. package/dist/ffmpeg/process.js +406 -278
  74. package/dist/ffmpeg/process.js.map +1 -1
  75. package/dist/ffmpeg/record.d.ts +302 -188
  76. package/dist/ffmpeg/record.js +408 -567
  77. package/dist/ffmpeg/record.js.map +1 -1
  78. package/dist/ffmpeg/recording-process-double.d.ts +144 -0
  79. package/dist/ffmpeg/recording-process-double.js +168 -0
  80. package/dist/ffmpeg/recording-process-double.js.map +1 -0
  81. package/dist/ffmpeg/rtp-parser.d.ts +70 -0
  82. package/dist/ffmpeg/rtp-parser.js +77 -0
  83. package/dist/ffmpeg/rtp-parser.js.map +1 -0
  84. package/dist/ffmpeg/rtp.d.ts +198 -141
  85. package/dist/ffmpeg/rtp.js +473 -251
  86. package/dist/ffmpeg/rtp.js.map +1 -1
  87. package/dist/ffmpeg/settings.d.ts +5 -2
  88. package/dist/ffmpeg/settings.js +20 -5
  89. package/dist/ffmpeg/settings.js.map +1 -1
  90. package/dist/ffmpeg/stream.d.ts +57 -107
  91. package/dist/ffmpeg/stream.js +121 -150
  92. package/dist/ffmpeg/stream.js.map +1 -1
  93. package/dist/formatters.d.ts +106 -0
  94. package/dist/formatters.js +174 -0
  95. package/dist/formatters.js.map +1 -0
  96. package/dist/homebridge-enums.d.ts +30 -0
  97. package/dist/homebridge-enums.js +17 -0
  98. package/dist/homebridge-enums.js.map +1 -0
  99. package/dist/index.d.ts +12 -6
  100. package/dist/index.js +7 -2
  101. package/dist/index.js.map +1 -1
  102. package/dist/logclient/auth.d.ts +114 -0
  103. package/dist/logclient/auth.js +199 -0
  104. package/dist/logclient/auth.js.map +1 -0
  105. package/dist/logclient/cli-run.d.ts +76 -0
  106. package/dist/logclient/cli-run.js +639 -0
  107. package/dist/logclient/cli-run.js.map +1 -0
  108. package/dist/logclient/cli.d.ts +3 -0
  109. package/dist/logclient/cli.js +97 -0
  110. package/dist/logclient/cli.js.map +1 -0
  111. package/dist/logclient/client.d.ts +145 -0
  112. package/dist/logclient/client.js +600 -0
  113. package/dist/logclient/client.js.map +1 -0
  114. package/dist/logclient/config.d.ts +173 -0
  115. package/dist/logclient/config.js +199 -0
  116. package/dist/logclient/config.js.map +1 -0
  117. package/dist/logclient/endpoints.d.ts +54 -0
  118. package/dist/logclient/endpoints.js +73 -0
  119. package/dist/logclient/endpoints.js.map +1 -0
  120. package/dist/logclient/filter.d.ts +45 -0
  121. package/dist/logclient/filter.js +51 -0
  122. package/dist/logclient/filter.js.map +1 -0
  123. package/dist/logclient/frame.d.ts +93 -0
  124. package/dist/logclient/frame.js +203 -0
  125. package/dist/logclient/frame.js.map +1 -0
  126. package/dist/logclient/index.d.ts +31 -0
  127. package/dist/logclient/index.js +12 -0
  128. package/dist/logclient/index.js.map +1 -0
  129. package/dist/logclient/parser.d.ts +211 -0
  130. package/dist/logclient/parser.js +393 -0
  131. package/dist/logclient/parser.js.map +1 -0
  132. package/dist/logclient/rest.d.ts +41 -0
  133. package/dist/logclient/rest.js +111 -0
  134. package/dist/logclient/rest.js.map +1 -0
  135. package/dist/logclient/settings.d.ts +15 -0
  136. package/dist/logclient/settings.js +64 -0
  137. package/dist/logclient/settings.js.map +1 -0
  138. package/dist/logclient/socket-double.d.ts +201 -0
  139. package/dist/logclient/socket-double.js +384 -0
  140. package/dist/logclient/socket-double.js.map +1 -0
  141. package/dist/logclient/socket.d.ts +257 -0
  142. package/dist/logclient/socket.js +620 -0
  143. package/dist/logclient/socket.js.map +1 -0
  144. package/dist/logclient/stitch.d.ts +83 -0
  145. package/dist/logclient/stitch.js +146 -0
  146. package/dist/logclient/stitch.js.map +1 -0
  147. package/dist/logclient/time-expression.d.ts +42 -0
  148. package/dist/logclient/time-expression.js +181 -0
  149. package/dist/logclient/time-expression.js.map +1 -0
  150. package/dist/logclient/time-window.d.ts +38 -0
  151. package/dist/logclient/time-window.js +53 -0
  152. package/dist/logclient/time-window.js.map +1 -0
  153. package/dist/logclient/types.d.ts +107 -0
  154. package/dist/logclient/types.js +6 -0
  155. package/dist/logclient/types.js.map +1 -0
  156. package/dist/mqttClient.d.ts +287 -0
  157. package/dist/mqttClient.js +433 -0
  158. package/dist/mqttClient.js.map +1 -0
  159. package/dist/service.d.ts +64 -15
  160. package/dist/service.js +93 -66
  161. package/dist/service.js.map +1 -1
  162. package/dist/ui/featureOptions.js +870 -0
  163. package/dist/ui/featureOptions.js.map +1 -0
  164. package/dist/ui/formatters.js +174 -0
  165. package/dist/ui/formatters.js.map +1 -0
  166. package/dist/ui/pluginConfigSession.mjs +141 -0
  167. package/dist/ui/webUi-featureOptions/categoryState.mjs +135 -0
  168. package/dist/ui/webUi-featureOptions/effects/keyboard.mjs +61 -0
  169. package/dist/ui/webUi-featureOptions/effects/persist.mjs +226 -0
  170. package/dist/ui/webUi-featureOptions/effects/theme.mjs +398 -0
  171. package/dist/ui/webUi-featureOptions/effects/tokens.mjs +152 -0
  172. package/dist/ui/webUi-featureOptions/rendering.mjs +431 -0
  173. package/dist/ui/webUi-featureOptions/selectors.mjs +360 -0
  174. package/dist/ui/webUi-featureOptions/state.mjs +319 -0
  175. package/dist/ui/webUi-featureOptions/store.mjs +181 -0
  176. package/dist/ui/webUi-featureOptions/utils.mjs +200 -0
  177. package/dist/ui/webUi-featureOptions/views/connectionError.mjs +152 -0
  178. package/dist/ui/webUi-featureOptions/views/deviceInfo.mjs +80 -0
  179. package/dist/ui/webUi-featureOptions/views/header.mjs +77 -0
  180. package/dist/ui/webUi-featureOptions/views/nav.mjs +327 -0
  181. package/dist/ui/webUi-featureOptions/views/options.mjs +521 -0
  182. package/dist/ui/webUi-featureOptions/views/search.mjs +395 -0
  183. package/dist/ui/webUi-featureOptions.mjs +677 -0
  184. package/dist/ui/webUi.mjs +192 -87
  185. package/dist/util.d.ts +602 -45
  186. package/dist/util.js +783 -78
  187. package/dist/util.js.map +1 -1
  188. package/package.json +33 -15
  189. package/build/eslint-rules.mjs +0 -511
  190. package/dist/featureoptions.d.ts +0 -264
  191. package/dist/featureoptions.js +0 -480
  192. package/dist/featureoptions.js.map +0 -1
  193. package/dist/mqttclient.d.ts +0 -178
  194. package/dist/mqttclient.js +0 -310
  195. package/dist/mqttclient.js.map +0 -1
  196. package/dist/ui/featureoptions.js +0 -480
  197. package/dist/ui/featureoptions.js.map +0 -1
  198. package/dist/ui/webUi-featureoptions.mjs +0 -3765
@@ -1 +1 @@
1
- {"version":3,"file":"record.js","sourceRoot":"","sources":["../../src/ffmpeg/record.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"record.js","sourceRoot":"","sources":["../../src/ffmpeg/record.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AACH,OAAO,EAAE,uBAAuB,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;AACnF,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAEhE,OAAO,EAAE,iBAAiB,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAGxD,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAE7C,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAGzD,uKAAuK;AACvK,gHAAgH;AAChH,MAAM,gCAAgC,GAAG;IAEvC,CAAE,uBAAuB,CAAC,OAAO,CAAE,EAAI,IAAI;IAC3C,CAAE,uBAAuB,CAAC,MAAM,CAAE,EAAK,GAAG;CACgB,CAAC;AAE7D,MAAM,wBAAwB,GAAG;IAE/B,CAAE,wBAAwB,CAAC,KAAK,CAAE,EAAK,GAAG;IAC1C,CAAE,wBAAwB,CAAC,MAAM,CAAE,EAAI,IAAI;IAC3C,CAAE,wBAAwB,CAAC,MAAM,CAAE,EAAI,IAAI;IAC3C,CAAE,wBAAwB,CAAC,MAAM,CAAE,EAAI,IAAI;IAC3C,CAAE,wBAAwB,CAAC,QAAQ,CAAE,EAAE,MAAM;IAC7C,CAAE,wBAAwB,CAAC,MAAM,CAAE,EAAI,IAAI;CACgB,CAAC;AAE9D,wKAAwK;AACxK,gCAAgC;AAChC,MAAM,uBAAuB,GAAG,IAAI,MAAM,CAAC;IAEzC,yDAAyD;IACzD,4EAA4E;IAC5E,6CAA6C;IAC7C,mCAAmC;IACnC,+CAA+C;IAC/C,4CAA4C;IAC5C,uBAAuB;CACxB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAEb,wKAAwK;AACxK,wEAAwE;AACxE,MAAM,uBAAuB,GAAG,CAAE,SAAS,EAAE,UAAU,CAAE,CAAC;AAsL1D,oKAAoK;AACpK,wCAAwC;AACxC,SAAS,kBAAkB,CAAC,OAAsB,EAAE,OAAiC;IAEnF,OAAO;QAEL,YAAY,EAAE,OAAO,CAAC,YAAY,IAAI,EAAE;QACxC,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,CAAC;QACrC,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,MAAM;QAC9B,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,IAAI;QACxC,gBAAgB,EAAE,OAAO,CAAC,gBAAgB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC,KAAK,CAAC;QACtI,mBAAmB,EAAE,OAAO,CAAC,mBAAmB,IAAI,OAAO,CAAC,MAAM,CAAC,mBAAmB;QACtF,cAAc,EAAE,OAAO,CAAC,cAAc,IAAI,IAAI;QAC9C,YAAY,EAAE,OAAO,CAAC,YAAY,IAAI,EAAE;QACxC,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,CAAC;KACtC,CAAC;AACJ,CAAC;AAED,oKAAoK;AACpK,yHAAyH;AACzH,SAAS,oBAAoB,CAAC,KAA2B;IAEvD,MAAM,EAAE,eAAe,EAAE,WAAW,EAAE,WAAW,EAAE,SAAS,EAAE,aAAa,EAAE,OAAO,EAAE,cAAc,EAAE,sBAAsB,EAAE,OAAO,EAAE,gBAAgB,EAAE,GAAG,KAAK,CAAC;IAElK,gDAAgD;IAChD,EAAE;IACF,gFAAgF;IAChF,6FAA6F;IAC7F,sGAAsG;IACtG,sFAAsF;IACtF,0HAA0H;IAC1H,MAAM,IAAI,GAAa;QAErB,cAAc;QACd,UAAU;QACV,SAAS,EAAE,iBAAiB;QAC5B,aAAa,EAAE,YAAY;QAC3B,GAAG,OAAO,CAAC,YAAY,CAAC,WAAW,CAAC,KAAK,CAAC;QAC1C,YAAY,EAAE,QAAQ;QAEtB,uFAAuF;QACvF,GAAG,SAAS;QAEZ,iHAAiH;QACjH,GAAG,sBAAsB;QAEzB,oEAAoE;QACpE,MAAM,EAAE,MAAM,GAAG,WAAW,CAAC,WAAW,CAAC,QAAQ,EAAE;QACnD,GAAG,gBAAgB;KACpB,CAAC;IAEF,gDAAgD;IAChD,IAAG,WAAW,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC;QAEnC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAC9D,CAAC;IAED,2FAA2F;IAC3F,IAAI,CAAC,IAAI,CAAC,GAAG,cAAc,CAAC,CAAC;IAE7B,qKAAqK;IACrK,uKAAuK;IACvK,0FAA0F;IAC1F,mFAAmF;IACnF,mHAAmH;IACnH,IAAI,CAAC,IAAI,CAEP,WAAW,EAAE,mEAAmE,EAChF,gBAAgB,EAAE,GAAG,EACrB,mBAAmB,EAAE,GAAG,EACxB,WAAW,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,EAAE,GAAG,GAAG,GAAG,aAAa,CAC/D,CAAC;IAEF,4JAA4J;IAC5J,IAAG,WAAW,CAAC,WAAW,EAAE,CAAC;QAE3B,mDAAmD;QACnD,EAAE;QACF,+JAA+J;QAC/J,wEAAwE;QACxE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,eAAe,CAAC,QAAQ,EAAE,GAAG,KAAK,GAAG,WAAW,CAAC,WAAW,CAAC,QAAQ,EAAE,GAAG,GAAG,CAAC,CAAC;QAEjG,6JAA6J;QAC7J,sKAAsK;QACtK,IAAG,WAAW,EAAE,CAAC;YAEf,sHAAsH;YACtH,IAAG,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC;gBAE/B,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YACzD,CAAC;YAED,mDAAmD;YACnD,EAAE;YACF,0FAA0F;YAC1F,iIAAiI;YACjI,gGAAgG;YAChG,gEAAgE;YAChE,IAAI,CAAC,IAAI,CAEP,GAAG,OAAO,CAAC,YAAY,CAAC,EAAE,KAAK,EAAE,WAAW,CAAC,KAAK,EAAE,CAAC,EACrD,YAAY,EAAE,gCAAgC,CAAC,WAAW,CAAC,KAAK,CAAC,EACjE,KAAK,EAAE,wBAAwB,CAAC,WAAW,CAAC,UAAU,CAAC,GAAG,GAAG,EAC7D,KAAK,EAAE,CAAC,WAAW,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC,QAAQ,EAAE,CAC9C,CAAC;QACJ,CAAC;aAAM,CAAC;YAEN,4GAA4G;YAC5G,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QAChC,CAAC;IACH,CAAC;IAED,kEAAkE;IAClE,EAAE;IACF,gGAAgG;IAChG,sEAAsE;IACtE,IAAI,CAAC,IAAI,CAEP,IAAI,EAAE,KAAK,EACX,QAAQ,CACT,CAAC;IAEF,mDAAmD;IACnD,IAAG,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC;QAElD,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC;IAC7C,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,qKAAqK;AACrK,6JAA6J;AAC7J,SAAS,6BAA6B,CAAC,UAAuD,EAAE,WAAoB;IAElH,IAAG,CAAC,WAAW,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC;QAE1C,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,gBAAgB,EAAE,KAAK,EAAE,CAAC;IAC/C,CAAC;IAED,MAAM,IAAI,GAAa,EAAE,CAAC;IAE1B,yFAAyF;IACzF,MAAM,UAAU,GAAyB,CAAC,OAAO,UAAU,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,UAAU,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC;IAE9I,wJAAwJ;IACxJ,EAAE;IACF,2FAA2F;IAC3F,uEAAuE;IACvE,wEAAwE;IACxE,IAAG,UAAU,CAAC,MAAM,EAAE,CAAC;QAErB,IAAI,CAAC,IAAI,CAEP,IAAI,EAAE,UAAU,CAAC,MAAM,EACvB,KAAK,EAAE,CAAC,UAAU,CAAC,UAAU,IAAI,IAAI,CAAC,CAAC,QAAQ,EAAE,EACjD,KAAK,EAAE,CAAC,UAAU,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC,QAAQ,EAAE,CAC7C,CAAC;IACJ,CAAC;IAED,kIAAkI;IAClI,IAAG,uBAAuB,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC;QAEjG,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,KAAK,CAAC,CAAC;IACtC,CAAC;IAED,mDAAmD;IACnD,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC;IAEhC,OAAO,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,CAAC;AAC1C,CAAC;AAED,qJAAqJ;AACrJ,SAAS,yBAAyB,CAAC,OAAsB,EAAE,IAAyB;IAElF,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC;IACvC,MAAM,WAAW,GAAG,kBAAkB,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IAC3D,MAAM,EAAE,eAAe,EAAE,GAAG,IAAI,CAAC;IACjC,MAAM,GAAG,GAAG,SAAS,CAAC,GAAG,IAAI,EAAE,CAAC;IAEhC,sKAAsK;IACtK,uKAAuK;IACvK,MAAM,WAAW,GAAgC,CAAC,WAAW,CAAC,cAAc,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAEvH,QAAQ,EAAE,eAAe,CAAC,UAAU,CAAC,aAAa;QAClD,KAAK,EAAE,eAAe,CAAC,UAAU,CAAC,IAAI;QACtC,OAAO,EAAE,WAAW,CAAC,YAAY;QACjC,gKAAgK;QAChK,oEAAoE;QACpE,UAAU,EAAE,eAAe,CAAC,UAAU,CAAC,UAAsC;KAC9E,CAAC,CAAC,CAAC,SAAS,CAAC;IAEd,wIAAwI;IACxI,MAAM,SAAS,GAAG,SAAS,CAAC,SAAS,IAAI,SAAS,CAAC;IACnD,MAAM,SAAS,GAAG,SAAS,CAAC,SAAS,IAAI,CAAC,CAAC;IAE3C,uIAAuI;IACvI,EAAE;IACF,2FAA2F;IAC3F,0FAA0F;IAC1F,+FAA+F;IAC/F,sEAAsE;IACtE,wGAAwG;IACxG,MAAM,SAAS,GAAa;QAE1B,QAAQ,EAAE,WAAW;QACrB,YAAY,EAAE,SAAS,CAAC,QAAQ,EAAE;QAClC,IAAI,EAAE,KAAK;QACX,IAAI,EAAE,QAAQ;QACd,KAAK,EAAE,SAAS,CAAC,QAAQ,EAAE,GAAG,IAAI;KACnC,CAAC;IAEF,8EAA8E;IAC9E,MAAM,gBAAgB,GAAG,OAAO,CAAC,aAAa,CAAC;QAE7C,OAAO,EAAE,eAAe,CAAC,UAAU,CAAC,UAAU,CAAC,OAAO;QACtD,GAAG,EAAE,eAAe,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC;QAC7C,gBAAgB,EAAE,WAAW,CAAC,gBAAgB;QAC9C,mBAAmB,EAAE,WAAW,CAAC,mBAAmB;QACpD,MAAM,EAAE,eAAe,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC;QAChD,WAAW,EAAE,iBAAiB;QAC9B,QAAQ,EAAE,GAAG;QACb,KAAK,EAAE,eAAe,CAAC,UAAU,CAAC,UAAU,CAAC,KAAK;QAClD,OAAO,EAAE,eAAe,CAAC,UAAU,CAAC,UAAU,CAAC,OAAO;QACtD,KAAK,EAAE,eAAe,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC;KAChD,CAAC,CAAC;IAEH,OAAO,oBAAoB,CAAC;QAE1B,eAAe,EAAE,CAAC;QAClB,WAAW;QACX,WAAW;QACX,SAAS;QACT,aAAa,EAAE,YAAY;QAC3B,OAAO;QACP,cAAc,EAAE,EAAE;QAClB,sBAAsB,EAAE,EAAE;QAC1B,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,KAAK;QAC9B,gBAAgB;KACjB,CAAC,CAAC;AACL,CAAC;AAED,sJAAsJ;AACtJ,SAAS,0BAA0B,CAAC,OAAsB,EAAE,IAA0B;IAEpF,MAAM,WAAW,GAAG,kBAAkB,CAAC,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;IACjE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC;IAEnC,iFAAiF;IACjF,EAAE;IACF,gHAAgH;IAChH,oGAAoG;IACpG,sEAAsE;IACtE,MAAM,SAAS,GAAa;QAE1B,YAAY,EAAE,QAAQ;QACtB,iBAAiB,EAAE,KAAK;QACxB,IAAI,EAAE,UAAU,CAAC,GAAG;KACrB,CAAC;IAEF,mKAAmK;IACnK,mGAAmG;IACnG,MAAM,aAAa,GAAG,6BAA6B,CAAC,UAAU,EAAE,WAAW,CAAC,WAAW,CAAC,CAAC;IAEzF,mEAAmE;IACnE,MAAM,gBAAgB,GAAG,CAAE,UAAU,EAAE,MAAM,CAAE,CAAC;IAEhD,qKAAqK;IACrK,8IAA8I;IAC9I,MAAM,eAAe,GAAG,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC;IACnD,MAAM,cAAc,GAAG,CAAE,gBAAgB,EAAE,CAAC,eAAe,GAAG,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAE,CAAC;IAEjF,OAAO,oBAAoB,CAAC;QAE1B,eAAe,EAAE,aAAa,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACvD,WAAW,EAAE,KAAK;QAClB,WAAW;QACX,SAAS;QACT,aAAa,EAAE,mBAAmB;QAClC,OAAO;QACP,cAAc;QACd,sBAAsB,EAAE,aAAa,CAAC,IAAI;QAC1C,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,KAAK;QAC9B,gBAAgB;KACjB,CAAC,CAAC;AACL,CAAC;AAED,qKAAqK;AACrK,0JAA0J;AAC1J,qKAAqK;AACrK,iKAAiK;AACjK,sKAAsK;AACtK,uKAAuK;AACvK,YAAY;AACZ,SAAS,wBAAwB,CAAC,OAAsB,EAAE,SAA8B;IAEtF,OAAO,CAAC,SAAS,CAAC,MAAM,EAAE,GAAG,EAAE;QAE7B,IAAG,OAAO,CAAC,OAAO,EAAE,CAAC;YAEnB,OAAO;QACT,CAAC;QAED,MAAM,MAAM,GAAY,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC;QAEhD,4DAA4D;QAC5D,IAAG,iBAAiB,CAAC,MAAM,EAAE,QAAQ,CAAC,EAAE,CAAC;YAEvC,OAAO;QACT,CAAC;QAED,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACxB,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,OAAgB,iBAAkB,SAAQ,aAAa;IAOlD,UAAU,CAAsB;IAEzC;;;;;;;;;OASG;IACH,YAAsB,OAAsB,EAAE,IAAuB,EAAE,cAAuB;QAE5F,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QAErB,IAAI,CAAC,UAAU,GAAG,IAAI,mBAAmB,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,cAAc,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;QAEjG,wBAAwB,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;IAClD,CAAC;IAED;;;;;OAKG;IACI,KAAK,CAAC,cAAc;QAEzB,OAAO,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC;IACrC,CAAC;IAED;;;;;;;OAOG;IACI,QAAQ,CAAC,OAAiC,EAAE;QAEjD,OAAO,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IACxC,CAAC;IAED;;;;;OAKG;IACH,IAAW,gBAAgB;QAEzB,OAAO,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC;IAC1C,CAAC;CACF;AA+FD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,MAAM,OAAO,sBAAuB,SAAQ,iBAAiB;IAE3D;;;;;OAKG;IACH,YAAmB,OAAsB,EAAE,IAAyB;QAElE,KAAK,CAAC,OAAO,EAAE,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,yBAAyB,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,EAAE,YAAY,CAAC,CAAC;IACzG,CAAC;IAED,qKAAqK;IACrK,mKAAmK;IACnK,wGAAwG;IACrF,iBAAiB,CAAC,MAAsB;QAEzD,IAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;YAErE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,yIAAyI,EACtJ,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;YAEvB,OAAO;QACT,CAAC;QAED,KAAK,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAClC,CAAC;IAED,iJAAiJ;IACjJ,sKAAsK;IACtK,wKAAwK;IACxK,sKAAsK;IACtK,gKAAgK;IAC7I,kBAAkB,CAAC,OAAuB;QAE3D,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,gFAAgF,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IACxH,CAAC;CACF;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAA4B;IAE9D,MAAM,EAAE,CAAC,OAAsB,EAAE,IAAyB,EAAoB,EAAE,CAAC,IAAI,sBAAsB,CAAC,OAAO,EAAE,IAAI,CAAC;CAC3H,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,MAAM,OAAO,uBAAwB,SAAQ,iBAAiB;IAE5D;;;;;OAKG;IACH,YAAmB,OAAsB,EAAE,IAA0B;QAEnE,KAAK,CAAC,OAAO,EAAE,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,0BAA0B,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;IAC5F,CAAC;CACF"}
@@ -0,0 +1,144 @@
1
+ /**
2
+ * Reusable test doubles for the recording dependency-inversion seam.
3
+ *
4
+ * The {@link RecordingProcess} / {@link RecordingProcessFactory} seam in `ffmpeg/record.ts` exists so a consuming plugin's HKSV recording path can be driven without
5
+ * spawning a real FFmpeg child. This module ships the fakes that cash that in: a configurable {@link TestRecordingProcess} that yields caller-supplied init and media
6
+ * segments deterministically, and a {@link TestRecordingProcessFactory} that records every `create` call and hands back the process. Any HKSV-capable plugin can hold
7
+ * the test factory in place of {@link ffmpeg/record!recordingProcessFactory | recordingProcessFactory} to exercise its recording delegate FFmpeg-free, in CI, with
8
+ * no binary on the path.
9
+ *
10
+ * The double needs no real fMP4: a recording consumer forwards `segments()` output opaquely to HomeKit, so the segments are opaque `Buffer`s the test chooses. The
11
+ * keyframe-bearing fMP4 concern (timeshift / prebuffer) lives entirely in a consumer's own segment double, not here.
12
+ *
13
+ * @module
14
+ */
15
+ import type { FfmpegRecordingInit, RecordingProcess, RecordingProcessFactory } from "./record.ts";
16
+ import type { FfmpegOptions } from "./options.ts";
17
+ import { Writable } from "node:stream";
18
+ /**
19
+ * Construction-time configuration for a {@link TestRecordingProcess}. Every field has a deterministic default so a bare `new TestRecordingProcess()` is usable; supply
20
+ * only the fields a given test steers a branch with.
21
+ *
22
+ * @property bufferedSegments - The value the `bufferedSegments` getter reports. Defaults to `0`.
23
+ * @property initSegment - The buffer `getInitSegment()` resolves with. Defaults to an empty buffer.
24
+ * @property isTimedOut - The value the `isTimedOut` getter reports. Defaults to `false`.
25
+ * @property segments - The media-segment buffers `segments()` yields, in order. Defaults to an empty array.
26
+ * @property stderrLog - The lines the `stderrLog` getter reports. Defaults to an empty array.
27
+ *
28
+ * @category Testing
29
+ */
30
+ export interface TestRecordingProcessInit {
31
+ bufferedSegments?: number;
32
+ initSegment?: Buffer;
33
+ isTimedOut?: boolean;
34
+ segments?: Buffer[];
35
+ stderrLog?: readonly string[];
36
+ }
37
+ /**
38
+ * A configurable, FFmpeg-free {@link RecordingProcess} fake. It satisfies the same interface the production
39
+ * {@link ffmpeg/record!FfmpegRecordingProcess | FfmpegRecordingProcess} does, so a recording delegate constructs and drives it exactly as it would the real class - but
40
+ * it spawns no child and yields caller-supplied bytes deterministically.
41
+ *
42
+ * Fidelity to the real contract: `abort()` aborts a genuine {@link AbortSignal} with a real {@link HbpuAbortError} reason (defaulting to `"shutdown"` exactly as
43
+ * {@link ffmpeg/process!FfmpegProcess.abort | FfmpegProcess.abort} does), so a consumer's `isHbpuAbortReason` / timeout derivations stay meaningful; `getInitSegment()`
44
+ * rejects with `signal.reason` after a pre-init abort, mirroring the real assembler's init-reject contract; and `segments()` terminates on EITHER its own signal or the
45
+ * passed per-call signal, mirroring how
46
+ * the real assembler composes the two. The `stdin` sink records every written chunk and stays writable across abort, so a consumer driving a `BackpressureWriter` over it
47
+ * can assert the segment feed regardless of abort ordering.
48
+ *
49
+ * @see RecordingProcess
50
+ * @see TestRecordingProcessFactory
51
+ *
52
+ * @category Testing
53
+ */
54
+ export declare class TestRecordingProcess implements RecordingProcess {
55
+ #private;
56
+ readonly abortCalls: unknown[];
57
+ readonly stdinWrites: Buffer[];
58
+ readonly stdin: Writable;
59
+ /**
60
+ * Construct a configurable recording-process fake.
61
+ *
62
+ * @param init - Optional configuration. See {@link TestRecordingProcessInit}. Every field defaults, so a bare `new TestRecordingProcess()` is valid.
63
+ */
64
+ constructor(init?: TestRecordingProcessInit);
65
+ /**
66
+ * Abort the recording process. Aborts the internal signal with the supplied reason, defaulting to a real `HbpuAbortError("shutdown")` exactly as the production
67
+ * `FfmpegProcess.abort` does, and records the (defaulted) reason for assertions. Safe to call more than once: the underlying signal aborts only once.
68
+ *
69
+ * @param reason - Optional abort reason. Typically an {@link HbpuAbortError}.
70
+ */
71
+ abort(reason?: unknown): void;
72
+ /**
73
+ * The configured buffered-segment depth.
74
+ */
75
+ get bufferedSegments(): number;
76
+ /**
77
+ * Resolve with the configured init segment. Rejects with `signal.reason` if `abort()` fired before init was requested, mirroring the real
78
+ * `FfmpegFMp4Process.getInitSegment` -> `Mp4SegmentAssembler.initSegment` reject-on-pre-init-abort contract.
79
+ *
80
+ * @returns A promise resolving to the configured init segment bytes.
81
+ */
82
+ getInitSegment(): Promise<Buffer>;
83
+ /**
84
+ * The configured timed-out flag.
85
+ */
86
+ get isTimedOut(): boolean;
87
+ /**
88
+ * Yield the configured media segments in order. Terminates (returns) when EITHER this process's own signal aborts OR the passed `init.signal` aborts - composing both,
89
+ * mirroring how the real `Mp4SegmentAssembler.segments` honors the process signal and the per-call signal together.
90
+ *
91
+ * This double does NOT gate media delivery on init-first the way the real assembler does. The real HKSV consumer always awaits `getInitSegment()` before iterating, so
92
+ * the simplification is invisible to it; a future `segments()`-first consumer must not assume an ordering this double does not enforce.
93
+ *
94
+ * @param init - Optional init options. `signal` composes with this process's own signal; aborting either terminates this generator call.
95
+ *
96
+ * @returns An async generator yielding the configured media segment buffers in order.
97
+ */
98
+ segments(init?: {
99
+ signal?: AbortSignal;
100
+ }): AsyncGenerator<Buffer>;
101
+ /**
102
+ * The composed abort signal representing this process's lifetime. Aborts exactly once, when `abort()` is called; `signal.reason` carries the recorded reason.
103
+ */
104
+ get signal(): AbortSignal;
105
+ /**
106
+ * The configured stderr lines.
107
+ */
108
+ get stderrLog(): readonly string[];
109
+ }
110
+ /**
111
+ * A {@link RecordingProcessFactory} fake that records every `create` call (the options and init it was passed, for assertions) and returns a
112
+ * {@link TestRecordingProcess}, mirroring the create-call-recording discipline a consumer's streaming-delegate factory double uses. By default it returns a fresh,
113
+ * default-configured process per call; supply a process to the constructor to return a single pre-configured instance from every `create`.
114
+ *
115
+ * @see RecordingProcessFactory
116
+ * @see TestRecordingProcess
117
+ *
118
+ * @category Testing
119
+ */
120
+ export declare class TestRecordingProcessFactory implements RecordingProcessFactory {
121
+ #private;
122
+ readonly createCalls: {
123
+ init: FfmpegRecordingInit;
124
+ options: FfmpegOptions;
125
+ process: TestRecordingProcess;
126
+ }[];
127
+ /**
128
+ * Construct a recording-process factory fake.
129
+ *
130
+ * @param process - Optional pre-configured {@link TestRecordingProcess} to return from every `create`. When omitted, each `create` returns a fresh,
131
+ * default-configured process.
132
+ */
133
+ constructor(process?: TestRecordingProcess);
134
+ /**
135
+ * Record the create call and return a {@link TestRecordingProcess} - the constructor-supplied instance when one was given, otherwise a fresh default-configured one.
136
+ *
137
+ * @param options - The {@link FfmpegOptions} the consumer passed.
138
+ * @param init - The {@link FfmpegRecordingInit} the consumer passed.
139
+ *
140
+ * @returns The recording-process double.
141
+ */
142
+ create(options: FfmpegOptions, init: FfmpegRecordingInit): RecordingProcess;
143
+ }
144
+ //# sourceMappingURL=recording-process-double.d.ts.map
@@ -0,0 +1,168 @@
1
+ /* Copyright(C) 2017-2026, HJD (https://github.com/hjdhjd). All rights reserved.
2
+ *
3
+ * ffmpeg/recording-process-double.ts: A reusable, FFmpeg-free test double for the RecordingProcess dependency-inversion seam.
4
+ */
5
+ import { HbpuAbortError, composeSignals } from "../util.js";
6
+ import { Writable } from "node:stream";
7
+ /**
8
+ * A configurable, FFmpeg-free {@link RecordingProcess} fake. It satisfies the same interface the production
9
+ * {@link ffmpeg/record!FfmpegRecordingProcess | FfmpegRecordingProcess} does, so a recording delegate constructs and drives it exactly as it would the real class - but
10
+ * it spawns no child and yields caller-supplied bytes deterministically.
11
+ *
12
+ * Fidelity to the real contract: `abort()` aborts a genuine {@link AbortSignal} with a real {@link HbpuAbortError} reason (defaulting to `"shutdown"` exactly as
13
+ * {@link ffmpeg/process!FfmpegProcess.abort | FfmpegProcess.abort} does), so a consumer's `isHbpuAbortReason` / timeout derivations stay meaningful; `getInitSegment()`
14
+ * rejects with `signal.reason` after a pre-init abort, mirroring the real assembler's init-reject contract; and `segments()` terminates on EITHER its own signal or the
15
+ * passed per-call signal, mirroring how
16
+ * the real assembler composes the two. The `stdin` sink records every written chunk and stays writable across abort, so a consumer driving a `BackpressureWriter` over it
17
+ * can assert the segment feed regardless of abort ordering.
18
+ *
19
+ * @see RecordingProcess
20
+ * @see TestRecordingProcessFactory
21
+ *
22
+ * @category Testing
23
+ */
24
+ export class TestRecordingProcess {
25
+ // The reasons every `abort(reason?)` call was invoked with, in order, for assertions. A no-argument call records the defaulted `HbpuAbortError("shutdown")` so the
26
+ // recorded reason matches `signal.reason`.
27
+ abortCalls = [];
28
+ // Every chunk written to `stdin`, in order, so a consumer feeding the recording-write path can assert exactly what it fed.
29
+ stdinWrites = [];
30
+ stdin;
31
+ // The internal controller whose signal is exposed as the process lifetime. Owned privately so the only way to abort is through `abort()`, which records the call.
32
+ #controller = new AbortController();
33
+ #bufferedSegments;
34
+ #initSegment;
35
+ #isTimedOut;
36
+ #segments;
37
+ #stderrLog;
38
+ /**
39
+ * Construct a configurable recording-process fake.
40
+ *
41
+ * @param init - Optional configuration. See {@link TestRecordingProcessInit}. Every field defaults, so a bare `new TestRecordingProcess()` is valid.
42
+ */
43
+ constructor(init = {}) {
44
+ this.#bufferedSegments = init.bufferedSegments ?? 0;
45
+ this.#initSegment = init.initSegment ?? Buffer.alloc(0);
46
+ this.#isTimedOut = init.isTimedOut ?? false;
47
+ this.#segments = init.segments ?? [];
48
+ this.#stderrLog = init.stderrLog ?? [];
49
+ // A genuine recording sink that records each chunk and immediately acknowledges the write. It is intentionally independent of the abort path: `abort()` never ends or
50
+ // destroys it, so it stays `writable` and a consumer's writes land regardless of abort ordering. This is a deliberate divergence from the real `FfmpegProcess.stdin`,
51
+ // which Node destroys as soon as the abort signal fires and the kill signal takes effect; the double stays open indefinitely so a recording consumer can flush its
52
+ // in-flight segment feed and assert on it without racing the abort-triggered teardown the real stream would otherwise undergo.
53
+ this.stdin = new Writable({
54
+ write: (chunk, _encoding, callback) => {
55
+ this.stdinWrites.push(chunk);
56
+ callback();
57
+ }
58
+ });
59
+ }
60
+ /**
61
+ * Abort the recording process. Aborts the internal signal with the supplied reason, defaulting to a real `HbpuAbortError("shutdown")` exactly as the production
62
+ * `FfmpegProcess.abort` does, and records the (defaulted) reason for assertions. Safe to call more than once: the underlying signal aborts only once.
63
+ *
64
+ * @param reason - Optional abort reason. Typically an {@link HbpuAbortError}.
65
+ */
66
+ abort(reason) {
67
+ const resolvedReason = reason ?? new HbpuAbortError("shutdown");
68
+ this.abortCalls.push(resolvedReason);
69
+ this.#controller.abort(resolvedReason);
70
+ }
71
+ /**
72
+ * The configured buffered-segment depth.
73
+ */
74
+ get bufferedSegments() {
75
+ return this.#bufferedSegments;
76
+ }
77
+ /**
78
+ * Resolve with the configured init segment. Rejects with `signal.reason` if `abort()` fired before init was requested, mirroring the real
79
+ * `FfmpegFMp4Process.getInitSegment` -> `Mp4SegmentAssembler.initSegment` reject-on-pre-init-abort contract.
80
+ *
81
+ * @returns A promise resolving to the configured init segment bytes.
82
+ */
83
+ async getInitSegment() {
84
+ if (this.#controller.signal.aborted) {
85
+ throw this.#controller.signal.reason;
86
+ }
87
+ return this.#initSegment;
88
+ }
89
+ /**
90
+ * The configured timed-out flag.
91
+ */
92
+ get isTimedOut() {
93
+ return this.#isTimedOut;
94
+ }
95
+ /**
96
+ * Yield the configured media segments in order. Terminates (returns) when EITHER this process's own signal aborts OR the passed `init.signal` aborts - composing both,
97
+ * mirroring how the real `Mp4SegmentAssembler.segments` honors the process signal and the per-call signal together.
98
+ *
99
+ * This double does NOT gate media delivery on init-first the way the real assembler does. The real HKSV consumer always awaits `getInitSegment()` before iterating, so
100
+ * the simplification is invisible to it; a future `segments()`-first consumer must not assume an ordering this double does not enforce.
101
+ *
102
+ * @param init - Optional init options. `signal` composes with this process's own signal; aborting either terminates this generator call.
103
+ *
104
+ * @returns An async generator yielding the configured media segment buffers in order.
105
+ */
106
+ async *segments(init = {}) {
107
+ // Compose the per-call signal with our own signal upfront so a single check governs both cancellation sources, mirroring the real assembler. The composed signal is
108
+ // checked before each yield so an abort that fires mid-iteration terminates the generator without yielding the remaining configured segments.
109
+ const composed = composeSignals(this.#controller.signal, init.signal);
110
+ for (const segment of this.#segments) {
111
+ if (composed.aborted) {
112
+ return;
113
+ }
114
+ yield segment;
115
+ }
116
+ }
117
+ /**
118
+ * The composed abort signal representing this process's lifetime. Aborts exactly once, when `abort()` is called; `signal.reason` carries the recorded reason.
119
+ */
120
+ get signal() {
121
+ return this.#controller.signal;
122
+ }
123
+ /**
124
+ * The configured stderr lines.
125
+ */
126
+ get stderrLog() {
127
+ return this.#stderrLog;
128
+ }
129
+ }
130
+ /**
131
+ * A {@link RecordingProcessFactory} fake that records every `create` call (the options and init it was passed, for assertions) and returns a
132
+ * {@link TestRecordingProcess}, mirroring the create-call-recording discipline a consumer's streaming-delegate factory double uses. By default it returns a fresh,
133
+ * default-configured process per call; supply a process to the constructor to return a single pre-configured instance from every `create`.
134
+ *
135
+ * @see RecordingProcessFactory
136
+ * @see TestRecordingProcess
137
+ *
138
+ * @category Testing
139
+ */
140
+ export class TestRecordingProcessFactory {
141
+ // Every create call's arguments and the process returned, in order, so a test can assert the seam was exercised exactly once with exactly the expected options/init.
142
+ createCalls = [];
143
+ // The pre-configured process to return from every create, when supplied; otherwise each create returns a fresh default-configured process.
144
+ #process;
145
+ /**
146
+ * Construct a recording-process factory fake.
147
+ *
148
+ * @param process - Optional pre-configured {@link TestRecordingProcess} to return from every `create`. When omitted, each `create` returns a fresh,
149
+ * default-configured process.
150
+ */
151
+ constructor(process) {
152
+ this.#process = process;
153
+ }
154
+ /**
155
+ * Record the create call and return a {@link TestRecordingProcess} - the constructor-supplied instance when one was given, otherwise a fresh default-configured one.
156
+ *
157
+ * @param options - The {@link FfmpegOptions} the consumer passed.
158
+ * @param init - The {@link FfmpegRecordingInit} the consumer passed.
159
+ *
160
+ * @returns The recording-process double.
161
+ */
162
+ create(options, init) {
163
+ const process = this.#process ?? new TestRecordingProcess();
164
+ this.createCalls.push({ init, options, process });
165
+ return process;
166
+ }
167
+ }
168
+ //# sourceMappingURL=recording-process-double.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recording-process-double.js","sourceRoot":"","sources":["../../src/ffmpeg/recording-process-double.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,70 @@
1
+ /**
2
+ * Classification of a UDP datagram emitted by {@link RtpPacketParser}. `"rtp"` denotes a media packet; `"rtcp"` denotes a control packet. Consumers typically
3
+ * discriminate on this union to route to the correct downstream FFmpeg port.
4
+ *
5
+ * @category FFmpeg
6
+ */
7
+ export type RtpPacketKind = "rtcp" | "rtp";
8
+ /**
9
+ * A single classified RTP or RTCP packet.
10
+ *
11
+ * @property bytes - The complete UDP datagram bytes. Emitted as-is from the parser; consumers that need to hold it past the iteration loop should copy with
12
+ * `Buffer.from()` if the upstream datagram lifetime is suspect.
13
+ * @property kind - `"rtp"` or `"rtcp"`, derived from the header's payload type field.
14
+ * @property payloadType - The 7-bit payload type value from the second byte of the header, masked against `0x7F`. Provided raw so consumers can match specific RTP
15
+ * payload types (e.g., opus, g711) without re-parsing the header.
16
+ *
17
+ * @category FFmpeg
18
+ */
19
+ export interface RtpPacket {
20
+ bytes: Buffer;
21
+ kind: RtpPacketKind;
22
+ payloadType: number;
23
+ }
24
+ /**
25
+ * Pure stateful parser that classifies UDP datagrams as RTP or RTCP and surfaces them as {@link RtpPacket} records.
26
+ *
27
+ * Unlike {@link ffmpeg/mp4-parser!Mp4BoxParser | Mp4BoxParser}, the RTP wire format is already datagram-framed - each UDP message is a complete packet - so there is no
28
+ * cross-call state to carry. The class shape mirrors the MP4 parser for consistency: composing resource classes (demuxers, assemblers) drive any parser of this shape
29
+ * without having to know whether the wire format was stream-oriented or datagram-oriented.
30
+ *
31
+ * The class is intentionally signal-free and event-free. Resource lifecycle, liveness monitoring, and async consumption are the composing caller's concern - see
32
+ * {@link ffmpeg/rtp!RtpDemuxer | RtpDemuxer}.
33
+ *
34
+ * @example
35
+ *
36
+ * ```ts
37
+ * import { RtpPacketParser } from "homebridge-plugin-utils";
38
+ *
39
+ * const parser = new RtpPacketParser();
40
+ *
41
+ * socket.on("message", (datagram) => {
42
+ *
43
+ * for(const packet of parser.consume(datagram)) {
44
+ *
45
+ * if(packet.kind === "rtp") {
46
+ *
47
+ * socket.send(packet.bytes, rtpPort);
48
+ * }
49
+ * }
50
+ * });
51
+ * ```
52
+ *
53
+ * @see RtpDemuxer
54
+ *
55
+ * @category FFmpeg
56
+ */
57
+ export declare class RtpPacketParser {
58
+ /**
59
+ * Feed the parser a UDP datagram and yield the single classified packet it contains.
60
+ *
61
+ * Datagrams shorter than the two-byte minimum required to read the payload type field are silently dropped. Callers that need to observe malformed input should do so
62
+ * at the socket layer; the parser's contract is "classify well-formed headers," not "diagnose corruption."
63
+ *
64
+ * @param datagram - A complete UDP datagram received from the RTP/RTCP socket.
65
+ *
66
+ * @returns An iterable yielding zero packets (empty datagram) or exactly one packet (well-formed datagram).
67
+ */
68
+ consume(datagram: Buffer): Iterable<RtpPacket>;
69
+ }
70
+ //# sourceMappingURL=rtp-parser.d.ts.map
@@ -0,0 +1,77 @@
1
+ /* Copyright(C) 2017-2026, HJD (https://github.com/hjdhjd). All rights reserved.
2
+ *
3
+ * ffmpeg/rtp-parser.ts: Pure byte-to-record parser for RTP/RTCP datagrams.
4
+ */
5
+ /**
6
+ * Pure stateful byte-to-record parser for RTP and RTCP datagrams multiplexed on a single UDP port per RFC 5761.
7
+ *
8
+ * Each RTP or RTCP packet arrives as a self-contained UDP datagram, so the parser does not have to reassemble anything across chunks. Its job is classification: given
9
+ * the raw datagram bytes, decide whether the packet is RTP or RTCP and surface the payload type for callers that discriminate further. This mirrors the shape of
10
+ * {@link ffmpeg/mp4-parser!Mp4BoxParser | Mp4BoxParser} (pure, stateful class, `consume(chunk)` returning an iterable) so the composing caller - typically
11
+ * {@link ffmpeg/rtp!RtpDemuxer | RtpDemuxer} - can drive either parser through the same wiring.
12
+ *
13
+ * @module
14
+ */
15
+ // RTP/RTCP demultiplexing threshold per RFC 5761. The second byte of every RTP/RTCP header carries the payload type in its low seven bits. RFC 5761 documents that
16
+ // values above 90 (and the distinguished value 0) are never used by standard RTCP packet types, so they are safe to treat as RTP; everything else is routed to RTCP.
17
+ const RTP_PAYLOAD_TYPE_THRESHOLD = 90;
18
+ /**
19
+ * Pure stateful parser that classifies UDP datagrams as RTP or RTCP and surfaces them as {@link RtpPacket} records.
20
+ *
21
+ * Unlike {@link ffmpeg/mp4-parser!Mp4BoxParser | Mp4BoxParser}, the RTP wire format is already datagram-framed - each UDP message is a complete packet - so there is no
22
+ * cross-call state to carry. The class shape mirrors the MP4 parser for consistency: composing resource classes (demuxers, assemblers) drive any parser of this shape
23
+ * without having to know whether the wire format was stream-oriented or datagram-oriented.
24
+ *
25
+ * The class is intentionally signal-free and event-free. Resource lifecycle, liveness monitoring, and async consumption are the composing caller's concern - see
26
+ * {@link ffmpeg/rtp!RtpDemuxer | RtpDemuxer}.
27
+ *
28
+ * @example
29
+ *
30
+ * ```ts
31
+ * import { RtpPacketParser } from "homebridge-plugin-utils";
32
+ *
33
+ * const parser = new RtpPacketParser();
34
+ *
35
+ * socket.on("message", (datagram) => {
36
+ *
37
+ * for(const packet of parser.consume(datagram)) {
38
+ *
39
+ * if(packet.kind === "rtp") {
40
+ *
41
+ * socket.send(packet.bytes, rtpPort);
42
+ * }
43
+ * }
44
+ * });
45
+ * ```
46
+ *
47
+ * @see RtpDemuxer
48
+ *
49
+ * @category FFmpeg
50
+ */
51
+ export class RtpPacketParser {
52
+ /**
53
+ * Feed the parser a UDP datagram and yield the single classified packet it contains.
54
+ *
55
+ * Datagrams shorter than the two-byte minimum required to read the payload type field are silently dropped. Callers that need to observe malformed input should do so
56
+ * at the socket layer; the parser's contract is "classify well-formed headers," not "diagnose corruption."
57
+ *
58
+ * @param datagram - A complete UDP datagram received from the RTP/RTCP socket.
59
+ *
60
+ * @returns An iterable yielding zero packets (empty datagram) or exactly one packet (well-formed datagram).
61
+ */
62
+ *consume(datagram) {
63
+ // Two bytes is the minimum needed to read the payload type. Anything shorter is silently dropped - the RTP/RTCP fixed headers are at least 12 and 8 bytes
64
+ // respectively, so a datagram this short cannot be a legitimate packet.
65
+ if (datagram.length < 2) {
66
+ return;
67
+ }
68
+ // Payload type lives in the low seven bits of the second header byte (the top bit is the marker bit in RTP and the padding bit in RTCP; we only care about the
69
+ // low seven here).
70
+ const payloadType = datagram.readUInt8(1) & 0x7F;
71
+ // Classification follows the RFC 5761 demux rule: values above 90 and the distinguished value 0 are RTP; everything else is RTCP. The split is intentionally
72
+ // expressed as a single boolean so the path stays branch-predictable in the hot loop.
73
+ const kind = ((payloadType > RTP_PAYLOAD_TYPE_THRESHOLD) || (payloadType === 0)) ? "rtp" : "rtcp";
74
+ yield { bytes: datagram, kind, payloadType };
75
+ }
76
+ }
77
+ //# sourceMappingURL=rtp-parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rtp-parser.js","sourceRoot":"","sources":["../../src/ffmpeg/rtp-parser.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;;;;;GASG;AAEH,mKAAmK;AACnK,qKAAqK;AACrK,MAAM,0BAA0B,GAAG,EAAE,CAAC;AA4BtC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,MAAM,OAAO,eAAe;IAE1B;;;;;;;;;OASG;IACI,CAAC,OAAO,CAAC,QAAgB;QAE9B,0JAA0J;QAC1J,wEAAwE;QACxE,IAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAEvB,OAAO;QACT,CAAC;QAED,+JAA+J;QAC/J,mBAAmB;QACnB,MAAM,WAAW,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;QAEjD,6JAA6J;QAC7J,sFAAsF;QACtF,MAAM,IAAI,GAAkB,CAAC,CAAC,WAAW,GAAG,0BAA0B,CAAC,IAAI,CAAC,WAAW,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;QAEjH,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;IAC/C,CAAC;CACF"}