prismcast 1.4.2 → 1.5.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/dist/app.js +18 -1
- package/dist/app.js.map +1 -1
- package/dist/browser/cdp.d.ts +2 -1
- package/dist/browser/cdp.js +44 -23
- package/dist/browser/cdp.js.map +1 -1
- package/dist/browser/channelSelection.d.ts +45 -1
- package/dist/browser/channelSelection.js +164 -27
- package/dist/browser/channelSelection.js.map +1 -1
- package/dist/browser/display.d.ts +0 -4
- package/dist/browser/display.js +0 -7
- package/dist/browser/display.js.map +1 -1
- package/dist/browser/index.d.ts +5 -0
- package/dist/browser/index.js +14 -0
- package/dist/browser/index.js.map +1 -1
- package/dist/browser/precaching.d.ts +5 -0
- package/dist/browser/precaching.js +112 -0
- package/dist/browser/precaching.js.map +1 -0
- package/dist/browser/tuning/directv.d.ts +2 -0
- package/dist/browser/tuning/directv.js +723 -0
- package/dist/browser/tuning/directv.js.map +1 -0
- package/dist/browser/tuning/fox.d.ts +2 -2
- package/dist/browser/tuning/fox.js +141 -22
- package/dist/browser/tuning/fox.js.map +1 -1
- package/dist/browser/tuning/hbo.d.ts +2 -2
- package/dist/browser/tuning/hbo.js +110 -41
- package/dist/browser/tuning/hbo.js.map +1 -1
- package/dist/browser/tuning/hulu.d.ts +2 -2
- package/dist/browser/tuning/hulu.js +442 -168
- package/dist/browser/tuning/hulu.js.map +1 -1
- package/dist/browser/tuning/sling.d.ts +2 -2
- package/dist/browser/tuning/sling.js +200 -56
- package/dist/browser/tuning/sling.js.map +1 -1
- package/dist/browser/tuning/youtubeTv.d.ts +2 -2
- package/dist/browser/tuning/youtubeTv.js +243 -57
- package/dist/browser/tuning/youtubeTv.js.map +1 -1
- package/dist/browser/video.d.ts +1 -1
- package/dist/browser/video.js +4 -2
- package/dist/browser/video.js.map +1 -1
- package/dist/channels/index.js +280 -34
- package/dist/channels/index.js.map +1 -1
- package/dist/config/health.d.ts +78 -0
- package/dist/config/health.js +202 -0
- package/dist/config/health.js.map +1 -0
- package/dist/config/paths.d.ts +10 -0
- package/dist/config/paths.js +14 -0
- package/dist/config/paths.js.map +1 -1
- package/dist/config/profiles.d.ts +6 -4
- package/dist/config/profiles.js +65 -14
- package/dist/config/profiles.js.map +1 -1
- package/dist/config/providerPacks.d.ts +46 -0
- package/dist/config/providerPacks.js +200 -0
- package/dist/config/providerPacks.js.map +1 -0
- package/dist/config/providers.d.ts +36 -3
- package/dist/config/providers.js +168 -8
- package/dist/config/providers.js.map +1 -1
- package/dist/config/sites.d.ts +1 -12
- package/dist/config/sites.js +38 -5
- package/dist/config/sites.js.map +1 -1
- package/dist/config/userChannels.d.ts +12 -0
- package/dist/config/userChannels.js +81 -14
- package/dist/config/userChannels.js.map +1 -1
- package/dist/config/userConfig.d.ts +5 -1
- package/dist/config/userConfig.js +58 -6
- package/dist/config/userConfig.js.map +1 -1
- package/dist/config/userProfiles.d.ts +81 -0
- package/dist/config/userProfiles.js +424 -0
- package/dist/config/userProfiles.js.map +1 -0
- package/dist/routes/config/channels/index.d.ts +3 -0
- package/dist/routes/config/channels/index.js +3 -0
- package/dist/routes/config/channels/index.js.map +1 -0
- package/dist/routes/config/channels/routes.d.ts +6 -0
- package/dist/routes/config/channels/routes.js +797 -0
- package/dist/routes/config/channels/routes.js.map +1 -0
- package/dist/routes/config/channels/table.d.ts +46 -0
- package/dist/routes/config/channels/table.js +811 -0
- package/dist/routes/config/channels/table.js.map +1 -0
- package/dist/routes/config/index.d.ts +37 -0
- package/dist/routes/config/index.js +81 -0
- package/dist/routes/config/index.js.map +1 -0
- package/dist/routes/config/providers.d.ts +18 -0
- package/dist/routes/config/providers.js +573 -0
- package/dist/routes/config/providers.js.map +1 -0
- package/dist/routes/config/settings.d.ts +39 -0
- package/dist/routes/config/settings.js +820 -0
- package/dist/routes/config/settings.js.map +1 -0
- package/dist/routes/index.d.ts +3 -2
- package/dist/routes/index.js +7 -4
- package/dist/routes/index.js.map +1 -1
- package/dist/routes/playlist.d.ts +5 -1
- package/dist/routes/playlist.js +32 -7
- package/dist/routes/playlist.js.map +1 -1
- package/dist/routes/providers.d.ts +6 -0
- package/dist/routes/providers.js +166 -0
- package/dist/routes/providers.js.map +1 -0
- package/dist/routes/root/content.d.ts +32 -0
- package/dist/routes/root/content.js +857 -0
- package/dist/routes/root/content.js.map +1 -0
- package/dist/routes/root/index.js +197 -0
- package/dist/routes/root/index.js.map +1 -0
- package/dist/routes/root/scripts/channels.d.ts +1 -0
- package/dist/routes/root/scripts/channels.js +745 -0
- package/dist/routes/root/scripts/channels.js.map +1 -0
- package/dist/routes/root/scripts/config.d.ts +1 -0
- package/dist/routes/root/scripts/config.js +1662 -0
- package/dist/routes/root/scripts/config.js.map +1 -0
- package/dist/routes/root/scripts/index.d.ts +3 -0
- package/dist/routes/root/scripts/index.js +8 -0
- package/dist/routes/root/scripts/index.js.map +1 -0
- package/dist/routes/root/scripts/status.d.ts +1 -0
- package/dist/routes/root/scripts/status.js +436 -0
- package/dist/routes/root/scripts/status.js.map +1 -0
- package/dist/routes/root/styles.d.ts +5 -0
- package/dist/routes/root/styles.js +447 -0
- package/dist/routes/root/styles.js.map +1 -0
- package/dist/routes/ui.js +8 -3
- package/dist/routes/ui.js.map +1 -1
- package/dist/service/commands.d.ts +5 -3
- package/dist/service/commands.js +117 -33
- package/dist/service/commands.js.map +1 -1
- package/dist/service/generators.d.ts +27 -0
- package/dist/service/generators.js +97 -6
- package/dist/service/generators.js.map +1 -1
- package/dist/streaming/hls.js +18 -1
- package/dist/streaming/hls.js.map +1 -1
- package/dist/streaming/lifecycle.js +1 -1
- package/dist/streaming/lifecycle.js.map +1 -1
- package/dist/streaming/monitor.d.ts +1 -38
- package/dist/streaming/monitor.js +2 -289
- package/dist/streaming/monitor.js.map +1 -1
- package/dist/streaming/recovery.d.ts +143 -0
- package/dist/streaming/recovery.js +286 -0
- package/dist/streaming/recovery.js.map +1 -0
- package/dist/streaming/registry.d.ts +1 -1
- package/dist/streaming/setup.d.ts +1 -1
- package/dist/streaming/setup.js +3 -1
- package/dist/streaming/setup.js.map +1 -1
- package/dist/streaming/statusEmitter.d.ts +4 -2
- package/dist/streaming/statusEmitter.js +5 -0
- package/dist/streaming/statusEmitter.js.map +1 -1
- package/dist/types/channels.d.ts +68 -0
- package/dist/types/channels.js +2 -0
- package/dist/types/channels.js.map +1 -0
- package/dist/types/config.d.ts +127 -0
- package/dist/types/config.js +2 -0
- package/dist/types/config.js.map +1 -0
- package/dist/types/index.d.ts +7 -429
- package/dist/types/index.js +1 -5
- package/dist/types/index.js.map +1 -1
- package/dist/types/profiles.d.ts +141 -0
- package/dist/types/profiles.js +2 -0
- package/dist/types/profiles.js.map +1 -0
- package/dist/types/selection.d.ts +101 -0
- package/dist/types/selection.js +6 -0
- package/dist/types/selection.js.map +1 -0
- package/dist/types/shared.d.ts +7 -0
- package/dist/types/shared.js +6 -0
- package/dist/types/shared.js.map +1 -0
- package/dist/types/streaming.d.ts +96 -0
- package/dist/types/streaming.js +2 -0
- package/dist/types/streaming.js.map +1 -0
- package/dist/utils/debugFilter.js +3 -1
- package/dist/utils/debugFilter.js.map +1 -1
- package/dist/utils/format.d.ts +7 -0
- package/dist/utils/format.js +22 -0
- package/dist/utils/format.js.map +1 -1
- package/dist/utils/index.d.ts +1 -0
- package/dist/utils/index.js +1 -0
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/sanitize.d.ts +14 -0
- package/dist/utils/sanitize.js +37 -0
- package/dist/utils/sanitize.js.map +1 -0
- package/package.json +5 -3
- package/dist/routes/config.d.ts +0 -76
- package/dist/routes/config.js +0 -2187
- package/dist/routes/config.js.map +0 -1
- package/dist/routes/root.js +0 -3158
- package/dist/routes/root.js.map +0 -1
- /package/dist/routes/{root.d.ts → root/index.d.ts} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"directv.js","sourceRoot":"","sources":["../../../src/browser/tuning/directv.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAC/D,OAAO,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AACpF,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAa/C,8JAA8J;AAC9J,oKAAoK;AACpK,MAAM,mBAAmB,GAAG,IAAI,GAAG,EAA+B,CAAC;AAEnE,oKAAoK;AACpK,0JAA0J;AAC1J,gFAAgF;AAChF,IAAI,sBAAsB,GAAG,KAAK,CAAC;AAEnC,yFAAyF;AACzF,MAAM,yBAAyB,GAAG,IAAI,OAAO,EAAQ,CAAC;AAUtD,MAAM,YAAY,GAAG,IAAI,OAAO,EAAmB,CAAC;AAEpD,mHAAmH;AACnH,MAAM,iBAAiB,GAAG,kCAAkC,CAAC;AAE7D,8JAA8J;AAC9J,2JAA2J;AAC3J,sHAAsH;AACtH,MAAM,YAAY,GAAG,IAAI,CAAC;AAE1B,+JAA+J;AAC/J,0JAA0J;AAC1J,iGAAiG;AACjG,MAAM,iBAAiB,GAAG,KAAK,CAAC;AAEhC;;;;GAIG;AACH,SAAS,iBAAiB;IAExB,mBAAmB,CAAC,KAAK,EAAE,CAAC;IAC5B,sBAAsB,GAAG,KAAK,CAAC;AACjC,CAAC;AAED;;;;GAIG;AACH,SAAS,oBAAoB,CAAC,IAAY;IAExC,IAAI,QAAgG,CAAC;IAErG,IAAI,CAAC;QAEH,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAoB,CAAC;IACjD,CAAC;IAAC,MAAM,CAAC;QAEP,GAAG,CAAC,KAAK,CAAC,gBAAgB,EAAE,0CAA0C,CAAC,CAAC;QAExE,OAAO;IACT,CAAC;IAED,IAAG,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC,EAAE,CAAC;QAEvD,OAAO;IACT,CAAC;IAED,IAAI,KAAK,GAAG,CAAC,CAAC;IAEd,KAAI,MAAM,EAAE,IAAI,QAAQ,EAAE,CAAC;QAEzB,IAAG,EAAE,CAAC,WAAW,IAAI,EAAE,CAAC,SAAS,IAAI,EAAE,CAAC,UAAU,EAAE,CAAC;YAEnD,MAAM,UAAU,GAAG,oBAAoB,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC;YAExD,mBAAmB,CAAC,GAAG,CAAC,UAAU,EAAE;gBAElC,QAAQ,EAAE,EAAE,CAAC,QAAQ,IAAI,EAAE;gBAC3B,SAAS,EAAE,EAAE,CAAC,SAAS;gBACvB,WAAW,EAAE,EAAE,CAAC,WAAW;gBAC3B,UAAU,EAAE,EAAE,CAAC,UAAU;aAC1B,CAAC,CAAC;YAEH,KAAK,EAAE,CAAC;QACV,CAAC;IACH,CAAC;IAED,IAAG,KAAK,GAAG,CAAC,EAAE,CAAC;QAEb,sBAAsB,GAAG,IAAI,CAAC;QAE9B,GAAG,CAAC,KAAK,CAAC,gBAAgB,EAAE,wCAAwC,EAAE,KAAK,CAAC,CAAC;IAC/E,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,SAAS,qBAAqB,CAAC,IAAU;IAEvC,IAAG,yBAAyB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;QAEvC,OAAO;IACT,CAAC;IAED,yBAAyB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAEpC,IAAI,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,GAAG,EAAE,EAAE;QAEzB,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;QAExB,mFAAmF;QACnF,IAAG,IAAI,CAAC,UAAU,CAAC,qBAAqB,CAAC,EAAE,CAAC;YAE1C,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC,CAAC;YAE/D,OAAO;QACT,CAAC;QAED,yHAAyH;QACzH,IAAG,IAAI,CAAC,UAAU,CAAC,mBAAmB,CAAC,EAAE,CAAC;YAExC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;YAEtC,OAAO;QACT,CAAC;QAED,mHAAmH;QACnH,IAAG,IAAI,CAAC,UAAU,CAAC,qBAAqB,CAAC,EAAE,CAAC;YAE1C,GAAG,CAAC,KAAK,CAAC,gBAAgB,EAAE,0BAA0B,EAAE,IAAI,CAAC,CAAC;YAC9D,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;YAEvC,OAAO;QACT,CAAC;QAED,4FAA4F;QAC5F,IAAG,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,EAAE,CAAC;YAErC,GAAG,CAAC,KAAK,CAAC,gBAAgB,EAAE,IAAI,CAAC,CAAC;QACpC,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,KAAK,UAAU,4BAA4B,CAAC,IAAU,EAAE,WAAmB,EAAE,YAAqB;IAEhG,MAAM,IAAI,CAAC,qBAAqB,CAAC,CAAC,UAAkB,EAAE,gBAAyB,EAAQ,EAAE;QAEvF,8JAA8J;QAC9J,qCAAqC;QACrC,IAAI,CAAC;YAEH,IAAG,MAAM,CAAC,IAAI,KAAK,MAAM,CAAC,GAAG,EAAE,CAAC;gBAE9B,OAAO;YACT,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YAEP,OAAO;QACT,CAAC;QAED,sCAAsC;QACtC,OAAO,CAAC,GAAG,CAAC,+CAA+C,GAAG,UAAU,GAAG,iBAAiB,GAAG,MAAM,CAAC,gBAAgB,CAAC,GAAG,IAAI,CAAC,CAAC;QAMhI,IAAI,IAAI,GAAoB,IAAI,CAAC;QAEjC,+JAA+J;QAC/J,+JAA+J;QAC/J,+JAA+J;QAC/J,6DAA6D;QAC7D,MAAM,cAAc,GAAG,0BAA0B,CAAC;QAElD,iDAAiD;QACjD,MAAM,GAAG,GAAG,MAA8C,CAAC;QAE3D,GAAG,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC;QAE3B,MAAM,UAAU,GAAG,GAAG,CAAC,cAAc,CAAC,CAAC;QACvC,MAAM,YAAY,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAEtD,UAAU,CAAC,IAAI,GAAG,UAAS,GAAG,IAAe;YAE3C,qJAAqJ;YACrJ,uFAAuF;YACvF,KAAI,MAAM,KAAK,IAAI,IAAI,EAAE,CAAC;gBAExB,IAAG,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC;oBAE/C,SAAS;gBACX,CAAC;gBAED,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAwC,CAAC;gBAEjE,IAAG,CAAC,OAAO,QAAQ,KAAK,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;oBAE7C,uGAAuG;oBACvG,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,MAAe,EAAQ,EAAE;wBAEnC,IAAI,GAAG,MAAqB,CAAC;wBAE7B,sCAAsC;wBACtC,OAAO,CAAC,GAAG,CAAC,+CAA+C,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAE,MAAmB,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,YAAY,CAAC,CAAC;wBAEjI,QAAQ,CAAC,MAAM,CAAC,CAAC;oBACnB,CAAC,CAAC;gBACJ,CAAC;YACH,CAAC;YAED,OAAO,YAAY,CAAC,GAAG,IAAI,CAAC,CAAC;QAC/B,CAAC,CAAC;QAEF,4JAA4J;QAC5J,4JAA4J;QAC5J,0BAA0B;QAC1B,MAAM,aAAa,GAAG,GAAG,CAAC;QAC1B,MAAM,aAAa,GAAG,KAAK,CAAC;QAC5B,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAE7B,mJAAmJ;QACnJ,mHAAmH;QACnH,MAAM,cAAc,GAAG,CAAE,mBAAmB,EAAE,eAAe,EAAE,0BAA0B,CAAE,CAAC;QAE5F,+FAA+F;QAC/F,MAAM,YAAY,GAAG,CAAC,EAAW,EAAsB,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAEnI,8GAA8G;QAC9G,IAAI,gBAAgB,GAAG,KAAK,CAAC;QAC7B,IAAI,kBAAkB,GAAG,KAAK,CAAC;QAE/B,yJAAyJ;QACzJ,yIAAyI;QACzI,IAAI,eAAe,GAAG,CAAC,CAAC;QACxB,MAAM,oBAAoB,GAAG,IAAI,CAAC;QAKlC,IAAI,WAAW,GAAqB,IAAI,CAAC;QAEzC,wJAAwJ;QACxJ,4DAA4D;QAC5D,IAAI,mBAAmB,GAAG,KAAK,CAAC;QAEhC,MAAM,SAAS,GAAG,WAAW,CAAC,GAAS,EAAE;YAEvC,IAAG,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,GAAG,aAAa,EAAE,CAAC;gBAE5C,aAAa,CAAC,SAAS,CAAC,CAAC;gBAEzB,sCAAsC;gBACtC,OAAO,CAAC,GAAG,CAAC,uCAAuC,GAAG,MAAM,CAAC,aAAa,CAAC,GAAG,QAAQ;oBACpF,CAAC,WAAW,CAAC,CAAC,CAAC,uDAAuD,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC;gBAEtG,IAAG,CAAC,gBAAgB,EAAE,CAAC;oBAErB,sCAAsC;oBACtC,OAAO,CAAC,GAAG,CAAC,kCAAkC;wBAC5C,CAAC,WAAW,CAAC,CAAC,CAAC,gDAAgD,CAAC,CAAC,CAAC,6CAA6C,CAAC,CAAC,CAAC;gBACtH,CAAC;gBAED,OAAO;YACT,CAAC;YAED,oJAAoJ;YACpJ,+HAA+H;YAC/H,IAAG,CAAC,WAAW,EAAE,CAAC;gBAEhB,4IAA4I;gBAC5I,mJAAmJ;gBACnJ,IAAI,OAAO,GAAmB,QAAQ,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;gBAClE,IAAI,QAAQ,GAAuB,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;gBAE/E,IAAG,CAAC,QAAQ,EAAE,CAAC;oBAEb,OAAO,GAAG,IAAI,CAAC;oBAEf,KAAI,MAAM,KAAK,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;wBAEtD,MAAM,GAAG,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;wBAEhC,IAAG,GAAG,EAAE,CAAC;4BAEP,OAAO,GAAG,KAAK,CAAC;4BAChB,QAAQ,GAAG,GAAG,CAAC;4BAEf,MAAM;wBACR,CAAC;oBACH,CAAC;gBACH,CAAC;gBAED,IAAG,CAAC,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC;oBAEzB,6HAA6H;oBAC7H,IAAG,CAAC,eAAe,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC;wBAE3D,eAAe,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;oBAC/B,CAAC;oBAED,IAAG,eAAe,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,eAAe,CAAC,GAAG,oBAAoB,CAAC,EAAE,CAAC;wBAE9E,aAAa,CAAC,SAAS,CAAC,CAAC;wBAEzB,sCAAsC;wBACtC,OAAO,CAAC,GAAG,CAAC,2EAA2E,GAAG,MAAM,CAAC,oBAAoB,CAAC,GAAG,KAAK,CAAC,CAAC;wBAEhI,IAAG,CAAC,gBAAgB,EAAE,CAAC;4BAErB,sCAAsC;4BACtC,OAAO,CAAC,GAAG,CAAC,iDAAiD,CAAC,CAAC;wBACjE,CAAC;oBACH,CAAC;oBAED,OAAO;gBACT,CAAC;gBAED,mIAAmI;gBACnI,IAAG,CAAC,gBAAgB,EAAE,CAAC;oBAErB,gBAAgB,GAAG,IAAI,CAAC;oBAExB,sCAAsC;oBACtC,OAAO,CAAC,GAAG,CAAC,+BAA+B,GAAG,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE,GAAG,QAAQ,GAAG,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,CAAC,GAAG,UAAU;wBACtH,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;gBACnC,CAAC;gBAED,kJAAkJ;gBAClJ,4CAA4C;gBAC5C,MAAM,KAAK,GAAI,OAA8C,CAAC,QAAQ,CAAsC,CAAC;gBAC7G,MAAM,SAAS,GACb,CAAC,KAAK,IAAI,CAAC,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAkC,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC;gBAE5G,IAAG,CAAC,SAAS,EAAE,CAAC;oBAEd,OAAO;gBACT,CAAC;gBAED,4HAA4H;gBAC5H,MAAM,KAAK,GAA8B,CAAC,SAAS,CAAC,CAAC;gBACrD,IAAI,KAAK,GAAqB,IAAI,CAAC;gBACnC,IAAI,OAAO,GAAG,CAAC,CAAC;gBAChB,MAAM,SAAS,GAAG,IAAI,CAAC;gBAEvB,OAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC,EAAE,CAAC;oBAElD,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC;oBAE3B,IAAG,CAAC,IAAI,EAAE,CAAC;wBAET,MAAM;oBACR,CAAC;oBAED,OAAO,EAAE,CAAC;oBAEV,gJAAgJ;oBAChJ,wEAAwE;oBACxE,MAAM,KAAK,GAAG,IAAI,CAAC,YAA8C,CAAC;oBAClE,MAAM,SAAS,GAAG,CAAC,KAAK,EAAE,KAAK,IAAK,KAAK,EAAE,KAAwC,EAAE,KAAK,CAAmC,CAAC;oBAE9H,IAAG,SAAS,IAAI,CAAC,OAAO,SAAS,CAAC,QAAQ,KAAK,UAAU,CAAC,IAAI,CAAC,OAAO,SAAS,CAAC,QAAQ,KAAK,UAAU,CAAC,EAAE,CAAC;wBAEzG,KAAK,GAAG,SAAiC,CAAC;wBAE1C,MAAM;oBACR,CAAC;oBAED,gDAAgD;oBAChD,IAAG,IAAI,CAAC,KAAK,EAAE,CAAC;wBAEd,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAgC,CAAC,CAAC;oBACpD,CAAC;oBAED,IAAG,IAAI,CAAC,OAAO,EAAE,CAAC;wBAEhB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAkC,CAAC,CAAC;oBACtD,CAAC;gBACH,CAAC;gBAED,IAAG,CAAC,KAAK,EAAE,CAAC;oBAEV,IAAG,CAAC,kBAAkB,EAAE,CAAC;wBAEvB,kBAAkB,GAAG,IAAI,CAAC;wBAE1B,sCAAsC;wBACtC,OAAO,CAAC,GAAG,CAAC,kDAAkD,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,yDAAyD,CAAC,CAAC;oBAChJ,CAAC;oBAED,OAAO;gBACT,CAAC;gBAED,2HAA2H;gBAC3H,WAAW,GAAG,KAAK,CAAC;gBAEpB,sCAAsC;gBACtC,OAAO,CAAC,GAAG,CAAC,yCAAyC,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,GAAG,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,kBAAkB,CAAC,CAAC;YAC1I,CAAC;YAED,sJAAsJ;YACtJ,uJAAuJ;YACvJ,wEAAwE;YACxE,MAAM,KAAK,GAAG,WAAW,CAAC,QAAQ,EAAE,CAAC;YACrC,IAAI,QAAQ,GAAsF,EAAE,CAAC;YAErG,IAAG,KAAK,CAAC,QAAQ,EAAE,CAAC;gBAElB,MAAM,aAAa,GAAG,KAAK,CAAC,QAAmC,CAAC;gBAEhE,sFAAsF;gBACtF,IAAG,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,aAAa,CAAC,EAAE,CAAC;oBAE9C,QAAQ,GAAG,aAAa,CAAC,aAAgC,CAAC;gBAC5D,CAAC;qBAAM,IAAG,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC;oBAE9C,QAAQ,GAAG,aAAa,CAAC,MAAyB,CAAC;gBACrD,CAAC;qBAAM,IAAG,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE,CAAC;oBAEhD,QAAQ,GAAG,aAAa,CAAC,QAA2B,CAAC;gBACvD,CAAC;qBAAM,IAAG,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,WAAW,CAAC,EAAE,CAAC;oBAEnD,QAAQ,GAAG,aAAa,CAAC,WAA8B,CAAC;gBAC1D,CAAC;YACH,CAAC;YAED,yEAAyE;YACzE,IAAG,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC,IAAI,KAAK,CAAC,aAAa,EAAE,CAAC;gBAElD,MAAM,MAAM,GAAG,KAAK,CAAC,aAAwC,CAAC;gBAE9D,IAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC;oBAEvC,QAAQ,GAAG,MAAM,CAAC,aAAgC,CAAC;gBACrD,CAAC;qBAAM,IAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;oBAEzC,QAAQ,GAAG,MAAM,CAAC,QAA2B,CAAC;gBAChD,CAAC;YACH,CAAC;YAED,IAAG,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAEzB,qHAAqH;gBACrH,IAAG,CAAC,mBAAmB,EAAE,CAAC;oBAExB,mBAAmB,GAAG,IAAI,CAAC;oBAE3B,sCAAsC;oBACtC,OAAO,CAAC,GAAG,CAAC,sGAAsG,CAAC,CAAC;gBACtH,CAAC;gBAED,OAAO;YACT,CAAC;YAED,uFAAuF;YACvF,aAAa,CAAC,SAAS,CAAC,CAAC;YAEzB,sCAAsC;YACtC,OAAO,CAAC,GAAG,CAAC,2CAA2C,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,GAAG,YAAY,CAAC,CAAC;YAEnJ,kJAAkJ;YAClJ,MAAM,UAAU,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;gBAEvC,QAAQ,EAAE,EAAE,CAAC,QAAQ,IAAI,EAAE;gBAC3B,SAAS,EAAE,EAAE,CAAC,IAAI,IAAI,EAAE;gBACxB,WAAW,EAAE,EAAE,CAAC,WAAW,IAAI,EAAE;gBACjC,UAAU,EAAE,EAAE,CAAC,UAAU,IAAI,EAAE;aAChC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,WAAW,IAAI,EAAE,CAAC,SAAS,CAAC,CAAC;YAEnD,sCAAsC;YACtC,OAAO,CAAC,GAAG,CAAC,qBAAqB,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC;YAEhE,8FAA8F;YAC9F,IAAG,gBAAgB,EAAE,CAAC;gBAEpB,OAAO;YACT,CAAC;YAED,sJAAsJ;YACtJ,4JAA4J;YAC5J,yJAAyJ;YACzJ,sJAAsJ;YACtJ,gJAAgJ;YAChJ,IAAG,CAAC,IAAI,EAAE,CAAC;gBAET,MAAM,UAAU,GAA6B,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;gBAE3D,IAAI,CAAC;oBAEH,UAAU,CAAC,IAAI,CAAC,CAAE,CAAC,eAAe,CAAC,EAAE,EAAE,EAAE,CAAC,MAAe,EAAQ,EAAE;4BAEjE,UAAU,CAAC,GAAG,GAAG,MAAkB,CAAC;wBACtC,CAAC,CAAE,CAAC,CAAC;gBACP,CAAC;gBAAC,OAAM,GAAG,EAAE,CAAC;oBAEZ,sCAAsC;oBACtC,OAAO,CAAC,GAAG,CAAC,6CAA6C,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;gBAC3E,CAAC;gBAED,IAAG,UAAU,CAAC,GAAG,EAAE,CAAC;oBAElB,IAAI,GAAG,UAAU,CAAC,GAAG,CAAC;oBAEtB,sCAAsC;oBACtC,OAAO,CAAC,GAAG,CAAC,mEAAmE,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,YAAY,CAAC,CAAC;gBACvI,CAAC;qBAAM,CAAC;oBAEN,sCAAsC;oBACtC,OAAO,CAAC,GAAG,CAAC,qGAAqG,CAAC,CAAC;gBACrH,CAAC;YACH,CAAC;YAED,IAAG,CAAC,IAAI,EAAE,CAAC;gBAET,sCAAsC;gBACtC,OAAO,CAAC,GAAG,CAAC,+GAA+G,CAAC,CAAC;gBAE7H,OAAO;YACT,CAAC;YAED,+IAA+I;YAC/I,MAAM,SAAS,GAAG,CAAC,IAAY,EAAU,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;YAC3F,MAAM,gBAAgB,GAAG,SAAS,CAAC,UAAU,CAAC,CAAC;YAE/C,6EAA6E;YAC7E,MAAM,aAAa,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,WAAW,IAAI,EAAE,CAAC,KAAK,gBAAgB,CAAC,CAAC;YAElG,IAAG,CAAC,aAAa,EAAE,CAAC;gBAElB,sCAAsC;gBACtC,OAAO,CAAC,GAAG,CAAC,gCAAgC,GAAG,UAAU,GAAG,0BAA0B,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,aAAa,CAAC,CAAC;gBAElI,OAAO;YACT,CAAC;YAED,sCAAsC;YACtC,OAAO,CAAC,GAAG,CAAC,uCAAuC,GAAG,CAAC,aAAa,CAAC,WAAW,IAAI,EAAE,CAAC,GAAG,SAAS,GAAG,CAAC,aAAa,CAAC,IAAI,IAAI,EAAE,CAAC;gBAC9H,eAAe,GAAG,CAAC,aAAa,CAAC,UAAU,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;YAE7D,uJAAuJ;YACvJ,yJAAyJ;YACzJ,sJAAsJ;YACtJ,mHAAmH;YACnH,IAAI,gBAAgB,GAAwD,IAAI,CAAC;YAEjF,KAAI,MAAM,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;gBAE1C,yHAAyH;gBACzH,IAAG,OAAO,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,UAAU,EAAE,CAAC;oBAE1C,SAAS;gBACX,CAAC;gBAED,IAAI,YAAoB,CAAC;gBAEzB,IAAI,CAAC;oBAEH,YAAY,GAAI,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAgC,CAAC,QAAQ,EAAE,CAAC;gBAC7E,CAAC;gBAAC,MAAM,CAAC;oBAEP,SAAS;gBACX,CAAC;gBAED,IAAG,YAAY,CAAC,QAAQ,CAAC,gBAAgB,CAAC,IAAI,YAAY,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;oBAEjF,gJAAgJ;oBAChJ,IAAI,CAAC;wBAEH,MAAM,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;wBAErC,IAAG,OAAO,aAAa,CAAC,cAAc,KAAK,UAAU,EAAE,CAAC;4BAEtD,gBAAgB,GAAG,aAAa,CAAC,cAA4D,CAAC;wBAChG,CAAC;6BAAM,CAAC;4BAEN,0EAA0E;4BAC1E,KAAI,MAAM,SAAS,IAAI,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC;gCAElD,MAAM,SAAS,GAAG,aAAa,CAAC,SAAS,CAAC,CAAC;gCAE3C,IAAG,CAAC,OAAO,SAAS,KAAK,UAAU,CAAC,IAAI,SAAS,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC;oCAExF,gBAAgB,GAAG,SAAuD,CAAC;oCAE3E,MAAM;gCACR,CAAC;4BACH,CAAC;wBACH,CAAC;oBACH,CAAC;oBAAC,OAAM,OAAO,EAAE,CAAC;wBAEhB,sCAAsC;wBACtC,OAAO,CAAC,GAAG,CAAC,2DAA2D,GAAG,QAAQ,GAAG,wBAAwB,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;wBAEjI,OAAO;oBACT,CAAC;oBAED,MAAM;gBACR,CAAC;YACH,CAAC;YAED,IAAG,CAAC,gBAAgB,EAAE,CAAC;gBAErB,sCAAsC;gBACtC,OAAO,CAAC,GAAG,CAAC,yEAAyE,CAAC,CAAC;gBAEvF,OAAO;YACT,CAAC;YAED,sCAAsC;YACtC,OAAO,CAAC,GAAG,CAAC,gDAAgD,GAAG,CAAC,aAAa,CAAC,WAAW,IAAI,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC;YAExG,wJAAwJ;YACxJ,wJAAwJ;YACxJ,mEAAmE;YACnE,IAAI,CAAC;gBAEH,gBAAgB,CAAC;oBAEf,UAAU,EAAE;wBAEV,YAAY,EAAE,EAAE,WAAW,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,EAAE;wBACnD,MAAM,EAAE,CAAC,OAAO,CAAC;wBACjB,cAAc,EAAE,QAAQ;wBACxB,QAAQ,EAAE,IAAI;wBACd,gBAAgB,EAAE,aAAa,CAAC,UAAU,IAAI,EAAE;qBACjD;oBACD,oBAAoB,EAAE,aAAa,CAAC,UAAU,IAAI,EAAE;oBACpD,QAAQ,EAAE,WAAW,CAAC,QAAQ;oBAC9B,QAAQ,EAAE,WAAW,CAAC,QAAQ;oBAC9B,cAAc,EAAE,IAAI;oBACpB,OAAO,EAAE,KAAK;iBACf,CAAC,CAAC;gBAEH,sCAAsC;gBACtC,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;YACnC,CAAC;YAAC,OAAM,GAAG,EAAE,CAAC;gBAEZ,sCAAsC;gBACtC,OAAO,CAAC,GAAG,CAAC,sCAAsC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;YACpE,CAAC;QACH,CAAC,EAAE,aAAa,CAAC,CAAC;IACpB,CAAC,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC;AAChC,CAAC;AAED;;;;;;;;GAQG;AACH,KAAK,UAAU,uBAAuB,CAAC,eAAuB,EAAE,IAAU;IAExE,MAAM,cAAc,GAAG,oBAAoB,CAAC,eAAe,CAAC,CAAC;IAE7D,+HAA+H;IAC/H,qBAAqB,CAAC,IAAI,CAAC,CAAC;IAE5B,uJAAuJ;IACvJ,8FAA8F;IAC9F,MAAM,SAAS,GAAG,EAAe,CAAC;IAElC,SAAS,CAAC,OAAO,GAAG,IAAI,OAAO,CAAU,CAAC,OAAO,EAAE,EAAE;QAEnD,SAAS,CAAC,OAAO,GAAG,OAAO,CAAC;IAC9B,CAAC,CAAC,CAAC;IAEH,YAAY,CAAC,GAAG,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IAElC,0IAA0I;IAC1I,IAAI,CAAC;QAEH,MAAM,4BAA4B,CAAC,IAAI,EAAE,eAAe,EAAE,KAAK,CAAC,CAAC;IACnE,CAAC;IAAC,OAAM,KAAK,EAAE,CAAC;QAEd,GAAG,CAAC,KAAK,CAAC,gBAAgB,EAAE,2CAA2C,EAAE,eAAe,EAAE,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;QAC9G,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAE1B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,2JAA2J;IAC3J,mDAAmD;IACnD,IAAG,mBAAmB,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE,CAAC;QAE3C,GAAG,CAAC,KAAK,CAAC,gBAAgB,EAAE,+EAA+E,EAAE,eAAe,CAAC,CAAC;IAChI,CAAC;SAAM,CAAC;QAEN,GAAG,CAAC,KAAK,CAAC,gBAAgB,EAAE,yEAAyE,EAAE,eAAe,CAAC,CAAC;IAC1H,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;;GAOG;AACH,KAAK,UAAU,mBAAmB,CAAC,IAAU,EAAE,OAAgC;IAE7E,MAAM,WAAW,GAAG,OAAO,CAAC,eAAe,CAAC;IAE5C,8JAA8J;IAC9J,qEAAqE;IACrE,MAAM,SAAS,GAAG,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAEzC,IAAG,SAAS,EAAE,CAAC;QAEb,sJAAsJ;QACtJ,uGAAuG;QACvG,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC;YAChC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;YACxD,KAAK,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC;SAC1C,CAAC,CAAC;QAEH,oJAAoJ;QACpJ,4DAA4D;QAC5D,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAE1B,IAAG,MAAM,KAAK,SAAS,EAAE,CAAC;YAExB,GAAG,CAAC,KAAK,CAAC,gBAAgB,EAAE,oCAAoC,EAAE,WAAW,CAAC,CAAC;YAE/E,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QAC7C,CAAC;QAED,yJAAyJ;QACzJ,mBAAmB,CAAC,MAAM,CAAC,oBAAoB,CAAC,WAAW,CAAC,CAAC,CAAC;QAE9D,IAAG,MAAM,KAAK,SAAS,EAAE,CAAC;YAExB,GAAG,CAAC,KAAK,CAAC,gBAAgB,EAAE,gGAAgG,EAAE,WAAW,CAAC,CAAC;QAC7I,CAAC;aAAM,CAAC;YAEN,GAAG,CAAC,KAAK,CAAC,gBAAgB,EAAE,8GAA8G,EACxI,WAAW,EAAE,YAAY,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC;IAED,6HAA6H;IAC7H,OAAO,MAAM,wBAAwB,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;AAC3D,CAAC;AAED;;;;;;;;;;;GAWG;AACH,KAAK,UAAU,wBAAwB,CAAC,IAAU,EAAE,WAAmB;IAErE,GAAG,CAAC,KAAK,CAAC,gBAAgB,EAAE,6BAA6B,EAAE,WAAW,CAAC,CAAC;IAExE,4GAA4G;IAC5G,IAAI,CAAC;QAEH,MAAM,IAAI,CAAC,eAAe,CAAC,yBAAyB,EAAE,EAAE,OAAO,EAAE,MAAM,CAAC,SAAS,CAAC,YAAY,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;IACnH,CAAC;IAAC,MAAM,CAAC;QAEP,OAAO,EAAE,MAAM,EAAE,2DAA2D,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IACjG,CAAC;IAED,0JAA0J;IAC1J,uJAAuJ;IACvJ,4JAA4J;IAC5J,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAY,EAAW,EAAE;QAE1D,yDAAyD;QACzD,IAAI,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,qBAAqB,GAAG,IAAI,GAAG,KAAK,CAA0B,CAAC;QAEjG,IAAG,CAAC,IAAI,EAAE,CAAC;YAET,MAAM,QAAQ,GAAG,QAAQ,CAAC,gBAAgB,CAAC,yBAAyB,CAAC,CAAC;YAEtE,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;YAErC,KAAI,MAAM,EAAE,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAErC,MAAM,KAAK,GAAG,CAAC,EAAE,CAAC,YAAY,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;gBAExF,IAAG,KAAK,KAAK,SAAS,EAAE,CAAC;oBAEvB,IAAI,GAAG,EAAiB,CAAC;oBAEzB,MAAM;gBACR,CAAC;YACH,CAAC;QACH,CAAC;QAED,IAAG,CAAC,IAAI,EAAE,CAAC;YAET,OAAO,KAAK,CAAC;QACf,CAAC;QAED,8EAA8E;QAC9E,IAAI,CAAC,YAAY,CAAC,uBAAuB,EAAE,GAAG,CAAC,CAAC;QAEhD,qFAAqF;QACrF,IAAI,CAAC,cAAc,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;QAE9D,OAAO,IAAI,CAAC;IACd,CAAC,EAAE,WAAW,CAAC,CAAC;IAEhB,IAAG,CAAC,KAAK,EAAE,CAAC;QAEV,wGAAwG;QACxG,MAAM,iBAAiB,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAa,EAAE;YAE3D,MAAM,KAAK,GAAG,QAAQ,CAAC,gBAAgB,CAAC,yBAAyB,CAAC,CAAC;YAEnE,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAC7I,CAAC,CAAC,CAAC;QAEH,oBAAoB,CAAC;YAEnB,iBAAiB;YACjB,WAAW;YACX,QAAQ,EAAE,iBAAiB;YAC3B,YAAY,EAAE,UAAU;YACxB,YAAY,EAAE,gBAAgB;SAC/B,CAAC,CAAC;QAEH,OAAO,EAAE,MAAM,EAAE,yBAAyB,GAAG,WAAW,GAAG,2BAA2B,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IAC3G,CAAC;IAED,gFAAgF;IAChF,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC;IAEjB,0DAA0D;IAC1D,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAY,EAAE;QAEpD,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,+BAA+B,CAA0B,CAAC;QAE9F,IAAG,CAAC,IAAI,EAAE,CAAC;YAET,OAAO,KAAK,CAAC;QACf,CAAC;QAED,IAAI,CAAC,eAAe,CAAC,uBAAuB,CAAC,CAAC;QAC9C,IAAI,CAAC,KAAK,EAAE,CAAC;QAEb,OAAO,IAAI,CAAC;IACd,CAAC,CAAC,CAAC;IAEH,IAAG,CAAC,WAAW,EAAE,CAAC;QAEhB,GAAG,CAAC,KAAK,CAAC,gBAAgB,EAAE,0DAA0D,EAAE,WAAW,CAAC,CAAC;QAErG,OAAO,EAAE,MAAM,EAAE,uDAAuD,GAAG,WAAW,GAAG,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IACjH,CAAC;IAED,8JAA8J;IAC9J,kDAAkD;IAClD,IAAI,CAAC;QAEH,MAAM,IAAI,CAAC,eAAe,CAAC,2BAA2B,EAAE,EAAE,OAAO,EAAE,MAAM,CAAC,SAAS,CAAC,YAAY,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;IACrH,CAAC;IAAC,MAAM,CAAC;QAEP,OAAO,EAAE,MAAM,EAAE,oDAAoD,GAAG,WAAW,GAAG,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IAC9G,CAAC;IAED,gEAAgE;IAChE,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC;IAEjB,2JAA2J;IAC3J,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAY,EAAE;QAEhD,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,2BAA2B,CAA0B,CAAC;QAE3F,IAAG,CAAC,KAAK,EAAE,CAAC;YAEV,OAAO,KAAK,CAAC;QACf,CAAC;QAED,uFAAuF;QACvF,MAAM,SAAS,GAAG,KAAK,CAAC,aAAa,CAAC,kBAAkB,CAA0B,IAAI,KAAK,CAAC;QAE5F,SAAS,CAAC,KAAK,EAAE,CAAC;QAElB,OAAO,IAAI,CAAC;IACd,CAAC,CAAC,CAAC;IAEH,IAAG,CAAC,OAAO,EAAE,CAAC;QAEZ,OAAO,EAAE,MAAM,EAAE,0CAA0C,GAAG,WAAW,GAAG,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IACpG,CAAC;IAED,GAAG,CAAC,IAAI,CAAC,+CAA+C,EAAE,WAAW,CAAC,CAAC;IAEvE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AAC3B,CAAC;AAED;;;GAGG;AACH,SAAS,8BAA8B;IAErC,MAAM,QAAQ,GAAwB,EAAE,CAAC;IAEzC,KAAI,MAAM,KAAK,IAAI,mBAAmB,CAAC,MAAM,EAAE,EAAE,CAAC;QAEhD,QAAQ,CAAC,IAAI,CAAC,EAAE,eAAe,EAAE,KAAK,CAAC,WAAW,EAAE,IAAI,EAAE,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;IACjF,CAAC;IAED,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IAEtD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;;;;;;GAQG;AACH,KAAK,UAAU,uBAAuB,CAAC,IAAU;IAE/C,8FAA8F;IAC9F,IAAG,sBAAsB,IAAI,CAAC,mBAAmB,CAAC,IAAI,GAAG,CAAC,CAAC,EAAE,CAAC;QAE5D,OAAO,8BAA8B,EAAE,CAAC;IAC1C,CAAC;IAED,0FAA0F;IAC1F,qBAAqB,CAAC,IAAI,CAAC,CAAC;IAE5B,sFAAsF;IACtF,IAAI,CAAC;QAEH,MAAM,4BAA4B,CAAC,IAAI,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;IACrD,CAAC;IAAC,OAAM,KAAK,EAAE,CAAC;QAEd,GAAG,CAAC,IAAI,CAAC,sDAAsD,EAAE,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;QAErF,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,EAAE,OAAO,EAAE,MAAM,CAAC,SAAS,CAAC,iBAAiB,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC;IAEvG,4IAA4I;IAC5I,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAElC,OAAM,CAAC,sBAAsB,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,cAAc,CAAC,GAAG,iBAAiB,CAAC,EAAE,CAAC;QAErF,4CAA4C;QAC5C,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC;IACnB,CAAC;IAED,IAAG,CAAC,sBAAsB,IAAI,CAAC,mBAAmB,CAAC,IAAI,KAAK,CAAC,CAAC,EAAE,CAAC;QAE/D,GAAG,CAAC,KAAK,CAAC,gBAAgB,EAAE,2DAA2D,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,cAAc,CAAC,CAAC;QAEtH,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,GAAG,CAAC,KAAK,CAAC,gBAAgB,EAAE,2CAA2C,EAAE,mBAAmB,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,cAAc,CAAC,CAAC;IAEhI,OAAO,8BAA8B,EAAE,CAAC;AAC1C,CAAC;AAED;;;;GAIG;AACH,SAAS,wBAAwB;IAE/B,IAAG,CAAC,sBAAsB,IAAI,CAAC,mBAAmB,CAAC,IAAI,KAAK,CAAC,CAAC,EAAE,CAAC;QAE/D,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,8BAA8B,EAAE,CAAC;AAC1C,CAAC;AAED,MAAM,CAAC,MAAM,eAAe,GAAmB;IAE7C,gBAAgB,EAAE,uBAAuB;IACzC,iBAAiB,EAAE,wBAAwB;IAC3C,QAAQ,EAAE,iBAAiB;IAC3B,oBAAoB,EAAE,IAAI;IAC1B,KAAK,EAAE,gBAAgB;IACvB,IAAI,EAAE,SAAS;IACf,QAAQ,EAAE;QAER,UAAU,EAAE,iBAAiB;QAC7B,OAAO,EAAE,mBAAmB;QAC5B,gBAAgB,EAAE,uBAAuB;KAC1C;IACD,YAAY,EAAE,aAAa;CAC5B,CAAC"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
export declare const
|
|
1
|
+
import type { ProviderModule } from "../../types/index.js";
|
|
2
|
+
export declare const foxProvider: ProviderModule;
|
|
@@ -1,44 +1,71 @@
|
|
|
1
1
|
import { CONFIG } from "../../config/index.js";
|
|
2
2
|
import { evaluateWithAbort } from "../../utils/index.js";
|
|
3
3
|
import { logAvailableChannels } from "../channelSelection.js";
|
|
4
|
+
// Cached discovery results. Populated by the first discoverFoxChannels call (discovery endpoint). Fox tuning is stateless (no tuning cache exists), so only
|
|
5
|
+
// the discovery endpoint populates this cache. Cleared on browser disconnect via clearFoxCache().
|
|
6
|
+
let cachedDiscoveredChannels = null;
|
|
7
|
+
/**
|
|
8
|
+
* Clears the Fox discovery cache. Called by clearChannelSelectionCaches() in the coordinator when the browser restarts.
|
|
9
|
+
*/
|
|
10
|
+
function clearFoxCache() {
|
|
11
|
+
cachedDiscoveredChannels = null;
|
|
12
|
+
}
|
|
4
13
|
/**
|
|
5
14
|
* Fox.com grid strategy: finds a channel in the non-virtualized guide grid at fox.com/live/channels by matching the station code (button title attribute) on
|
|
6
|
-
* GuideChannelLogo buttons. All ~15 channels are present in the DOM
|
|
7
|
-
* logo button is an SPA state transition — the Bitmovin player at the
|
|
8
|
-
* video element with a new blob src.
|
|
15
|
+
* GuideChannelLogo buttons, with fallback to internal station codes from data-content-impression-id attributes. All ~15 channels are present in the DOM
|
|
16
|
+
* simultaneously once the grid renders dynamically (~4.5s after page load). Clicking the logo button is an SPA state transition — the Bitmovin player at the
|
|
17
|
+
* top of the page switches channels without navigation, destroying and recreating its video element with a new blob src.
|
|
9
18
|
*
|
|
10
19
|
* The selection process:
|
|
11
|
-
* 1. Poll via waitForFunction until the target
|
|
12
|
-
* 2. Scan all channel rows,
|
|
13
|
-
* 3. Case-insensitive match against the channelSelector
|
|
20
|
+
* 1. Poll via waitForFunction until the target appears as either a button title (e.g., FOXD2C, FNC) or an impression ID prefix (local affiliate call sign).
|
|
21
|
+
* 2. Scan all channel rows, checking button title first, then impression ID prefix for fallback matching.
|
|
22
|
+
* 3. Case-insensitive match against the channelSelector.
|
|
14
23
|
* 4. On match, call logoButton.click() directly via DOM — coordinate-based clicking is not possible because the GuideProgramHero (sticky, z-40) overlays the
|
|
15
24
|
* guide grid and intercepts all mouse events at the element's coordinates.
|
|
16
25
|
* @param page - The Puppeteer page object.
|
|
17
|
-
* @param profile - The resolved site profile with a non-null channelSelector (station code
|
|
26
|
+
* @param profile - The resolved site profile with a non-null channelSelector (station code like "FOXD2C" or a local affiliate call sign).
|
|
18
27
|
* @returns Result object with success status and optional failure reason.
|
|
19
28
|
*/
|
|
20
29
|
async function foxGridStrategy(page, profile) {
|
|
21
30
|
const stationCode = profile.channelSelector;
|
|
22
|
-
// Wait for the target
|
|
23
|
-
//
|
|
24
|
-
// target channel's row is actually present before attempting the click.
|
|
31
|
+
// Wait for the target to appear in the guide grid. Checks both button title (primary) and data-content-impression-id prefix (fallback for call-sign-based
|
|
32
|
+
// selectors that target a specific local affiliate by call sign).
|
|
25
33
|
try {
|
|
26
34
|
await page.waitForFunction((code) => {
|
|
35
|
+
const codeLower = code.toLowerCase();
|
|
27
36
|
const containers = document.querySelectorAll("[data-testid=\"GuideChannelContainer\"]");
|
|
28
37
|
return Array.from(containers).some((c) => {
|
|
29
38
|
const btn = c.querySelector("[data-testid=\"GuideChannelLogo\"] button");
|
|
30
|
-
|
|
39
|
+
if ((btn?.getAttribute("title") ?? "").toLowerCase() === codeLower) {
|
|
40
|
+
return true;
|
|
41
|
+
}
|
|
42
|
+
// Fallback: check the first data-content-impression-id prefix. The format is "{PREFIX}-program-..." where PREFIX is the internal station code.
|
|
43
|
+
const impressionDiv = c.querySelector("[data-content-impression-id]");
|
|
44
|
+
const impressionId = impressionDiv?.getAttribute("data-content-impression-id") ?? "";
|
|
45
|
+
const prefix = impressionId.split("-program-")[0].toLowerCase();
|
|
46
|
+
return (prefix.length > 0) && (prefix === codeLower);
|
|
31
47
|
});
|
|
32
48
|
}, { timeout: CONFIG.streaming.videoTimeout }, stationCode);
|
|
33
49
|
}
|
|
34
50
|
catch {
|
|
35
|
-
// Best-effort diagnostic: collect all available station codes from the guide grid
|
|
51
|
+
// Best-effort diagnostic: collect all available station codes and internal codes from the guide grid.
|
|
36
52
|
try {
|
|
37
53
|
const availableChannels = await evaluateWithAbort(page, () => {
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
.
|
|
54
|
+
const codes = new Set();
|
|
55
|
+
for (const container of Array.from(document.querySelectorAll("[data-testid=\"GuideChannelContainer\"]"))) {
|
|
56
|
+
const btn = container.querySelector("[data-testid=\"GuideChannelLogo\"] button");
|
|
57
|
+
const title = (btn?.getAttribute("title") ?? "").trim();
|
|
58
|
+
if (title.length > 0) {
|
|
59
|
+
codes.add(title);
|
|
60
|
+
}
|
|
61
|
+
const impressionDiv = container.querySelector("[data-content-impression-id]");
|
|
62
|
+
const impressionId = (impressionDiv?.getAttribute("data-content-impression-id") ?? "");
|
|
63
|
+
const prefix = impressionId.split("-program-")[0].trim();
|
|
64
|
+
if ((prefix.length > 0) && (prefix !== title)) {
|
|
65
|
+
codes.add(prefix);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
return Array.from(codes).sort();
|
|
42
69
|
}, []);
|
|
43
70
|
if (availableChannels.length > 0) {
|
|
44
71
|
logAvailableChannels({
|
|
@@ -56,8 +83,10 @@ async function foxGridStrategy(page, profile) {
|
|
|
56
83
|
}
|
|
57
84
|
// Click the channel logo button to tune the player. We use DOM element.click() rather than coordinate-based page.mouse.click() because the GuideProgramHero
|
|
58
85
|
// section (sticky top-[64px], z-40) overlays the guide grid and intercepts all coordinate-based mouse events. DOM .click() dispatches the event directly to the
|
|
59
|
-
// element, bypassing the sticky hero's hit-testing.
|
|
60
|
-
//
|
|
86
|
+
// element, bypassing the sticky hero's hit-testing.
|
|
87
|
+
//
|
|
88
|
+
// Matching order: button title first (handles "FOXD2C", "FNC", etc.), then impression ID prefix (handles local affiliate call signs for specific affiliate
|
|
89
|
+
// selection).
|
|
61
90
|
const clicked = await evaluateWithAbort(page, (code) => {
|
|
62
91
|
const codeLower = code.toLowerCase();
|
|
63
92
|
const containers = document.querySelectorAll("[data-testid=\"GuideChannelContainer\"]");
|
|
@@ -66,11 +95,25 @@ async function foxGridStrategy(page, profile) {
|
|
|
66
95
|
if (!logoButton) {
|
|
67
96
|
continue;
|
|
68
97
|
}
|
|
69
|
-
|
|
98
|
+
// Primary match: button title (e.g., "FOXD2C", "FNC").
|
|
99
|
+
if ((logoButton.getAttribute("title") ?? "").toLowerCase() === codeLower) {
|
|
100
|
+
logoButton.click();
|
|
101
|
+
return true;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
// Fallback pass: match against impression ID prefix for call-sign-based selectors.
|
|
105
|
+
for (const container of Array.from(containers)) {
|
|
106
|
+
const logoButton = container.querySelector("[data-testid=\"GuideChannelLogo\"] button");
|
|
107
|
+
if (!logoButton) {
|
|
70
108
|
continue;
|
|
71
109
|
}
|
|
72
|
-
|
|
73
|
-
|
|
110
|
+
const impressionDiv = container.querySelector("[data-content-impression-id]");
|
|
111
|
+
const impressionId = impressionDiv?.getAttribute("data-content-impression-id") ?? "";
|
|
112
|
+
const prefix = impressionId.split("-program-")[0].toLowerCase();
|
|
113
|
+
if ((prefix.length > 0) && (prefix === codeLower)) {
|
|
114
|
+
logoButton.click();
|
|
115
|
+
return true;
|
|
116
|
+
}
|
|
74
117
|
}
|
|
75
118
|
return false;
|
|
76
119
|
}, [stationCode]);
|
|
@@ -79,5 +122,81 @@ async function foxGridStrategy(page, profile) {
|
|
|
79
122
|
}
|
|
80
123
|
return { success: true };
|
|
81
124
|
}
|
|
82
|
-
|
|
125
|
+
/**
|
|
126
|
+
* Reads all channel info from the Fox guide grid. For each GuideChannelContainer, extracts the display station code (button title), the internal station code
|
|
127
|
+
* (from the first data-content-impression-id prefix), and whether the channel is locked (lock-icon present on the first program thumbnail).
|
|
128
|
+
* @param page - The Puppeteer page object, expected to be on the Fox live channels page with at least one GuideChannelContainer rendered.
|
|
129
|
+
* @returns Array of channel info objects in DOM order.
|
|
130
|
+
*/
|
|
131
|
+
async function readFoxChannels(page) {
|
|
132
|
+
return await evaluateWithAbort(page, () => {
|
|
133
|
+
const results = [];
|
|
134
|
+
for (const container of Array.from(document.querySelectorAll("[data-testid=\"GuideChannelContainer\"]"))) {
|
|
135
|
+
const logoButton = container.querySelector("[data-testid=\"GuideChannelLogo\"] button");
|
|
136
|
+
const stationCode = (logoButton?.getAttribute("title") ?? "").trim();
|
|
137
|
+
if (stationCode.length === 0) {
|
|
138
|
+
continue;
|
|
139
|
+
}
|
|
140
|
+
// Extract the internal station code from the first data-content-impression-id. Format: "{PREFIX}-program-..." where PREFIX is the internal code.
|
|
141
|
+
const impressionDiv = container.querySelector("[data-content-impression-id]");
|
|
142
|
+
const impressionId = (impressionDiv?.getAttribute("data-content-impression-id") ?? "");
|
|
143
|
+
const internalCode = impressionId.split("-program-")[0].trim();
|
|
144
|
+
// Locked channels have a lock-icon SVG overlaid on the first program thumbnail. These require TV provider authentication (add-on tier).
|
|
145
|
+
const locked = container.querySelector("[data-testid=\"lock-icon\"]") !== null;
|
|
146
|
+
results.push({ internalCode: internalCode.length > 0 ? internalCode : stationCode, locked, stationCode });
|
|
147
|
+
}
|
|
148
|
+
return results;
|
|
149
|
+
}, []);
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Discovers all channels from the Fox guide grid. Waits for the first grid container to confirm the guide has rendered (the route handler's networkidle2
|
|
153
|
+
* navigation ensures all API data has arrived before this function is called), then reads station codes, internal codes, and lock status from each
|
|
154
|
+
* GuideChannelContainer. For FOXD2C entries (local affiliates), the channelSelector and affiliate are set to the internal call sign to enable precise affiliate
|
|
155
|
+
* selection. For all other channels, the channelSelector and name are the display station code. Locked channels (requiring TV provider authentication) are
|
|
156
|
+
* tagged with tier "addon".
|
|
157
|
+
* @param page - The Puppeteer page object, expected to be on the Fox live channels page.
|
|
158
|
+
* @returns Array of discovered channels with station codes, affiliate tagging, and tier information.
|
|
159
|
+
*/
|
|
160
|
+
async function discoverFoxChannels(page) {
|
|
161
|
+
if (cachedDiscoveredChannels) {
|
|
162
|
+
return cachedDiscoveredChannels;
|
|
163
|
+
}
|
|
164
|
+
// Wait for at least one GuideChannelContainer to confirm the guide grid has rendered. The route handler navigates with networkidle2, which ensures all API data
|
|
165
|
+
// has arrived before this function is called — no additional network idle wait is needed here.
|
|
166
|
+
try {
|
|
167
|
+
await page.waitForSelector("[data-testid=\"GuideChannelContainer\"]", { timeout: CONFIG.streaming.videoTimeout });
|
|
168
|
+
}
|
|
169
|
+
catch {
|
|
170
|
+
return [];
|
|
171
|
+
}
|
|
172
|
+
const foxChannels = await readFoxChannels(page);
|
|
173
|
+
// Do not cache empty results — leave null so subsequent calls retry the full walk. Empty results can indicate no TV provider login.
|
|
174
|
+
if (foxChannels.length === 0) {
|
|
175
|
+
return [];
|
|
176
|
+
}
|
|
177
|
+
cachedDiscoveredChannels = foxChannels.map((ch) => {
|
|
178
|
+
const entry = { channelSelector: ch.stationCode, name: ch.stationCode };
|
|
179
|
+
// FOXD2C entries are local affiliates distinguished by their internal call sign. Use the call sign as channelSelector for unambiguous
|
|
180
|
+
// tuning and tag the affiliate field so the relationship is visible in discovery output.
|
|
181
|
+
if (ch.stationCode === "FOXD2C") {
|
|
182
|
+
entry.affiliate = ch.internalCode;
|
|
183
|
+
entry.channelSelector = ch.internalCode;
|
|
184
|
+
}
|
|
185
|
+
if (ch.locked) {
|
|
186
|
+
entry.tier = "addon";
|
|
187
|
+
}
|
|
188
|
+
return entry;
|
|
189
|
+
});
|
|
190
|
+
cachedDiscoveredChannels.sort((a, b) => a.name.localeCompare(b.name));
|
|
191
|
+
return cachedDiscoveredChannels;
|
|
192
|
+
}
|
|
193
|
+
export const foxProvider = {
|
|
194
|
+
discoverChannels: discoverFoxChannels,
|
|
195
|
+
getCachedChannels: () => cachedDiscoveredChannels,
|
|
196
|
+
guideUrl: "https://www.fox.com/live/channels",
|
|
197
|
+
label: "Fox",
|
|
198
|
+
slug: "foxcom",
|
|
199
|
+
strategy: { clearCache: clearFoxCache, execute: foxGridStrategy },
|
|
200
|
+
strategyName: "foxGrid"
|
|
201
|
+
};
|
|
83
202
|
//# sourceMappingURL=fox.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fox.js","sourceRoot":"","sources":["../../../src/browser/tuning/fox.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAE/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"fox.js","sourceRoot":"","sources":["../../../src/browser/tuning/fox.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
export declare const
|
|
1
|
+
import type { ProviderModule } from "../../types/index.js";
|
|
2
|
+
export declare const hboProvider: ProviderModule;
|
|
@@ -3,46 +3,69 @@ import { CONFIG } from "../../config/index.js";
|
|
|
3
3
|
import { logAvailableChannels } from "../channelSelection.js";
|
|
4
4
|
// Base URL for HBO Max watch page navigation and tab URL construction.
|
|
5
5
|
const HBO_MAX_BASE_URL = "https://play.hbomax.com";
|
|
6
|
+
// Unified channel cache for HBO Max. Maps lowercased channel names (e.g., "hbo", "hbo hits") to their combined discovery and tuning data. Populated during the
|
|
7
|
+
// first tune (when the strategy reads all channels from the channel rail) or the first discovery call. Both tuning (via resolveHboDirectUrl) and discovery (via
|
|
8
|
+
// getCachedChannels / discoverHboChannels) read from this single cache. Cleared on browser disconnect via clearHboCache().
|
|
9
|
+
const hboChannelCache = new Map();
|
|
6
10
|
// Module-level cache for the HBO tab page URL discovered from the homepage menu bar. Cleared on browser disconnect (via clearHboCache) and inline when the
|
|
7
|
-
// cached URL turns out to be stale (the channel rail is not found at the cached URL).
|
|
11
|
+
// cached URL turns out to be stale (the channel rail is not found at the cached URL). Separate from the channel cache because it's a navigation target, not
|
|
12
|
+
// channel data.
|
|
8
13
|
let hboTabUrl = null;
|
|
9
|
-
// Module-level cache for HBO watch URLs discovered during channel rail scraping. On the first tune to any HBO channel, the strategy performs a bulk scrape of all
|
|
10
|
-
// channels from the HBO Channels tile rail, populating this cache with every channel's watch URL keyed by its lowercased name (e.g., "hbo", "hbo 2", "hbo hits").
|
|
11
|
-
// Subsequent tunes resolve via resolveHboDirectUrl without loading the tab page. Cleared on browser disconnect via clearHboCache().
|
|
12
|
-
const hboWatchUrlCache = new Map();
|
|
13
14
|
/**
|
|
14
15
|
* Returns a cached HBO Max watch URL for the given channel selector, or null if no cached URL exists.
|
|
15
16
|
* @param channelSelector - The channel selector string (e.g., "HBO", "HBO Hits").
|
|
16
17
|
* @returns The cached watch URL or null.
|
|
17
18
|
*/
|
|
18
19
|
function resolveHboDirectUrl(channelSelector) {
|
|
19
|
-
const
|
|
20
|
-
if (
|
|
21
|
-
LOG.debug("tuning:hbo", "HBO cache hit for %s: %s.", channelSelector,
|
|
20
|
+
const entry = hboChannelCache.get(channelSelector.toLowerCase());
|
|
21
|
+
if (entry) {
|
|
22
|
+
LOG.debug("tuning:hbo", "HBO cache hit for %s: %s.", channelSelector, entry.watchUrl);
|
|
23
|
+
return entry.watchUrl;
|
|
22
24
|
}
|
|
23
|
-
return
|
|
25
|
+
return null;
|
|
24
26
|
}
|
|
25
27
|
/**
|
|
26
|
-
* Invalidates the cached HBO Max
|
|
28
|
+
* Invalidates the cached HBO Max entry for the given channel selector. Called when a cached URL fails to produce a working stream.
|
|
27
29
|
* @param channelSelector - The channel selector string to invalidate.
|
|
28
30
|
*/
|
|
29
31
|
function invalidateHboDirectUrl(channelSelector) {
|
|
30
|
-
|
|
32
|
+
hboChannelCache.delete(channelSelector.toLowerCase());
|
|
31
33
|
}
|
|
32
34
|
/**
|
|
33
|
-
* Clears
|
|
35
|
+
* Clears all HBO caches: the unified channel cache and the tab URL. Called by clearChannelSelectionCaches() in the coordinator when the browser restarts, since
|
|
36
|
+
* cached state may be stale in a new browser session.
|
|
34
37
|
*/
|
|
35
38
|
function clearHboCache() {
|
|
39
|
+
hboChannelCache.clear();
|
|
36
40
|
hboTabUrl = null;
|
|
37
|
-
hboWatchUrlCache.clear();
|
|
38
41
|
}
|
|
39
42
|
/**
|
|
40
|
-
*
|
|
43
|
+
* Derives a DiscoveredChannel array from the unified channel cache. HBO does not create alias entries (resolveHboDirectUrl does exact-match only, no
|
|
44
|
+
* prefix/alternate fallback), so deduplication is not needed — every cache value is unique. Sorts by name before returning.
|
|
45
|
+
* @returns Sorted array of discovered channels.
|
|
46
|
+
*/
|
|
47
|
+
function buildHboDiscoveredChannels() {
|
|
48
|
+
return Array.from(hboChannelCache.values()).map((entry) => entry.discovered).sort((a, b) => a.name.localeCompare(b.name));
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Populates the unified channel cache from raw channel rail data. For each channel, builds a DiscoveredChannel and pairs it with the full watch URL.
|
|
52
|
+
* Shared by hboGridStrategy (tuning-time population) and discoverHboChannels (discovery endpoint).
|
|
53
|
+
* @param rawChannels - Array of channel names and watch paths from readHboChannelRail().
|
|
54
|
+
*/
|
|
55
|
+
function populateHboChannelCache(rawChannels) {
|
|
56
|
+
for (const ch of rawChannels) {
|
|
57
|
+
const watchUrl = HBO_MAX_BASE_URL + ch.watchPath;
|
|
58
|
+
hboChannelCache.set(ch.name.toLowerCase(), { discovered: { channelSelector: ch.name, name: ch.name }, watchUrl });
|
|
59
|
+
LOG.debug("tuning:hbo", "Cached HBO Max watch URL for %s: %s.", ch.name, watchUrl);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Reads the HBO tab URL from the homepage menu bar. The HBO brand page is linked via an `a[aria-label="H B O"]` element in the top navigation. The href attribute
|
|
41
64
|
* contains a relative path like `/channel/c0d1f27a-...` which we combine with the base URL to form the full page URL.
|
|
42
65
|
* @param page - The Puppeteer page object, expected to be on the HBO Max homepage.
|
|
43
66
|
* @returns The full HBO tab page URL, or null if the tab link was not found.
|
|
44
67
|
*/
|
|
45
|
-
async function
|
|
68
|
+
async function readHboTabUrl(page) {
|
|
46
69
|
// Wait for the HBO tab link to appear in the menu bar. The homepage is a single-page application that renders the navigation dynamically after the initial HTML
|
|
47
70
|
// shell loads. Without this wait, the evaluate call below would run against an incomplete DOM and fail to find the tab link.
|
|
48
71
|
const HBO_TAB_SELECTOR = "a[aria-label=\"H B O\"]";
|
|
@@ -65,13 +88,13 @@ async function scrapeHboTabUrl(page) {
|
|
|
65
88
|
return HBO_MAX_BASE_URL + href;
|
|
66
89
|
}
|
|
67
90
|
/**
|
|
68
|
-
*
|
|
91
|
+
* Reads all channels from the HBO Channels tile rail on the HBO tab page. The rail section contains tiles for each live channel, each with a backup text
|
|
69
92
|
* `<p aria-hidden="true">` element containing the channel name and an `<a>` with href pointing to the watch page. Returns all discovered channels so the caller
|
|
70
93
|
* can populate the cache in bulk.
|
|
71
94
|
* @param page - The Puppeteer page object, expected to be on the HBO tab page.
|
|
72
95
|
* @returns Object with `railFound` indicating whether the rail section was present, and `channels` containing all discovered channel names and watch paths.
|
|
73
96
|
*/
|
|
74
|
-
async function
|
|
97
|
+
async function readHboChannelRail(page) {
|
|
75
98
|
const HBO_RAIL_SELECTOR = "section[data-testid=\"hbo-page-rail-distribution-channels-us_rail\"]";
|
|
76
99
|
// Wait for the distribution channels rail section to appear. If it doesn't appear, the tab URL may be stale or the page structure changed.
|
|
77
100
|
try {
|
|
@@ -92,7 +115,7 @@ async function scrapeHboChannelRail(page) {
|
|
|
92
115
|
catch {
|
|
93
116
|
return { channels: [], railFound: false };
|
|
94
117
|
}
|
|
95
|
-
//
|
|
118
|
+
// Read all channels from the rail. Each tile contains an anchor with the watch URL and a backup text paragraph with the channel name.
|
|
96
119
|
const channels = await evaluateWithAbort(page, (selector) => {
|
|
97
120
|
const rail = document.querySelector(selector);
|
|
98
121
|
if (!rail) {
|
|
@@ -119,13 +142,13 @@ async function scrapeHboChannelRail(page) {
|
|
|
119
142
|
return { channels, railFound: true };
|
|
120
143
|
}
|
|
121
144
|
/**
|
|
122
|
-
* HBO grid strategy: discovers the HBO channels tab URL from the homepage menu bar, navigates to the tab page,
|
|
145
|
+
* HBO grid strategy: discovers the HBO channels tab URL from the homepage menu bar, navigates to the tab page, reads the live channel rail for all channel
|
|
123
146
|
* watch URLs, and navigates to the target channel's URL. All discovered channels are cached so that subsequent tunes to any HBO channel resolve via resolveDirectUrl
|
|
124
147
|
* without loading the tab page.
|
|
125
148
|
*
|
|
126
149
|
* The strategy handles three navigations per tune:
|
|
127
|
-
* 1. Homepage (already loaded by navigateToPage) →
|
|
128
|
-
* 2. Tab page →
|
|
150
|
+
* 1. Homepage (already loaded by navigateToPage) → read menu bar for tab URL (or use cache)
|
|
151
|
+
* 2. Tab page → read channel rail for all watch URLs
|
|
129
152
|
* 3. Watch page → video playback begins
|
|
130
153
|
*
|
|
131
154
|
* When the cached tab URL is stale (rail section not found), the strategy clears the cache, navigates back to the homepage, rediscovers the tab URL, and retries.
|
|
@@ -143,7 +166,7 @@ async function hboGridStrategy(page, profile) {
|
|
|
143
166
|
LOG.debug("tuning:hbo", "Using cached HBO tab URL: %s.", hboTabUrl);
|
|
144
167
|
}
|
|
145
168
|
else {
|
|
146
|
-
const discovered = await
|
|
169
|
+
const discovered = await readHboTabUrl(page);
|
|
147
170
|
if (!discovered) {
|
|
148
171
|
return { reason: "HBO tab not found in homepage menu bar. HBO Max subscription may not be active.", success: false };
|
|
149
172
|
}
|
|
@@ -156,8 +179,8 @@ async function hboGridStrategy(page, profile) {
|
|
|
156
179
|
catch (error) {
|
|
157
180
|
return { reason: "Failed to navigate to HBO tab page: " + formatError(error) + ".", success: false };
|
|
158
181
|
}
|
|
159
|
-
// Phase 2:
|
|
160
|
-
let railResult = await
|
|
182
|
+
// Phase 2: Read the channel rail for all channel watch URLs.
|
|
183
|
+
let railResult = await readHboChannelRail(page);
|
|
161
184
|
// Fallback: if the rail was not found and we used a cached URL, the cache may be stale. Clear it, navigate back to the homepage, rediscover the tab URL, and retry.
|
|
162
185
|
if (!railResult.railFound && usedCache) {
|
|
163
186
|
LOG.debug("tuning:hbo", "HBO channel rail not found at cached URL. Rediscovering tab URL from homepage.");
|
|
@@ -168,7 +191,7 @@ async function hboGridStrategy(page, profile) {
|
|
|
168
191
|
catch (error) {
|
|
169
192
|
return { reason: "Failed to navigate back to HBO Max homepage: " + formatError(error) + ".", success: false };
|
|
170
193
|
}
|
|
171
|
-
const rediscovered = await
|
|
194
|
+
const rediscovered = await readHboTabUrl(page);
|
|
172
195
|
if (!rediscovered) {
|
|
173
196
|
return { reason: "HBO tab not found in homepage menu bar after cache invalidation.", success: false };
|
|
174
197
|
}
|
|
@@ -180,7 +203,7 @@ async function hboGridStrategy(page, profile) {
|
|
|
180
203
|
catch (error) {
|
|
181
204
|
return { reason: "Failed to navigate to rediscovered HBO tab page: " + formatError(error) + ".", success: false };
|
|
182
205
|
}
|
|
183
|
-
railResult = await
|
|
206
|
+
railResult = await readHboChannelRail(page);
|
|
184
207
|
if (!railResult.railFound) {
|
|
185
208
|
return { reason: "HBO channel rail not found at rediscovered URL. Site structure may have changed.", success: false };
|
|
186
209
|
}
|
|
@@ -188,17 +211,13 @@ async function hboGridStrategy(page, profile) {
|
|
|
188
211
|
if (!railResult.railFound) {
|
|
189
212
|
return { reason: "HBO channel rail not found on tab page.", success: false };
|
|
190
213
|
}
|
|
191
|
-
// Populate the
|
|
192
|
-
//
|
|
193
|
-
|
|
194
|
-
const watchUrl = HBO_MAX_BASE_URL + ch.watchPath;
|
|
195
|
-
hboWatchUrlCache.set(ch.name.toLowerCase(), watchUrl);
|
|
196
|
-
LOG.debug("tuning:hbo", "Cached HBO Max watch URL for %s: %s.", ch.name, watchUrl);
|
|
197
|
-
}
|
|
214
|
+
// Populate the unified channel cache with all discovered channels. Always repopulate rather than skipping when the cache has entries, because invalidated
|
|
215
|
+
// entries (deleted by invalidateHboDirectUrl) need to be restored with fresh watch URLs from the rail.
|
|
216
|
+
populateHboChannelCache(railResult.channels);
|
|
198
217
|
// Look up the target channel from the populated cache.
|
|
199
|
-
const watchUrl =
|
|
218
|
+
const watchUrl = resolveHboDirectUrl(channelName);
|
|
200
219
|
if (!watchUrl) {
|
|
201
|
-
// Channel not found. Log available channels from the
|
|
220
|
+
// Channel not found. Log available channels from the rail data to help users identify valid channelSelector values.
|
|
202
221
|
logAvailableChannels({
|
|
203
222
|
availableChannels: railResult.channels.map((ch) => ch.name).sort(),
|
|
204
223
|
channelName,
|
|
@@ -219,7 +238,7 @@ async function hboGridStrategy(page, profile) {
|
|
|
219
238
|
}
|
|
220
239
|
/**
|
|
221
240
|
* Async wrapper around resolveHboDirectUrl for the ChannelStrategyEntry.resolveDirectUrl contract. The page parameter is unused because HBO watch URLs are
|
|
222
|
-
* resolved purely from the in-memory cache populated during the first channel rail
|
|
241
|
+
* resolved purely from the in-memory cache populated during the first channel rail read.
|
|
223
242
|
* @param channelSelector - The channel selector string (e.g., "HBO", "HBO Hits").
|
|
224
243
|
* @param _page - Unused. Present to satisfy the async resolveDirectUrl signature.
|
|
225
244
|
* @returns The cached watch URL or null.
|
|
@@ -228,10 +247,60 @@ async function hboGridStrategy(page, profile) {
|
|
|
228
247
|
async function resolveHboDirectUrlAsync(channelSelector, _page) {
|
|
229
248
|
return resolveHboDirectUrl(channelSelector);
|
|
230
249
|
}
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
250
|
+
/**
|
|
251
|
+
* Discovers all channels from the HBO Max channel rail. Returns cached results if the unified channel cache is populated from a prior tune or discovery call.
|
|
252
|
+
* Otherwise, extracts the HBO tab URL from the homepage menu bar, navigates to the tab page, reads all channels from the distribution channels rail, and
|
|
253
|
+
* populates the cache (unless empty, to allow retries on transient failures or missing HBO subscription).
|
|
254
|
+
* @param page - The Puppeteer page object, already on the HBO Max homepage (navigated by the route handler).
|
|
255
|
+
* @returns Array of discovered channels.
|
|
256
|
+
*/
|
|
257
|
+
async function discoverHboChannels(page) {
|
|
258
|
+
// Return from the unified cache if already populated.
|
|
259
|
+
if (hboChannelCache.size > 0) {
|
|
260
|
+
return buildHboDiscoveredChannels();
|
|
261
|
+
}
|
|
262
|
+
// Discover the HBO tab URL from the homepage menu bar.
|
|
263
|
+
const tabUrl = await readHboTabUrl(page);
|
|
264
|
+
if (!tabUrl) {
|
|
265
|
+
return [];
|
|
266
|
+
}
|
|
267
|
+
// Navigate to the HBO tab page.
|
|
268
|
+
try {
|
|
269
|
+
await page.goto(tabUrl, { timeout: CONFIG.streaming.navigationTimeout, waitUntil: "load" });
|
|
270
|
+
}
|
|
271
|
+
catch {
|
|
272
|
+
return [];
|
|
273
|
+
}
|
|
274
|
+
// Read the channel rail.
|
|
275
|
+
const railResult = await readHboChannelRail(page);
|
|
276
|
+
if (!railResult.railFound || (railResult.channels.length === 0)) {
|
|
277
|
+
return [];
|
|
278
|
+
}
|
|
279
|
+
populateHboChannelCache(railResult.channels);
|
|
280
|
+
return buildHboDiscoveredChannels();
|
|
281
|
+
}
|
|
282
|
+
/**
|
|
283
|
+
* Returns cached discovered channels from the unified channel cache, or null if the cache is empty (no prior tune or discovery call has read the channel rail).
|
|
284
|
+
* @returns Sorted array of discovered channels or null.
|
|
285
|
+
*/
|
|
286
|
+
function getHboCachedChannels() {
|
|
287
|
+
if (hboChannelCache.size === 0) {
|
|
288
|
+
return null;
|
|
289
|
+
}
|
|
290
|
+
return buildHboDiscoveredChannels();
|
|
291
|
+
}
|
|
292
|
+
export const hboProvider = {
|
|
293
|
+
discoverChannels: discoverHboChannels,
|
|
294
|
+
getCachedChannels: getHboCachedChannels,
|
|
295
|
+
guideUrl: "https://play.hbomax.com",
|
|
296
|
+
label: "HBO Max",
|
|
297
|
+
slug: "hbomax",
|
|
298
|
+
strategy: {
|
|
299
|
+
clearCache: clearHboCache,
|
|
300
|
+
execute: hboGridStrategy,
|
|
301
|
+
invalidateDirectUrl: invalidateHboDirectUrl,
|
|
302
|
+
resolveDirectUrl: resolveHboDirectUrlAsync
|
|
303
|
+
},
|
|
304
|
+
strategyName: "hboGrid"
|
|
236
305
|
};
|
|
237
306
|
//# sourceMappingURL=hbo.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hbo.js","sourceRoot":"","sources":["../../../src/browser/tuning/hbo.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,GAAG,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAC3E,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAE/C,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAE9D,uEAAuE;AACvE,MAAM,gBAAgB,GAAG,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"hbo.js","sourceRoot":"","sources":["../../../src/browser/tuning/hbo.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
export declare const
|
|
1
|
+
import type { ProviderModule } from "../../types/index.js";
|
|
2
|
+
export declare const huluProvider: ProviderModule;
|