multporn-api-sdk 0.1.3 → 0.1.4
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/browser/index.js +1556 -206
- package/dist/browser/index.js.map +1 -1
- package/dist/node/index.cjs +1557 -206
- package/dist/node/index.cjs.map +1 -1
- package/dist/node/index.js +1556 -206
- package/dist/node/index.js.map +1 -1
- package/dist/rn/index.js +1556 -206
- package/dist/rn/index.js.map +1 -1
- package/dist/types/index.d.ts +22 -32
- package/dist/types/index.js +1576 -204
- package/package.json +1 -1
package/dist/node/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/dom/cheerio.ts","../../src/http.ts","../../src/client-core.ts","../../src/index.node.ts"],"names":["u"],"mappings":";;;AAGO,SAAS,gBAAA,GAA2B;AACzC,EAAA,OAAO;AAAA,IACL,MAAM,IAAA,EAA2B;AAC/B,MAAA,OAAe,aAAK,IAAI,CAAA;AAAA,IAC1B,CAAA;AAAA,IACA,GAAA,CAAI,KAA+B,QAAA,EAAgC;AACjE,MAAA,MAAM,CAAA,GAAI,OAAO,GAAA,KAAQ,UAAA,GAAc,MAAe,GAAA,CAAY,CAAA;AAClE,MAAA,MAAM,OAAO,OAAO,GAAA,KAAQ,UAAA,GAAc,GAAA,GAAe,IAAY,IAAA,IAAQ,GAAA;AAC7E,MAAA,OAAQ,CAAA,CAAE,IAAI,CAAA,CAAU,QAAQ,EAAE,OAAA,EAAQ;AAAA,IAC5C,CAAA;AAAA,IACA,EAAA,CAAG,KAA+B,QAAA,EAAqC;AACrE,MAAA,MAAM,CAAA,GAAI,OAAO,GAAA,KAAQ,UAAA,GAAc,MAAe,GAAA,CAAY,CAAA;AAClE,MAAA,MAAM,OAAO,OAAO,GAAA,KAAQ,UAAA,GAAc,GAAA,GAAe,IAAY,IAAA,IAAQ,GAAA;AAC7E,MAAA,MAAM,MAAO,CAAA,CAAE,IAAI,CAAA,CAAU,QAAQ,EAAE,OAAA,EAAQ;AAC/C,MAAA,OAAO,GAAA,CAAI,MAAA,GAAS,GAAA,CAAI,CAAC,CAAA,GAAI,IAAA;AAAA,IAC/B,CAAA;AAAA,IACA,KAAK,EAAA,EAAgC;AACnC,MAAA,IAAI,CAAC,IAAI,OAAO,EAAA;AAChB,MAAA,IAAI;AAAE,QAAA,OAAQ,OAAA,CAAgB,EAAE,CAAA,CAAE,IAAA,GAAO,IAAA,EAAK,CAAE,OAAA,CAAQ,MAAA,EAAQ,GAAG,CAAA;AAAA,MAAG,CAAA,CAAA,MAAQ;AAAE,QAAA,OAAO,EAAA;AAAA,MAAI;AAAA,IAC7F,CAAA;AAAA,IACA,IAAA,CAAK,IAAmC,IAAA,EAAkC;AACxE,MAAA,IAAI,CAAC,IAAI,OAAO,MAAA;AAChB,MAAA,IAAI;AAAE,QAAA,OAAQ,OAAA,CAAgB,EAAE,CAAA,CAAE,IAAA,CAAK,IAAI,CAAA,IAAK,KAAA,CAAA;AAAA,MAAW,CAAA,CAAA,MAAQ;AAAE,QAAA,OAAO,MAAA;AAAA,MAAW;AAAA,IACzF,CAAA;AAAA,IACA,OAAA,CAAQ,IAAmC,QAAA,EAAqC;AAC9E,MAAA,IAAI,CAAC,IAAI,OAAO,IAAA;AAChB,MAAA,IAAI;AACF,QAAA,MAAM,GAAA,GAAO,QAAgB,EAAE,CAAA;AAC/B,QAAA,MAAM,QAAQ,GAAA,CAAI,OAAA,CAAQ,QAAQ,CAAA,CAAE,IAAI,CAAC,CAAA;AACzC,QAAA,OAAO,KAAA,IAAS,IAAA;AAAA,MAClB,CAAA,CAAA,MAAQ;AACN,QAAA,OAAO,IAAA;AAAA,MACT;AAAA,IACF;AAAA,GACF;AACF;;;ACtCA,IAAM,KAAA,GAAQ,CAAC,EAAA,KAAe,IAAI,OAAA,CAAc,CAAC,OAAA,KAAY,UAAA,CAAW,OAAA,EAAS,EAAE,CAAC,CAAA;AAEpF,SAAS,kBAAA,GAA8B;AACrC,EAAA,OAAO,OAAO,eAAA,KAAoB,WAAA;AACpC;AAEA,eAAe,gBAAA,CACb,GAAA,EACA,IAAA,EACA,SAAA,EACmB;AACnB,EAAA,IAAI,oBAAmB,EAAG;AACxB,IAAA,MAAM,IAAA,GAAO,IAAI,eAAA,EAAgB;AACjC,IAAA,MAAM,KAAA,GAAQ,WAAW,MAAM;AAC7B,MAAA,IAAI;AACF,QAAA,IAAA,CAAK,KAAA,EAAM;AAAA,MACb,CAAA,CAAA,MAAQ;AAAA,MACR;AAAA,IACF,GAAG,SAAS,CAAA;AAEZ,IAAA,IAAI;AACF,MAAA,MAAM,GAAA,GAAM,MAAM,KAAA,CAAM,GAAA,EAAK,EAAE,GAAG,IAAA,EAAM,MAAA,EAAQ,IAAA,CAAK,MAAA,EAAuB,CAAA;AAC5E,MAAA,YAAA,CAAa,KAAK,CAAA;AAClB,MAAA,OAAO,GAAA;AAAA,IACT,SAAS,CAAA,EAAG;AACV,MAAA,YAAA,CAAa,KAAK,CAAA;AAClB,MAAA,MAAM,CAAA;AAAA,IACR;AAAA,EACF;AAEA,EAAA,OAAO,MAAM,QAAQ,IAAA,CAAK;AAAA,IACxB,KAAA,CAAM,KAAK,IAAI,CAAA;AAAA,IACf,IAAI,OAAA;AAAA,MAAe,CAAC,CAAA,EAAG,MAAA,KACrB,UAAA,CAAW,MAAM,MAAA,CAAO,IAAI,SAAA,CAAU,iBAAiB,CAAC,CAAA,EAAG,SAAS;AAAA;AACtE,GACD,CAAA;AACH;AAUO,IAAM,kBAAA,GAAkC;AAAA,EAC7C,OAAA,EAAS,CAAA;AAAA,EACT,MAAA,EAAQ,CAAA;AAAA,EACR,UAAA,EAAY,GAAA;AAAA,EACZ,UAAA,EAAY,GAAA;AAAA,EACZ,OAAA,EAAS,CAAC,MAAA,KAAW;AACnB,IAAA,IAAI,MAAA,IAAU,MAAM,OAAO,IAAA;AAC3B,IAAA,OAAO,MAAA,IAAU,OAAO,MAAA,IAAU,GAAA;AAAA,EACpC;AACF;AAEO,IAAM,SAAA,GAAN,cAAwB,KAAA,CAAM;AAAA,EACnC,WAAA,CACE,SACO,MAAA,EACP;AACA,IAAA,KAAA,CAAM,OAAO,CAAA;AAFN,IAAA,IAAA,CAAA,MAAA,GAAA,MAAA;AAGP,IAAA,IAAA,CAAK,IAAA,GAAO,WAAA;AAAA,EACd;AACF;AAUO,IAAM,aAAN,MAAiB;AAAA,EACd,OAAA;AAAA,EACA,OAAA;AAAA,EACA,SAAA;AAAA,EACA,KAAA;AAAA,EACA,SAAA;AAAA,EAER,YAAY,IAAA,EAAyB;AACnC,IAAA,IAAA,CAAK,OAAA,GAAU,IAAA,CAAK,OAAA,CAAQ,OAAA,CAAQ,QAAQ,EAAE,CAAA;AAC9C,IAAA,IAAA,CAAK,OAAA,GAAU,IAAA,CAAK,OAAA,IAAW,EAAC;AAChC,IAAA,IAAA,CAAK,SAAA,GAAY,KAAK,SAAA,IAAa,IAAA;AACnC,IAAA,IAAA,CAAK,KAAA,GAAQ,EAAE,GAAG,kBAAA,EAAoB,GAAI,IAAA,CAAK,KAAA,IAAS,EAAC,EAAG;AAC5D,IAAA,IAAA,CAAK,SAAA,GACH,KAAK,SAAA,IACL,2GAAA;AAAA,EACJ;AAAA,EAEQ,SAAS,SAAA,EAAmB;AAClC,IAAA,IAAI;AACF,MAAA,OAAO,IAAI,GAAA,CAAI,SAAS,CAAA,CAAE,QAAA,EAAS;AAAA,IACrC,CAAA,CAAA,MAAQ;AACN,MAAA,OAAO,IAAI,GAAA,CAAI,SAAA,CAAU,OAAA,CAAQ,KAAA,EAAO,EAAE,CAAA,EAAG,IAAA,CAAK,OAAA,GAAU,GAAG,CAAA,CAAE,QAAA,EAAS;AAAA,IAC5E;AAAA,EACF;AAAA,EAEA,MAAM,OAAA,CAAQ,SAAA,EAAmB,OAAA,GAAU,CAAA,EAAoB;AAC7D,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,QAAA,CAAS,SAAS,CAAA;AAEnC,IAAA,IAAI;AACF,MAAA,MAAM,MAAM,MAAM,gBAAA;AAAA,QAChB,GAAA;AAAA,QACA;AAAA,UACE,MAAA,EAAQ,KAAA;AAAA,UACR,OAAA,EAAS;AAAA,YACP,cAAc,IAAA,CAAK,SAAA;AAAA,YACnB,MAAA,EAAQ,iEAAA;AAAA,YACR,GAAG,IAAA,CAAK;AAAA;AACV,SACF;AAAA,QACA,IAAA,CAAK;AAAA,OACP;AAEA,MAAA,IAAI,CAAC,IAAI,EAAA,EAAI;AACX,QAAA,IAAI,IAAA,CAAK,MAAM,OAAA,CAAQ,GAAA,CAAI,MAAM,CAAA,IAAK,OAAA,GAAU,IAAA,CAAK,KAAA,CAAM,OAAA,EAAS;AAClE,UAAA,MAAM,QAAQ,IAAA,CAAK,GAAA;AAAA,YACjB,KAAK,KAAA,CAAM,UAAA;AAAA,YACX,IAAA,CAAK,KAAA,CAAM,UAAA,GAAa,IAAA,CAAK,MAAM,MAAA,IAAU;AAAA,WAC/C;AACA,UAAA,MAAM,MAAM,KAAK,CAAA;AACjB,UAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,SAAA,EAAW,OAAA,GAAU,CAAC,CAAA;AAAA,QAC5C;AACA,QAAA,MAAM,IAAI,SAAA,CAAU,CAAA,KAAA,EAAQ,IAAI,MAAM,CAAA,CAAA,EAAI,IAAI,MAAM,CAAA;AAAA,MACtD;AAEA,MAAA,OAAO,MAAM,IAAI,IAAA,EAAK;AAAA,IACxB,SAAS,CAAA,EAAQ;AACf,MAAA,IAAI,OAAA,GAAU,IAAA,CAAK,KAAA,CAAM,OAAA,EAAS;AAChC,QAAA,MAAM,QAAQ,IAAA,CAAK,GAAA;AAAA,UACjB,KAAK,KAAA,CAAM,UAAA;AAAA,UACX,IAAA,CAAK,KAAA,CAAM,UAAA,GAAa,IAAA,CAAK,MAAM,MAAA,IAAU;AAAA,SAC/C;AACA,QAAA,MAAM,MAAM,KAAK,CAAA;AACjB,QAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,SAAA,EAAW,OAAA,GAAU,CAAC,CAAA;AAAA,MAC5C;AACA,MAAA,IAAI,GAAG,IAAA,KAAS,YAAA,EAAc,MAAM,IAAI,UAAU,iBAAiB,CAAA;AACnE,MAAA,MAAM,IAAI,SAAA,CAAU,CAAA,EAAG,OAAA,IAAW,eAAe,CAAA;AAAA,IACnD;AAAA,EACF;AAAA,EAEA,MAAM,OAAA,CAAiB,SAAA,EAAmB,OAAA,GAAU,CAAA,EAAe;AACjE,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,QAAA,CAAS,SAAS,CAAA;AAEnC,IAAA,IAAI;AACF,MAAA,MAAM,MAAM,MAAM,gBAAA;AAAA,QAChB,GAAA;AAAA,QACA;AAAA,UACE,MAAA,EAAQ,KAAA;AAAA,UACR,OAAA,EAAS;AAAA,YACP,cAAc,IAAA,CAAK,SAAA;AAAA,YACnB,MAAA,EAAQ,6CAAA;AAAA,YACR,GAAG,IAAA,CAAK;AAAA;AACV,SACF;AAAA,QACA,IAAA,CAAK;AAAA,OACP;AAEA,MAAA,IAAI,CAAC,IAAI,EAAA,EAAI;AACX,QAAA,IAAI,IAAA,CAAK,MAAM,OAAA,CAAQ,GAAA,CAAI,MAAM,CAAA,IAAK,OAAA,GAAU,IAAA,CAAK,KAAA,CAAM,OAAA,EAAS;AAClE,UAAA,MAAM,QAAQ,IAAA,CAAK,GAAA;AAAA,YACjB,KAAK,KAAA,CAAM,UAAA;AAAA,YACX,IAAA,CAAK,KAAA,CAAM,UAAA,GAAa,IAAA,CAAK,MAAM,MAAA,IAAU;AAAA,WAC/C;AACA,UAAA,MAAM,MAAM,KAAK,CAAA;AACjB,UAAA,OAAO,IAAA,CAAK,OAAA,CAAW,SAAA,EAAW,OAAA,GAAU,CAAC,CAAA;AAAA,QAC/C;AACA,QAAA,MAAM,IAAI,SAAA,CAAU,CAAA,KAAA,EAAQ,IAAI,MAAM,CAAA,CAAA,EAAI,IAAI,MAAM,CAAA;AAAA,MACtD;AAEA,MAAA,OAAQ,MAAM,IAAI,IAAA,EAAK;AAAA,IACzB,SAAS,CAAA,EAAQ;AACf,MAAA,IAAI,OAAA,GAAU,IAAA,CAAK,KAAA,CAAM,OAAA,EAAS;AAChC,QAAA,MAAM,QAAQ,IAAA,CAAK,GAAA;AAAA,UACjB,KAAK,KAAA,CAAM,UAAA;AAAA,UACX,IAAA,CAAK,KAAA,CAAM,UAAA,GAAa,IAAA,CAAK,MAAM,MAAA,IAAU;AAAA,SAC/C;AACA,QAAA,MAAM,MAAM,KAAK,CAAA;AACjB,QAAA,OAAO,IAAA,CAAK,OAAA,CAAW,SAAA,EAAW,OAAA,GAAU,CAAC,CAAA;AAAA,MAC/C;AACA,MAAA,IAAI,GAAG,IAAA,KAAS,YAAA,EAAc,MAAM,IAAI,UAAU,iBAAiB,CAAA;AACnE,MAAA,MAAM,IAAI,SAAA,CAAU,CAAA,EAAG,OAAA,IAAW,eAAe,CAAA;AAAA,IACnD;AAAA,EACF;AAAA,EAEA,MAAM,QAAA,CACJ,SAAA,EACA,IAAA,EACA,UAAU,CAAA,EACE;AACZ,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,QAAA,CAAS,SAAS,CAAA;AAEnC,IAAA,MAAM,GAAA,GAAM,IAAI,eAAA,EAAgB;AAChC,IAAA,KAAA,MAAW,CAAC,CAAA,EAAG,CAAC,KAAK,MAAA,CAAO,OAAA,CAAQ,IAAI,CAAA,EAAG;AACzC,MAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,CAAC,CAAA,EAAG;AACpB,QAAA,KAAA,MAAW,IAAA,IAAQ,CAAA,EAAG,GAAA,CAAI,MAAA,CAAO,GAAG,IAAI,CAAA;AAAA,MAC1C,CAAA,MAAA,IAAW,KAAK,IAAA,EAAM;AACpB,QAAA,GAAA,CAAI,MAAA,CAAO,GAAG,CAAC,CAAA;AAAA,MACjB;AAAA,IACF;AACA,IAAA,MAAM,IAAA,GAAO,IAAI,QAAA,EAAS;AAE1B,IAAA,IAAI;AACF,MAAA,MAAM,MAAM,MAAM,gBAAA;AAAA,QAChB,GAAA;AAAA,QACA;AAAA,UACE,MAAA,EAAQ,MAAA;AAAA,UACR,OAAA,EAAS;AAAA,YACP,cAAc,IAAA,CAAK,SAAA;AAAA,YACnB,cAAA,EAAgB,kDAAA;AAAA,YAChB,kBAAA,EAAoB,gBAAA;AAAA,YACpB,MAAA,EAAQ,gDAAA;AAAA,YACR,GAAG,IAAA,CAAK;AAAA,WACV;AAAA,UACA;AAAA,SACF;AAAA,QACA,IAAA,CAAK;AAAA,OACP;AAEA,MAAA,IAAI,CAAC,IAAI,EAAA,EAAI;AACX,QAAA,IAAI,IAAA,CAAK,MAAM,OAAA,CAAQ,GAAA,CAAI,MAAM,CAAA,IAAK,OAAA,GAAU,IAAA,CAAK,KAAA,CAAM,OAAA,EAAS;AAClE,UAAA,MAAM,QAAQ,IAAA,CAAK,GAAA;AAAA,YACjB,KAAK,KAAA,CAAM,UAAA;AAAA,YACX,IAAA,CAAK,KAAA,CAAM,UAAA,GAAa,IAAA,CAAK,MAAM,MAAA,IAAU;AAAA,WAC/C;AACA,UAAA,MAAM,MAAM,KAAK,CAAA;AACjB,UAAA,OAAO,IAAA,CAAK,QAAA,CAAY,SAAA,EAAW,IAAA,EAAM,UAAU,CAAC,CAAA;AAAA,QACtD;AACA,QAAA,MAAM,IAAI,SAAA,CAAU,CAAA,KAAA,EAAQ,IAAI,MAAM,CAAA,CAAA,EAAI,IAAI,MAAM,CAAA;AAAA,MACtD;AAEA,MAAA,MAAM,EAAA,GAAK,GAAA,CAAI,OAAA,CAAQ,GAAA,CAAI,cAAc,CAAA,IAAK,EAAA;AAC9C,MAAA,IAAI,GAAG,QAAA,CAAS,kBAAkB,KAAK,EAAA,CAAG,QAAA,CAAS,iBAAiB,CAAA,EAAG;AACrE,QAAA,OAAQ,MAAM,IAAI,IAAA,EAAK;AAAA,MACzB;AACA,MAAA,MAAM,IAAA,GAAO,MAAM,GAAA,CAAI,IAAA,EAAK;AAC5B,MAAA,IAAI;AACF,QAAA,OAAO,IAAA,CAAK,MAAM,IAAI,CAAA;AAAA,MACxB,CAAA,CAAA,MAAQ;AACN,QAAA,OAAO,IAAA;AAAA,MACT;AAAA,IACF,SAAS,CAAA,EAAQ;AACf,MAAA,IAAI,OAAA,GAAU,IAAA,CAAK,KAAA,CAAM,OAAA,EAAS;AAChC,QAAA,MAAM,QAAQ,IAAA,CAAK,GAAA;AAAA,UACjB,KAAK,KAAA,CAAM,UAAA;AAAA,UACX,IAAA,CAAK,KAAA,CAAM,UAAA,GAAa,IAAA,CAAK,MAAM,MAAA,IAAU;AAAA,SAC/C;AACA,QAAA,MAAM,MAAM,KAAK,CAAA;AACjB,QAAA,OAAO,IAAA,CAAK,QAAA,CAAY,SAAA,EAAW,IAAA,EAAM,UAAU,CAAC,CAAA;AAAA,MACtD;AACA,MAAA,IAAI,GAAG,IAAA,KAAS,YAAA,EAAc,MAAM,IAAI,UAAU,iBAAiB,CAAA;AACnE,MAAA,MAAM,IAAI,SAAA,CAAU,CAAA,EAAG,OAAA,IAAW,eAAe,CAAA;AAAA,IACnD;AAAA,EACF;AACF;;;AC9OA,IAAM,eAAA,GAA0C;AAAA,EAC9C,OAAA,EAAS,sBAAA;AAAA,EACT,MAAA,EAAQ,sBAAA;AAAA,EACR,MAAA,EAAQ,KAAA;AAAA,EACR,YAAA,EACE;AACJ,CAAA;AAEA,SAAS,UAAA,CAAW,MAAc,IAAA,EAA0C;AAC1E,EAAA,IAAI,CAAC,MAAM,OAAO,MAAA;AAClB,EAAA,IAAI;AACF,IAAA,IAAI,IAAA,CAAK,WAAW,IAAI,CAAA,SAAU,IAAI,GAAA,CAAI,QAAA,GAAW,IAAI,CAAA,CAAE,IAAA;AAC3D,IAAA,OAAO,IAAI,GAAA,CAAI,IAAA,EAAM,IAAI,CAAA,CAAE,IAAA;AAAA,EAC7B,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,MAAA;AAAA,EACT;AACF;AAEA,SAAS,oBAAoB,CAAA,EAAoB;AAC/C,EAAA,OAAO,uEAAA,CAAwE,KAAK,CAAC,CAAA;AACvF;AAEA,SAAS,gBAAgB,CAAA,EAAqB;AAC5C,EAAA,IAAI,CAAC,GAAG,OAAO,IAAA;AACf,EAAA,OAAO,oCAAA,CAAqC,KAAK,CAAC,CAAA;AACpD;AAEO,IAAM,qBAAN,MAAyB;AAAA,EACtB,IAAA;AAAA,EACA,OAAA;AAAA,EACA,GAAA;AAAA,EAER,YAAY,IAAA,EAA6B;AACvC,IAAA,IAAA,CAAK,WAAW,IAAA,CAAK,OAAA,IAAW,sBAAA,EAAwB,OAAA,CAAQ,QAAQ,EAAE,CAAA;AAC1E,IAAA,IAAA,CAAK,IAAA,GAAO,IAAI,UAAA,CAAW;AAAA,MACzB,SAAS,IAAA,CAAK,OAAA;AAAA,MACd,OAAA,EAAS,EAAE,GAAG,eAAA,EAAiB,GAAI,IAAA,CAAK,OAAA,IAAW,EAAC,EAAG;AAAA,MACvD,SAAA,EAAW,KAAK,SAAA,IAAa,IAAA;AAAA,MAC7B,OAAO,IAAA,CAAK,KAAA;AAAA,MACZ,WAAW,IAAA,CAAK;AAAA,KACjB,CAAA;AACD,IAAA,IAAA,CAAK,MAAM,IAAA,CAAK,GAAA;AAAA,EAClB;AAAA,EAEQ,KAAK,EAAA,EAAgC;AAC3C,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,EAAE,CAAA;AAAA,EACzB;AAAA,EACQ,IAAA,CAAK,IAAmC,CAAA,EAAmB;AACjE,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,EAAA,EAAI,CAAC,CAAA,IAAK,EAAA;AAAA,EACjC;AAAA,EACQ,QAAQ,EAAA,EAAuD;AACrE,IAAA,IAAI,CAAC,IAAI,OAAO,MAAA;AAChB,IAAA,MAAM,MAAA,GAAU,EAAA,CAAW,aAAA,GAAgB,KAAK,CAAA,IAAK,IAAA;AACrD,IAAA,MAAM,QAAQ,MAAA,IAAU,EAAA;AACxB,IAAA,MAAM,GAAA,GACJ,IAAA,CAAK,IAAA,CAAK,KAAA,EAAO,UAAU,CAAA,IAAK,IAAA,CAAK,IAAA,CAAK,KAAA,EAAO,eAAe,CAAA,IAAK,IAAA,CAAK,IAAA,CAAK,OAAO,KAAK,CAAA;AAC7F,IAAA,OAAO,UAAA,CAAW,IAAA,CAAK,OAAA,EAAS,GAAG,CAAA;AAAA,EACrC;AAAA,EAEQ,aAAa,IAAA,EAA6B;AAChD,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,GAAA,CAAI,KAAA,CAAM,IAAI,CAAA;AAC/B,IAAA,MAAM,IAAA,GAAQ,IAAY,eAAA,IAAmB,GAAA;AAC7C,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,GAAA,CAAI,GAAA,CAAI,MAAM,SAAS,CAAA;AAC5C,IAAA,MAAM,IAAA,uBAAW,GAAA,EAAY;AAC7B,IAAA,MAAM,MAAqB,EAAC;AAE5B,IAAA,KAAA,MAAW,KAAK,OAAA,EAAS;AACvB,MAAA,MAAM,IAAA,GAAO,IAAA,CAAK,IAAA,CAAK,CAAA,EAAG,MAAM,CAAA;AAChC,MAAA,MAAM,GAAA,GAAM,UAAA,CAAW,IAAA,CAAK,OAAA,EAAS,IAAI,CAAA;AACzC,MAAA,IAAI,CAAC,GAAA,IAAO,CAAC,mBAAA,CAAoB,GAAG,CAAA,EAAG;AACvC,MAAA,IAAI,IAAA,CAAK,GAAA,CAAI,GAAG,CAAA,EAAG;AAEnB,MAAA,MAAM,GAAA,GACJ,IAAA,CAAK,OAAA,CAAQ,CAAC,CAAA,IACd,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,GAAA,CAAI,OAAA,CAAQ,CAAA,EAAG,QAAQ,CAAC,KAC1C,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,GAAA,CAAI,OAAA,CAAQ,CAAA,EAAG,QAAQ,CAAC,CAAA,IAC1C,IAAA,CAAK,OAAA,CAAS,CAAA,CAAU,UAAU,CAAA;AAEpC,MAAA,MAAM,KAAA,GAAQ,KAAK,IAAA,CAAK,CAAA,EAAG,OAAO,CAAA,IAAK,IAAA,CAAK,KAAK,CAAC,CAAA;AAClD,MAAA,IAAI,CAAC,KAAA,EAAO;AAEZ,MAAA,MAAM,KAAA,GAAQ,eAAA,CAAgB,GAAG,CAAA,GAAI,MAAA,GAAY,GAAA;AACjD,MAAA,GAAA,CAAI,IAAA,CAAK,EAAE,KAAA,EAAO,GAAA,EAAK,OAAO,CAAA;AAC9B,MAAA,IAAA,CAAK,IAAI,GAAG,CAAA;AAAA,IACd;AACA,IAAA,OAAO,GAAA;AAAA,EACT;AAAA,EAEQ,aAAa,IAAA,EAAuB;AAC1C,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,GAAA,CAAI,KAAA,CAAM,IAAI,CAAA;AAC/B,IAAA,MAAM,IAAA,GAAQ,IAAY,eAAA,IAAmB,GAAA;AAE7C,IAAA,IAAI,KAAK,GAAA,CAAI,EAAA,CAAG,IAAA,EAAM,eAAe,GAAG,OAAO,IAAA;AAC/C,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,GAAA,CAAI,EAAA,CAAG,MAAM,6CAA6C,CAAA;AAC7E,IAAA,IAAI,KAAA,EAAO;AACT,MAAA,MAAM,IAAA,GAAO,KAAK,GAAA,CAAI,EAAA;AAAA,QACpB,KAAA;AAAA,QACA;AAAA,OACF;AACA,MAAA,IAAI,MAAM,OAAO,IAAA;AAAA,IACnB;AACA,IAAA,OAAO,eAAA,CAAgB,KAAK,IAAI,CAAA;AAAA,EAClC;AAAA,EAEQ,YAAA,CAAa,IAAA,EAAe,IAAA,GAAO,CAAA,EAAG,MAAA,EAAyB;AACrE,IAAA,IAAI,CAAC,IAAA,EAAM;AACT,MAAA,MAAMA,EAAAA,GAAI,IAAI,GAAA,CAAI,IAAA,CAAK,OAAO,CAAA;AAC9B,MAAA,IAAI,IAAA,GAAO,GAAGA,EAAAA,CAAE,aAAa,GAAA,CAAI,MAAA,EAAQ,MAAA,CAAO,IAAI,CAAC,CAAA;AACrD,MAAA,OAAOA,EAAAA,CAAE,IAAA;AAAA,IACX;AACA,IAAA,MAAM,CAAA,GAAI,IAAI,GAAA,CAAI,IAAA,CAAK,UAAA,CAAW,GAAG,CAAA,GAAI,IAAA,GAAO,GAAA,GAAM,IAAA,EAAM,IAAA,CAAK,OAAO,CAAA;AACxE,IAAA,IAAI,IAAA,GAAO,GAAG,CAAA,CAAE,YAAA,CAAa,IAAI,MAAA,EAAQ,MAAA,CAAO,IAAI,CAAC,CAAA;AACrD,IAAA,IAAI,MAAA,EAAQ,CAAA,CAAE,YAAA,CAAa,GAAA,CAAI,UAAU,MAAM,CAAA;AAC/C,IAAA,OAAO,CAAA,CAAE,IAAA;AAAA,EACX;AAAA;AAAA,EAGA,MAAM,MAAA,CAAO,IAAA,GAAO,CAAA,EAAG,MAAA,EAAmD;AACxE,IAAA,OAAO,IAAA,CAAK,UAAA,CAAW,MAAA,EAAkB,IAAA,EAAM,MAAM,CAAA;AAAA,EACvD;AAAA,EAEA,MAAM,UAAA,CACJ,IAAA,EACA,IAAA,GAAO,GACP,MAAA,EAC4B;AAC5B,IAAA,MAAM,MAAM,IAAA,CAAK,YAAA,CAAa,IAAA,EAAM,IAAA,EAAM,QAAQ,MAAM,CAAA;AACxD,IAAA,MAAM,IAAA,GAAO,MAAM,IAAA,CAAK,IAAA,CAAK,QAAQ,GAAG,CAAA;AACxC,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,YAAA,CAAa,IAAI,CAAA;AACpC,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,YAAA,CAAa,IAAI,CAAA;AACtC,IAAA,OAAO,EAAE,OAAO,IAAA,EAAM,OAAA,EAAS,YAAY,OAAA,GAAU,IAAA,GAAO,CAAA,GAAI,IAAA,GAAO,CAAA,EAAE;AAAA,EAC3E;AAAA;AAAA,EAGA,MAAM,MAAA,CAAO,CAAA,EAAW,IAAA,GAAO,CAAA,EAA+B;AAC5D,IAAA,MAAM,CAAA,GAAI,IAAI,GAAA,CAAI,SAAA,EAAW,KAAK,OAAO,CAAA;AACzC,IAAA,CAAA,CAAE,YAAA,CAAa,GAAA,CAAI,QAAA,EAAU,CAAC,CAAA;AAC9B,IAAA,IAAI,IAAA,GAAO,GAAG,CAAA,CAAE,YAAA,CAAa,IAAI,MAAA,EAAQ,MAAA,CAAO,IAAI,CAAC,CAAA;AACrD,IAAA,MAAM,OAAO,MAAM,IAAA,CAAK,IAAA,CAAK,OAAA,CAAQ,EAAE,IAAI,CAAA;AAC3C,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,YAAA,CAAa,IAAI,CAAA;AACpC,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,YAAA,CAAa,IAAI,CAAA;AACtC,IAAA,OAAO,EAAE,OAAO,IAAA,EAAM,OAAA,EAAS,YAAY,OAAA,GAAU,IAAA,GAAO,CAAA,GAAI,IAAA,GAAO,CAAA,EAAE;AAAA,EAC3E;AAAA;AAAA,EAGQ,SAAA,CAAU,MAAc,GAAA,EAAmB;AACjD,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,GAAA,CAAI,KAAA,CAAM,IAAI,CAAA;AAC/B,IAAA,MAAM,IAAA,GAAQ,IAAY,eAAA,IAAmB,GAAA;AAE7C,IAAA,MAAM,QACJ,IAAA,CAAK,IAAA,CAAK,KAAK,GAAA,CAAI,EAAA,CAAG,MAAM,IAAI,CAAC,KACjC,IAAA,CAAK,IAAA,CAAK,KAAK,GAAA,CAAI,EAAA,CAAG,MAAM,2BAA2B,CAAA,EAAG,SAAS,CAAA,IACnE,qEAAA;AAEF,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,GAAA,CAAI,GAAA,CAAI,MAAM,KAAK,CAAA;AACvC,IAAA,MAAM,MAAA,uBAAa,GAAA,EAAY;AAC/B,IAAA,KAAA,MAAW,MAAM,MAAA,EAAQ;AACvB,MAAA,MAAM,GAAA,GAAM,UAAA;AAAA,QACV,IAAA,CAAK,OAAA;AAAA,QACL,IAAA,CAAK,IAAA,CAAK,EAAA,EAAI,UAAU,CAAA,IAAK,IAAA,CAAK,IAAA,CAAK,EAAA,EAAI,eAAe,CAAA,IAAK,IAAA,CAAK,IAAA,CAAK,IAAI,KAAK;AAAA,OACpF;AACA,MAAA,IAAI,CAAC,GAAA,IAAO,iCAAA,CAAkC,IAAA,CAAK,GAAG,CAAA,EAAG;AACzD,MAAA,MAAA,CAAO,IAAI,GAAG,CAAA;AAAA,IAChB;AACA,IAAA,MAAM,MAAA,GAAS,KAAA,CAAM,IAAA,CAAK,MAAM,CAAA;AAEhC,IAAA,MAAM,OAAiB,EAAC;AACxB,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,GAAA,CAAI,GAAA,CAAI,MAAM,sDAAsD,CAAA;AACxF,IAAA,KAAA,MAAW,KAAK,MAAA,EAAQ;AACtB,MAAA,MAAM,GAAA,GAAM,IAAA,CAAK,IAAA,CAAK,CAAC,CAAA;AACvB,MAAA,IAAI,GAAA,EAAK,IAAA,CAAK,IAAA,CAAK,GAAG,CAAA;AAAA,IACxB;AAEA,IAAA,OAAO;AAAA,MACL,GAAA;AAAA,MACA,KAAA;AAAA,MACA,MAAA;AAAA,MACA,IAAA;AAAA,MACA,MAAA,EAAQ;AAAA,KACV;AAAA,EACF;AAAA,EAEA,MAAM,QAAQ,SAAA,EAAkC;AAC9C,IAAA,MAAM,GAAA,GAAM,UAAA,CAAW,IAAA,CAAK,OAAA,EAAS,SAAS,CAAA,IAAK,IAAI,GAAA,CAAI,SAAA,EAAW,IAAA,CAAK,OAAO,CAAA,CAAE,IAAA;AACpF,IAAA,MAAM,IAAA,GAAO,MAAM,IAAA,CAAK,IAAA,CAAK,QAAQ,GAAG,CAAA;AACxC,IAAA,OAAO,IAAA,CAAK,SAAA,CAAU,IAAA,EAAM,GAAG,CAAA;AAAA,EACjC;AAAA;AAAA,EAGA,MAAM,YAAA,CAAa,SAAA,EAAmB,KAAA,EAAgD;AACpF,IAAA,MAAM,GAAA,GAAM,UAAA,CAAW,IAAA,CAAK,OAAA,EAAS,SAAS,CAAA,IAAK,IAAI,GAAA,CAAI,SAAA,EAAW,IAAA,CAAK,OAAO,CAAA,CAAE,IAAA;AACpF,IAAA,MAAM,IAAA,GAAO,MAAM,IAAA,CAAK,IAAA,CAAK,QAAQ,GAAG,CAAA;AACxC,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,GAAA,CAAI,KAAA,CAAM,IAAI,CAAA;AAC/B,IAAA,MAAM,cAAc,IAAA,CAAK,GAAA,CAAI,IAAK,GAAA,CAAY,eAAA,IAAmB,KAAK,aAAa,CAAA;AACnF,IAAA,IAAI,WAAA,CAAY,UAAU,CAAA,EAAG;AAC3B,MAAA,MAAM,IAAA,GAAO,IAAA,CAAK,SAAA,CAAU,IAAA,EAAM,GAAG,CAAA;AACrC,MAAA,OAAO;AAAA,QACL,KAAA,EAAO,QAAA;AAAA,QACP,IAAA,EAAM;AAAA,UACJ,WAAA,EAAa,GAAA;AAAA,UACb,MAAA,EAAQ;AAAA,YACN,IAAA,EAAM,QAAA;AAAA,YACN,IAAA,EAAM;AAAA,cACJ,MAAA,EAAQ,IAAA;AAAA,cACR,QAAA,EAAU,IAAA;AAAA,cACV,OAAO,IAAA,CAAK,KAAA;AAAA,cACZ,IAAA,EAAM,QAAA;AAAA,cACN,aAAa,EAAC;AAAA,cACd,SAAS,EAAC;AAAA,cACV,UAAU,EAAC;AAAA,cACX,MAAM,EAAC;AAAA,cACP,YAAY,EAAC;AAAA,cACb,UAAU;AAAC,aACb;AAAA,YACA,MAAA,EAAQ,KAAK,MAAA,CAAO,GAAA,CAAI,CAAC,CAAA,MAAO,EAAE,QAAA,EAAU,CAAA,EAAE,CAAE;AAAA;AAClD;AACF,OACF;AAAA,IACF;AACA,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,YAAA,CAAa,IAAI,CAAA;AACpC,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,YAAA,CAAa,IAAI,CAAA;AACtC,IAAA,OAAO;AAAA,MACL,KAAA,EAAO,SAAA;AAAA,MACP,IAAA,EAAM;AAAA,QACJ,IAAA,EAAM,CAAA;AAAA,QACN,KAAA;AAAA,QACA,OAAA;AAAA,QACA,WAAA,EAAa,GAAA;AAAA,QACb,IAAA,EAAM,IAAI,GAAA,CAAI,GAAG,CAAA,CAAE;AAAA;AACrB,KACF;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,gBAAgB,OAAA,EAAqD;AACzE,IAAA,MAAM,IAAA,GAAO,OAAA,KAAY,OAAA,GAAU,QAAA,GAAW,IAAI,OAAO,CAAA,CAAA;AACzD,IAAA,MAAM,IAAA,GAAO,MAAM,IAAA,CAAK,IAAA,CAAK,QAAQ,IAAI,CAAA;AACzC,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,GAAA,CAAI,KAAA,CAAM,IAAI,CAAA;AAC/B,IAAA,MAAM,IAAA,GAAQ,IAAY,eAAA,IAAmB,GAAA;AAE7C,IAAA,MAAM,UAA4B,EAAC;AACnC,IAAA,MAAM,GAAA,GAAM,KAAK,GAAA,CAAI,GAAA;AAAA,MACnB,IAAA;AAAA,MACA;AAAA,KACF;AACA,IAAA,KAAA,MAAW,KAAK,GAAA,EAAK;AACnB,MAAA,MAAM,KAAA,GAAQ,KAAK,IAAA,CAAK,CAAC,KAAK,IAAA,CAAK,IAAA,CAAK,GAAG,aAAa,CAAA;AACxD,MAAA,IAAI,CAAC,KAAA,EAAO;AACZ,MAAA,MAAM,IAAA,GAAO,IAAA,CAAK,IAAA,CAAK,CAAA,EAAG,MAAM,CAAA;AAChC,MAAA,OAAA,CAAQ,KAAK,EAAE,KAAA,EAAO,KAAA,EAAO,KAAA,EAAO,MAAM,CAAA;AAAA,IAC5C;AACA,IAAA,IAAI,CAAC,QAAQ,MAAA,EAAQ;AACnB,MAAA,OAAO,4BAAA,CAA6B,KAAA,CAAM,EAAE,CAAA,CAAE,IAAI,CAAC,CAAA,MAAO,EAAE,KAAA,EAAO,CAAA,EAAG,KAAA,EAAO,CAAA,EAAG,IAAA,EAAM,IAAG,CAAE,CAAA;AAAA,IAC7F;AACA,IAAA,OAAO,OAAA;AAAA,EACT;AAAA,EAEA,MAAM,QAAA,CAAS,OAAA,EAA0B,MAAA,EAAgB,OAAO,CAAA,EAA+B;AAC7F,IAAA,MAAM,IAAA,GAAO,OAAA,KAAY,OAAA,GAAU,QAAA,GAAW,IAAI,OAAO,CAAA,CAAA;AACzD,IAAA,OAAO,KAAK,UAAA,CAAW,IAAA,EAAM,IAAA,EAAM,EAAE,QAAQ,CAAA;AAAA,EAC/C;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,QACJ,MAAA,EACwB;AAExB,IAAiB,MAAA,CAAO,WAAA;AAAA,MACtB,MAAA,CAAO,OAAA,CAAQ,MAAA,IAAU,EAAE,CAAA,CAAE,MAAA,CAAO,CAAC,GAAG,CAAC,CAAA,KAAM,MAAM,MAAS;AAAA;AAGhE,IAAA,MAAM,IAAI,EAAE,SAAA,EAAW,QAAQ,SAAA,IAAa,UAAA,EAAY,GAAG,MAAA,EAAO;AAElE,IAAA,MAAM,OAAO,MAAM,IAAA,CAAK,IAAA,CAAK,QAAA,CAAc,eAAe,CAAC,CAAA;AAC3D,IAAA,MAAM,MAAM,OAAO,IAAA,KAAS,WAAW,IAAA,GAAO,IAAA,CAAK,UAAU,IAAI,CAAA;AACjE,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,YAAA,CAAa,GAAG,CAAA;AACnC,IAAA,OAAO,EAAE,KAAA,EAAO,KAAA,EAAO,CAAA,EAAG,IAAA,EAAM,KAAA,CAAM,MAAA,EAAQ,IAAA,EAAM,GAAA,EAAK,QAAA,EAAU,MAAA,CAAO,CAAA,CAAE,SAAS,CAAA,EAAE;AAAA,EACzF;AAAA,EAEA,MAAM,WAAA,CACJ,QAAA,EACA,MAAA,EACwB;AACxB,IAAA,OAAO,IAAA,CAAK,QAAQ,EAAE,SAAA,EAAW,UAAU,GAAI,MAAA,IAAU,EAAC,EAAI,CAAA;AAAA,EAChE;AACF,CAAA;;;AC/SO,IAAM,cAAA,GAAN,cAA6B,kBAAA,CAAmB;AAAA,EACrD,YAAY,IAAA,EAAqE;AAC/E,IAAA,KAAA,CAAM,EAAE,GAAI,IAAA,IAAQ,IAAK,GAAA,EAAK,gBAAA,IAA2B,CAAA;AAAA,EAC3D;AACF","file":"index.js","sourcesContent":["import * as cheerio from 'cheerio';\r\nimport type { DomApi, DomDocument, DomElement } from './adapter';\r\n\r\nexport function createCheerioDom(): DomApi {\r\n return {\r\n parse(html: string): DomDocument {\r\n return cheerio.load(html);\r\n },\r\n qsa(ctx: DomDocument | DomElement, selector: string): DomElement[] {\r\n const $ = typeof ctx === 'function' ? (ctx as any) : (ctx as any).$;\r\n const root = typeof ctx === 'function' ? (ctx as any) : (ctx as any).root || ctx;\r\n return ($(root) as any)(selector).toArray();\r\n },\r\n qs(ctx: DomDocument | DomElement, selector: string): DomElement | null {\r\n const $ = typeof ctx === 'function' ? (ctx as any) : (ctx as any).$;\r\n const root = typeof ctx === 'function' ? (ctx as any) : (ctx as any).root || ctx;\r\n const arr = ($(root) as any)(selector).toArray();\r\n return arr.length ? arr[0] : null;\r\n },\r\n text(el?: DomElement | null): string {\r\n if (!el) return '';\r\n try { return (cheerio as any)(el).text().trim().replace(/\\s+/g, ' '); } catch { return ''; }\r\n },\r\n attr(el: DomElement | null | undefined, name: string): string | undefined {\r\n if (!el) return undefined;\r\n try { return (cheerio as any)(el).attr(name) ?? undefined; } catch { return undefined; }\r\n },\r\n closest(el: DomElement | null | undefined, selector: string): DomElement | null {\r\n if (!el) return null;\r\n try {\r\n const $el = (cheerio as any)(el);\r\n const found = $el.closest(selector).get(0);\r\n return found ?? null;\r\n } catch {\r\n return null;\r\n }\r\n }\r\n };\r\n}\r\n","const sleep = (ms: number) => new Promise<void>((resolve) => setTimeout(resolve, ms));\n\nfunction hasAbortController(): boolean {\n return typeof AbortController !== 'undefined';\n}\n\nasync function fetchWithTimeout(\n url: string,\n init: RequestInit,\n timeoutMs: number\n): Promise<Response> {\n if (hasAbortController()) {\n const ctrl = new AbortController();\n const timer = setTimeout(() => {\n try {\n ctrl.abort();\n } catch {\n }\n }, timeoutMs);\n\n try {\n const res = await fetch(url, { ...init, signal: ctrl.signal as AbortSignal });\n clearTimeout(timer);\n return res;\n } catch (e) {\n clearTimeout(timer);\n throw e;\n }\n }\n\n return await Promise.race([\n fetch(url, init),\n new Promise<never>((_, reject) =>\n setTimeout(() => reject(new HttpError('Request timeout')), timeoutMs)\n ),\n ]);\n}\n\nexport type RetryPolicy = {\n retries: number;\n factor: number;\n minDelayMs: number;\n maxDelayMs: number;\n retryOn: (status?: number) => boolean;\n};\n\nexport const defaultRetryPolicy: RetryPolicy = {\n retries: 2,\n factor: 2,\n minDelayMs: 300,\n maxDelayMs: 3000,\n retryOn: (status) => {\n if (status == null) return true;\n return status >= 500 && status <= 599;\n },\n};\n\nexport class HttpError extends Error {\n constructor(\n message: string,\n public status?: number,\n ) {\n super(message);\n this.name = 'HttpError';\n }\n}\n\nexport type HttpClientOptions = {\n baseURL: string;\n headers?: Record<string, string>;\n timeoutMs?: number;\n retry?: Partial<RetryPolicy>;\n userAgent?: string;\n};\n\nexport class HttpClient {\n private baseURL: string;\n private headers: Record<string, string>;\n private timeoutMs: number;\n private retry: RetryPolicy;\n private userAgent: string;\n\n constructor(opts: HttpClientOptions) {\n this.baseURL = opts.baseURL.replace(/\\/+$/, '');\n this.headers = opts.headers ?? {};\n this.timeoutMs = opts.timeoutMs ?? 15000;\n this.retry = { ...defaultRetryPolicy, ...(opts.retry ?? {}) };\n this.userAgent =\n opts.userAgent ??\n 'Mozilla/5.0 (Windows NT 10.0; Win32; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118 Safari/537.36';\n }\n\n private buildURL(pathOrUrl: string) {\n try {\n return new URL(pathOrUrl).toString();\n } catch {\n return new URL(pathOrUrl.replace(/^\\//, ''), this.baseURL + '/').toString();\n }\n }\n\n async getHtml(pathOrUrl: string, attempt = 0): Promise<string> {\n const url = this.buildURL(pathOrUrl);\n\n try {\n const res = await fetchWithTimeout(\n url,\n {\n method: 'GET',\n headers: {\n 'User-Agent': this.userAgent,\n Accept: 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',\n ...this.headers,\n },\n },\n this.timeoutMs\n );\n\n if (!res.ok) {\n if (this.retry.retryOn(res.status) && attempt < this.retry.retries) {\n const delay = Math.min(\n this.retry.maxDelayMs,\n this.retry.minDelayMs * this.retry.factor ** attempt\n );\n await sleep(delay);\n return this.getHtml(pathOrUrl, attempt + 1);\n }\n throw new HttpError(`HTTP ${res.status}`, res.status);\n }\n\n return await res.text();\n } catch (e: any) {\n if (attempt < this.retry.retries) {\n const delay = Math.min(\n this.retry.maxDelayMs,\n this.retry.minDelayMs * this.retry.factor ** attempt\n );\n await sleep(delay);\n return this.getHtml(pathOrUrl, attempt + 1);\n }\n if (e?.name === 'AbortError') throw new HttpError('Request timeout');\n throw new HttpError(e?.message ?? 'Network error');\n }\n }\n\n async getJson<T = any>(pathOrUrl: string, attempt = 0): Promise<T> {\n const url = this.buildURL(pathOrUrl);\n\n try {\n const res = await fetchWithTimeout(\n url,\n {\n method: 'GET',\n headers: {\n 'User-Agent': this.userAgent,\n Accept: 'application/json,text/plain;q=0.9,*/*;q=0.8',\n ...this.headers,\n },\n },\n this.timeoutMs\n );\n\n if (!res.ok) {\n if (this.retry.retryOn(res.status) && attempt < this.retry.retries) {\n const delay = Math.min(\n this.retry.maxDelayMs,\n this.retry.minDelayMs * this.retry.factor ** attempt\n );\n await sleep(delay);\n return this.getJson<T>(pathOrUrl, attempt + 1);\n }\n throw new HttpError(`HTTP ${res.status}`, res.status);\n }\n\n return (await res.json()) as T;\n } catch (e: any) {\n if (attempt < this.retry.retries) {\n const delay = Math.min(\n this.retry.maxDelayMs,\n this.retry.minDelayMs * this.retry.factor ** attempt\n );\n await sleep(delay);\n return this.getJson<T>(pathOrUrl, attempt + 1);\n }\n if (e?.name === 'AbortError') throw new HttpError('Request timeout');\n throw new HttpError(e?.message ?? 'Network error');\n }\n }\n\n async postForm<T = any>(\n pathOrUrl: string,\n form: Record<string, string | string[]>,\n attempt = 0,\n ): Promise<T> {\n const url = this.buildURL(pathOrUrl);\n\n const usp = new URLSearchParams();\n for (const [k, v] of Object.entries(form)) {\n if (Array.isArray(v)) {\n for (const item of v) usp.append(k, item);\n } else if (v != null) {\n usp.append(k, v);\n }\n }\n const body = usp.toString();\n\n try {\n const res = await fetchWithTimeout(\n url,\n {\n method: 'POST',\n headers: {\n 'User-Agent': this.userAgent,\n 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',\n 'X-Requested-With': 'XMLHttpRequest',\n Accept: 'application/json, text/javascript, */*; q=0.01',\n ...this.headers,\n },\n body,\n },\n this.timeoutMs\n );\n\n if (!res.ok) {\n if (this.retry.retryOn(res.status) && attempt < this.retry.retries) {\n const delay = Math.min(\n this.retry.maxDelayMs,\n this.retry.minDelayMs * this.retry.factor ** attempt\n );\n await sleep(delay);\n return this.postForm<T>(pathOrUrl, form, attempt + 1);\n }\n throw new HttpError(`HTTP ${res.status}`, res.status);\n }\n\n const ct = res.headers.get('content-type') || '';\n if (ct.includes('application/json') || ct.includes('text/javascript')) {\n return (await res.json()) as T;\n }\n const text = await res.text();\n try {\n return JSON.parse(text) as T;\n } catch {\n return text as unknown as T;\n }\n } catch (e: any) {\n if (attempt < this.retry.retries) {\n const delay = Math.min(\n this.retry.maxDelayMs,\n this.retry.minDelayMs * this.retry.factor ** attempt\n );\n await sleep(delay);\n return this.postForm<T>(pathOrUrl, form, attempt + 1);\n }\n if (e?.name === 'AbortError') throw new HttpError('Request timeout');\n throw new HttpError(e?.message ?? 'Network error');\n }\n }\n}\n","import { HttpClient, HttpClientOptions } from './http';\r\nimport type {\r\n ListingItem,\r\n Page,\r\n Post,\r\n AlphabetSection,\r\n AlphabetLetter,\r\n UpdatesResult,\r\n ResolveOptions,\r\n ResolvedRoute,\r\n ListingQuery,\r\n} from './types';\r\nimport type { DomApi, DomDocument, DomElement } from './dom/adapter';\r\n\r\nexport type MultpornClientOptions = Omit<HttpClientOptions, 'baseURL'> & {\r\n baseURL?: string;\r\n dom: DomApi;\r\n};\r\n\r\nconst DEFAULT_HEADERS: Record<string, string> = {\r\n Referer: 'https://multporn.net',\r\n Origin: 'https://multporn.net',\r\n Accept: '*/*',\r\n 'User-Agent':\r\n 'Mozilla/5.0 (Linux; Android 12; Pixel 5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0 Mobile Safari/537.36',\r\n};\r\n\r\nfunction absolutize(base: string, href?: string | null): string | undefined {\r\n if (!href) return undefined;\r\n try {\r\n if (href.startsWith('//')) return new URL('https:' + href).href;\r\n return new URL(href, base).href;\r\n } catch {\r\n return undefined;\r\n }\r\n}\r\n\r\nfunction looksLikeListingUrl(u: string): boolean {\r\n return /\\/(comics|manga|munga|pictures|video|gay_porn_comics|hentai_manga)\\//i.test(u);\r\n}\r\n\r\nfunction shouldSkipThumb(u?: string): boolean {\r\n if (!u) return true;\r\n return /(logo|avatar|sprite|icon|favicon)/i.test(u);\r\n}\r\n\r\nexport class MultpornClientCore {\r\n private http: HttpClient;\r\n private baseURL: string;\r\n private dom: DomApi;\r\n\r\n constructor(opts: MultpornClientOptions) {\r\n this.baseURL = (opts.baseURL ?? 'https://multporn.net').replace(/\\/+$/, '');\r\n this.http = new HttpClient({\r\n baseURL: this.baseURL,\r\n headers: { ...DEFAULT_HEADERS, ...(opts.headers ?? {}) },\r\n timeoutMs: opts.timeoutMs ?? 15000,\r\n retry: opts.retry,\r\n userAgent: opts.userAgent,\r\n });\r\n this.dom = opts.dom;\r\n }\r\n\r\n private text(el?: DomElement | null): string {\r\n return this.dom.text(el);\r\n }\r\n private attr(el: DomElement | null | undefined, n: string): string {\r\n return this.dom.attr(el, n) ?? '';\r\n }\r\n private pickImg(el: DomElement | null | undefined): string | undefined {\r\n if (!el) return undefined;\r\n const inNode = (el as any).querySelector?.('img') ?? null;\r\n const imgEl = inNode || el;\r\n const src =\r\n this.attr(imgEl, 'data-src') || this.attr(imgEl, 'data-original') || this.attr(imgEl, 'src');\r\n return absolutize(this.baseURL, src);\r\n }\r\n\r\n private parseListing(html: string): ListingItem[] {\r\n const doc = this.dom.parse(html);\r\n const root = (doc as any).documentElement ?? doc;\r\n const anchors = this.dom.qsa(root, 'a[href]');\r\n const seen = new Set<string>();\r\n const out: ListingItem[] = [];\r\n\r\n for (const a of anchors) {\r\n const href = this.attr(a, 'href');\r\n const url = absolutize(this.baseURL, href);\r\n if (!url || !looksLikeListingUrl(url)) continue;\r\n if (seen.has(url)) continue;\r\n\r\n const img =\r\n this.pickImg(a) ||\r\n this.pickImg(this.dom.closest(a, 'figure')) ||\r\n this.pickImg(this.dom.closest(a, '.thumb')) ||\r\n this.pickImg((a as any).parentNode);\r\n\r\n const title = this.attr(a, 'title') || this.text(a);\r\n if (!title) continue;\r\n\r\n const thumb = shouldSkipThumb(img) ? undefined : img;\r\n out.push({ title, url, thumb });\r\n seen.add(url);\r\n }\r\n return out;\r\n }\r\n\r\n private parseHasNext(html: string): boolean {\r\n const doc = this.dom.parse(html);\r\n const root = (doc as any).documentElement ?? doc;\r\n\r\n if (this.dom.qs(root, 'a[rel=\"next\"]')) return true;\r\n const pager = this.dom.qs(root, \".pager, .pagination, nav[role='navigation']\");\r\n if (pager) {\r\n const next = this.dom.qs(\r\n pager,\r\n 'a[rel=\"next\"], a.next, li.next a, a[title*=\"След\"], a[aria-label*=\"Next\"]',\r\n );\r\n if (next) return true;\r\n }\r\n return /\\bpage=\\d+\\b/i.test(html);\r\n }\r\n\r\n private buildListURL(path?: string, page = 0, letter?: string): string {\r\n if (!path) {\r\n const u = new URL(this.baseURL);\r\n if (page > 0) u.searchParams.set('page', String(page));\r\n return u.href;\r\n }\r\n const u = new URL(path.startsWith('/') ? path : '/' + path, this.baseURL);\r\n if (page > 0) u.searchParams.set('page', String(page));\r\n if (letter) u.searchParams.set('letter', letter);\r\n return u.href;\r\n }\r\n\r\n // -------- Listing\r\n async latest(page = 0, params?: ListingQuery): Promise<Page<ListingItem>> {\r\n return this.listByPath(undefined as any, page, params);\r\n }\r\n\r\n async listByPath(\r\n path: string | undefined,\r\n page = 0,\r\n params?: ListingQuery & { letter?: string },\r\n ): Promise<Page<ListingItem>> {\r\n const url = this.buildListURL(path, page, params?.letter);\r\n const html = await this.http.getHtml(url);\r\n const items = this.parseListing(html);\r\n const hasNext = this.parseHasNext(html);\r\n return { items, page, hasNext, totalPages: hasNext ? page + 2 : page + 1 };\r\n }\r\n\r\n // -------- Search\r\n async search(q: string, page = 0): Promise<Page<ListingItem>> {\r\n const u = new URL('/search', this.baseURL);\r\n u.searchParams.set('search', q);\r\n if (page > 0) u.searchParams.set('page', String(page));\r\n const html = await this.http.getHtml(u.href);\r\n const items = this.parseListing(html);\r\n const hasNext = this.parseHasNext(html);\r\n return { items, page, hasNext, totalPages: hasNext ? page + 2 : page + 1 };\r\n }\r\n\r\n // -------- Post\r\n private parsePost(html: string, url: string): Post {\r\n const doc = this.dom.parse(html);\r\n const root = (doc as any).documentElement ?? doc;\r\n\r\n const title =\r\n this.text(this.dom.qs(root, 'h1')) ||\r\n this.attr(this.dom.qs(root, 'meta[property=\"og:title\"]'), 'content') ||\r\n 'Без названия';\r\n\r\n const imgEls = this.dom.qsa(root, 'img');\r\n const imgSet = new Set<string>();\r\n for (const el of imgEls) {\r\n const src = absolutize(\r\n this.baseURL,\r\n this.attr(el, 'data-src') || this.attr(el, 'data-original') || this.attr(el, 'src'),\r\n );\r\n if (!src || /\\b(logo|sprite|icon|favicon)\\b/i.test(src)) continue;\r\n imgSet.add(src);\r\n }\r\n const images = Array.from(imgSet);\r\n\r\n const tags: string[] = [];\r\n const tagEls = this.dom.qsa(root, 'a[href*=\"/tags/\"], .tags a, .field-name-field-tags a');\r\n for (const t of tagEls) {\r\n const txt = this.text(t);\r\n if (txt) tags.push(txt);\r\n }\r\n\r\n return {\r\n url,\r\n title,\r\n images,\r\n tags,\r\n author: null,\r\n };\r\n }\r\n\r\n async getPost(urlOrSlug: string): Promise<Post> {\r\n const url = absolutize(this.baseURL, urlOrSlug) ?? new URL(urlOrSlug, this.baseURL).href;\r\n const html = await this.http.getHtml(url);\r\n return this.parsePost(html, url);\r\n }\r\n\r\n // -------- Smart resolve\r\n async resolveSmart(urlOrSlug: string, _opts?: ResolveOptions): Promise<ResolvedRoute> {\r\n const url = absolutize(this.baseURL, urlOrSlug) ?? new URL(urlOrSlug, this.baseURL).href;\r\n const html = await this.http.getHtml(url);\r\n const doc = this.dom.parse(html);\r\n const articleImgs = this.dom.qsa((doc as any).documentElement ?? doc, 'article img');\r\n if (articleImgs.length >= 2) {\r\n const post = this.parsePost(html, url);\r\n return {\r\n route: 'viewer',\r\n data: {\r\n absoluteUrl: url,\r\n viewer: {\r\n kind: 'images',\r\n meta: {\r\n nodeId: null,\r\n fieldSys: null,\r\n title: post.title,\r\n kind: 'images',\r\n breadcrumbs: [],\r\n authors: [],\r\n sections: [],\r\n tags: [],\r\n characters: [],\r\n userTags: [],\r\n },\r\n images: post.images.map((u) => ({ original: u })),\r\n },\r\n } as any,\r\n };\r\n }\r\n const items = this.parseListing(html);\r\n const hasNext = this.parseHasNext(html);\r\n return {\r\n route: 'listing',\r\n data: {\r\n page: 0,\r\n items,\r\n hasNext,\r\n absoluteUrl: url,\r\n path: new URL(url).pathname,\r\n } as any,\r\n };\r\n }\r\n\r\n // -------- Alphabet (best effort)\r\n async alphabetLetters(section: AlphabetSection): Promise<AlphabetLetter[]> {\r\n const path = section === 'manga' ? '/munga' : `/${section}`;\r\n const html = await this.http.getHtml(path);\r\n const doc = this.dom.parse(html);\r\n const root = (doc as any).documentElement ?? doc;\r\n\r\n const letters: AlphabetLetter[] = [];\r\n const els = this.dom.qsa(\r\n root,\r\n \".alphabet a, .alphabet__item a, .letters a, a[href*='letter=']\",\r\n );\r\n for (const a of els) {\r\n const label = this.text(a) || this.attr(a, 'data-letter');\r\n if (!label) continue;\r\n const href = this.attr(a, 'href');\r\n letters.push({ label, value: label, href });\r\n }\r\n if (!letters.length) {\r\n return 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'.split('').map((c) => ({ label: c, value: c, href: '' }));\r\n }\r\n return letters;\r\n }\r\n\r\n async alphabet(section: AlphabetSection, letter: string, page = 0): Promise<Page<ListingItem>> {\r\n const path = section === 'manga' ? '/munga' : `/${section}`;\r\n return this.listByPath(path, page, { letter });\r\n }\r\n\r\n // -------- Updates (views/ajax) — best effort\r\n // ВАЖНО: чтобы не ловить TS2411, не используем индексную сигнатуру с строгим 'string|number'.\r\n // Вход — Partial (значит, значения могут быть undefined), а отправляем — отфильтрованный Record.\r\n async updates(\r\n params?: Partial<Record<string, string | number>> & { view_name?: string },\r\n ): Promise<UpdatesResult> {\r\n // Сформировать полезную нагрузку без undefined:\r\n const filtered = Object.fromEntries(\r\n Object.entries(params ?? {}).filter(([, v]) => v !== undefined),\r\n ) as Record<string, string | number>;\r\n\r\n const p = { view_name: params?.view_name ?? 'new_mini', ...params };\r\n\r\n const json = await this.http.postForm<any>('/views/ajax', p);\r\n const raw = typeof json === 'string' ? json : JSON.stringify(json);\r\n const items = this.parseListing(raw);\r\n return { items, first: 0, last: items.length, html: raw, viewName: String(p.view_name) } as any;\r\n }\r\n\r\n async viewUpdates(\r\n viewName: string,\r\n params?: Omit<{ [k: string]: string | number }, 'view_name'>,\r\n ): Promise<UpdatesResult> {\r\n return this.updates({ view_name: viewName, ...(params || {}) });\r\n }\r\n}\r\n","import { createCheerioDom } from './dom/cheerio';\r\nimport { MultpornClientCore } from './client-core';\r\n\r\nexport class MultpornClient extends MultpornClientCore {\r\n constructor(opts?: Partial<ConstructorParameters<typeof MultpornClientCore>[0]>) {\r\n super({ ...(opts || {}), dom: createCheerioDom() } as any);\r\n }\r\n}\r\n\r\nexport * from './types';\r\nexport * from './http';\r\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/dom/cheerio.ts","../../src/http.ts","../../src/api/alphabet.ts","../../src/utils.ts","../../src/parsers/pagination.ts","../../src/parsers/alphabet.ts","../../src/api/listings.ts","../../src/parsers/sorting.ts","../../src/parsers/listing.ts","../../src/api/posts.ts","../../src/parsers/post.ts","../../src/api/search.ts","../../src/parsers/search.ts","../../src/parsers/ajax.ts","../../src/api/updates.ts","../../src/parsers/viewDisplay.ts","../../src/parsers/viewer.ts","../../src/parsers/video.ts","../../src/api/viewer.ts","../../src/client-core.ts","../../src/index.node.ts"],"names":["cheerio2","uniq","pickFromSrcset","pickFromStyle","cheerio4","html0","applied","pageParam","html","cheerio5","cheerio6","cheerio7","cls","cheerio8","pickThumb","ABS_URL","absolutize","MultpornClient"],"mappings":"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","file":"index.js","sourcesContent":["import * as cheerio from 'cheerio';\r\nimport type { DomApi, DomDocument, DomElement } from './adapter';\r\n\r\nexport function createCheerioDom(): DomApi {\r\n return {\r\n parse(html: string): DomDocument {\r\n return cheerio.load(html);\r\n },\r\n qsa(ctx: DomDocument | DomElement, selector: string): DomElement[] {\r\n const $ = typeof ctx === 'function' ? (ctx as any) : (ctx as any).$;\r\n const root = typeof ctx === 'function' ? (ctx as any) : (ctx as any).root || ctx;\r\n return ($(root) as any)(selector).toArray();\r\n },\r\n qs(ctx: DomDocument | DomElement, selector: string): DomElement | null {\r\n const $ = typeof ctx === 'function' ? (ctx as any) : (ctx as any).$;\r\n const root = typeof ctx === 'function' ? (ctx as any) : (ctx as any).root || ctx;\r\n const arr = ($(root) as any)(selector).toArray();\r\n return arr.length ? arr[0] : null;\r\n },\r\n text(el?: DomElement | null): string {\r\n if (!el) return '';\r\n try { return (cheerio as any)(el).text().trim().replace(/\\s+/g, ' '); } catch { return ''; }\r\n },\r\n attr(el: DomElement | null | undefined, name: string): string | undefined {\r\n if (!el) return undefined;\r\n try { return (cheerio as any)(el).attr(name) ?? undefined; } catch { return undefined; }\r\n },\r\n closest(el: DomElement | null | undefined, selector: string): DomElement | null {\r\n if (!el) return null;\r\n try {\r\n const $el = (cheerio as any)(el);\r\n const found = $el.closest(selector).get(0);\r\n return found ?? null;\r\n } catch {\r\n return null;\r\n }\r\n }\r\n };\r\n}\r\n","const sleep = (ms: number) => new Promise<void>((resolve) => setTimeout(resolve, ms));\n\nfunction hasAbortController(): boolean {\n return typeof AbortController !== 'undefined';\n}\n\nasync function fetchWithTimeout(\n url: string,\n init: RequestInit,\n timeoutMs: number\n): Promise<Response> {\n if (hasAbortController()) {\n const ctrl = new AbortController();\n const timer = setTimeout(() => {\n try {\n ctrl.abort();\n } catch {\n }\n }, timeoutMs);\n\n try {\n const res = await fetch(url, { ...init, signal: ctrl.signal as AbortSignal });\n clearTimeout(timer);\n return res;\n } catch (e) {\n clearTimeout(timer);\n throw e;\n }\n }\n\n return await Promise.race([\n fetch(url, init),\n new Promise<never>((_, reject) =>\n setTimeout(() => reject(new HttpError('Request timeout')), timeoutMs)\n ),\n ]);\n}\n\nexport type RetryPolicy = {\n retries: number;\n factor: number;\n minDelayMs: number;\n maxDelayMs: number;\n retryOn: (status?: number) => boolean;\n};\n\nexport const defaultRetryPolicy: RetryPolicy = {\n retries: 2,\n factor: 2,\n minDelayMs: 300,\n maxDelayMs: 3000,\n retryOn: (status) => {\n if (status == null) return true;\n return status >= 500 && status <= 599;\n },\n};\n\nexport class HttpError extends Error {\n constructor(\n message: string,\n public status?: number,\n ) {\n super(message);\n this.name = 'HttpError';\n }\n}\n\nexport type HttpClientOptions = {\n baseURL: string;\n headers?: Record<string, string>;\n timeoutMs?: number;\n retry?: Partial<RetryPolicy>;\n userAgent?: string;\n};\n\nexport class HttpClient {\n private baseURL: string;\n private headers: Record<string, string>;\n private timeoutMs: number;\n private retry: RetryPolicy;\n private userAgent: string;\n\n constructor(opts: HttpClientOptions) {\n this.baseURL = opts.baseURL.replace(/\\/+$/, '');\n this.headers = opts.headers ?? {};\n this.timeoutMs = opts.timeoutMs ?? 15000;\n this.retry = { ...defaultRetryPolicy, ...(opts.retry ?? {}) };\n this.userAgent =\n opts.userAgent ??\n 'Mozilla/5.0 (Windows NT 10.0; Win32; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118 Safari/537.36';\n }\n\n private buildURL(pathOrUrl: string) {\n try {\n return new URL(pathOrUrl).toString();\n } catch {\n return new URL(pathOrUrl.replace(/^\\//, ''), this.baseURL + '/').toString();\n }\n }\n\n async getHtml(pathOrUrl: string, attempt = 0): Promise<string> {\n const url = this.buildURL(pathOrUrl);\n\n try {\n const res = await fetchWithTimeout(\n url,\n {\n method: 'GET',\n headers: {\n 'User-Agent': this.userAgent,\n Accept: 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',\n ...this.headers,\n },\n },\n this.timeoutMs\n );\n\n if (!res.ok) {\n if (this.retry.retryOn(res.status) && attempt < this.retry.retries) {\n const delay = Math.min(\n this.retry.maxDelayMs,\n this.retry.minDelayMs * this.retry.factor ** attempt\n );\n await sleep(delay);\n return this.getHtml(pathOrUrl, attempt + 1);\n }\n throw new HttpError(`HTTP ${res.status}`, res.status);\n }\n\n return await res.text();\n } catch (e: any) {\n if (attempt < this.retry.retries) {\n const delay = Math.min(\n this.retry.maxDelayMs,\n this.retry.minDelayMs * this.retry.factor ** attempt\n );\n await sleep(delay);\n return this.getHtml(pathOrUrl, attempt + 1);\n }\n if (e?.name === 'AbortError') throw new HttpError('Request timeout');\n throw new HttpError(e?.message ?? 'Network error');\n }\n }\n\n async getJson<T = any>(pathOrUrl: string, attempt = 0): Promise<T> {\n const url = this.buildURL(pathOrUrl);\n\n try {\n const res = await fetchWithTimeout(\n url,\n {\n method: 'GET',\n headers: {\n 'User-Agent': this.userAgent,\n Accept: 'application/json,text/plain;q=0.9,*/*;q=0.8',\n ...this.headers,\n },\n },\n this.timeoutMs\n );\n\n if (!res.ok) {\n if (this.retry.retryOn(res.status) && attempt < this.retry.retries) {\n const delay = Math.min(\n this.retry.maxDelayMs,\n this.retry.minDelayMs * this.retry.factor ** attempt\n );\n await sleep(delay);\n return this.getJson<T>(pathOrUrl, attempt + 1);\n }\n throw new HttpError(`HTTP ${res.status}`, res.status);\n }\n\n return (await res.json()) as T;\n } catch (e: any) {\n if (attempt < this.retry.retries) {\n const delay = Math.min(\n this.retry.maxDelayMs,\n this.retry.minDelayMs * this.retry.factor ** attempt\n );\n await sleep(delay);\n return this.getJson<T>(pathOrUrl, attempt + 1);\n }\n if (e?.name === 'AbortError') throw new HttpError('Request timeout');\n throw new HttpError(e?.message ?? 'Network error');\n }\n }\n\n async postForm<T = any>(\n pathOrUrl: string,\n form: Record<string, string | string[]>,\n attempt = 0,\n ): Promise<T> {\n const url = this.buildURL(pathOrUrl);\n\n const usp = new URLSearchParams();\n for (const [k, v] of Object.entries(form)) {\n if (Array.isArray(v)) {\n for (const item of v) usp.append(k, item);\n } else if (v != null) {\n usp.append(k, v);\n }\n }\n const body = usp.toString();\n\n try {\n const res = await fetchWithTimeout(\n url,\n {\n method: 'POST',\n headers: {\n 'User-Agent': this.userAgent,\n 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',\n 'X-Requested-With': 'XMLHttpRequest',\n Accept: 'application/json, text/javascript, */*; q=0.01',\n ...this.headers,\n },\n body,\n },\n this.timeoutMs\n );\n\n if (!res.ok) {\n if (this.retry.retryOn(res.status) && attempt < this.retry.retries) {\n const delay = Math.min(\n this.retry.maxDelayMs,\n this.retry.minDelayMs * this.retry.factor ** attempt\n );\n await sleep(delay);\n return this.postForm<T>(pathOrUrl, form, attempt + 1);\n }\n throw new HttpError(`HTTP ${res.status}`, res.status);\n }\n\n const ct = res.headers.get('content-type') || '';\n if (ct.includes('application/json') || ct.includes('text/javascript')) {\n return (await res.json()) as T;\n }\n const text = await res.text();\n try {\n return JSON.parse(text) as T;\n } catch {\n return text as unknown as T;\n }\n } catch (e: any) {\n if (attempt < this.retry.retries) {\n const delay = Math.min(\n this.retry.maxDelayMs,\n this.retry.minDelayMs * this.retry.factor ** attempt\n );\n await sleep(delay);\n return this.postForm<T>(pathOrUrl, form, attempt + 1);\n }\n if (e?.name === 'AbortError') throw new HttpError('Request timeout');\n throw new HttpError(e?.message ?? 'Network error');\n }\n }\n}\n","import { HttpClient } from '../http';\nimport type { AlphabetLetter, AlphabetSection, ListingItem, Page } from '../types';\nimport { parseAlphabetLetters, parseAlphabetListing } from '../parsers/alphabet';\n\ntype Cfg = { hubPath: string; alphaPrefix: string };\n\nconst ALPHA_CFG: Record<string, Cfg> = {\n comics: { hubPath: '/comic', alphaPrefix: '/alphabetical_order_comics' },\n category_comic: { hubPath: '/category_comic', alphaPrefix: '/category_comic/alphabetical' },\n characters: { hubPath: '/characters', alphaPrefix: '/alphabetical_order_characters' },\n authors_comics: { hubPath: '/authors_comics', alphaPrefix: '/alphabetical_order_authors' },\n pipictures: { hubPath: '/pipictures', alphaPrefix: '/alphabetical_order_pictures' },\n porn_gifs: { hubPath: '/porn_gifs', alphaPrefix: '/alphabetical_order_gif' },\n manga: { hubPath: '/munga', alphaPrefix: '/alphabetical_order_manga' },\n authors_hentai: { hubPath: '/authors_hentai', alphaPrefix: '/authors_hentai/alphabetical' },\n};\n\nexport async function alphabetLetters(\n http: HttpClient,\n baseURL: string,\n section: AlphabetSection,\n): Promise<AlphabetLetter[]> {\n const cfg = (ALPHA_CFG as Record<string, Cfg>)[section];\n const hub = cfg.hubPath;\n const html = await http.getHtml(hub);\n return parseAlphabetLetters(html, baseURL);\n}\n\nexport async function alphabetItems(\n http: HttpClient,\n baseURL: string,\n section: AlphabetSection,\n letter: string,\n page = 0,\n): Promise<Page<ListingItem>> {\n const cfg = (ALPHA_CFG as Record<string, Cfg>)[section];\n const letterSeg = encodeURIComponent(letter);\n const html = await http.getHtml(`${cfg.alphaPrefix}/${letterSeg}?page=${page}`);\n return parseAlphabetListing(html, baseURL, page);\n}\n","export function toAbsolute(baseURL: string, href?: string): string | undefined {\n if (!href) return undefined;\n try {\n return new URL(href).toString();\n } catch {\n if (href.startsWith('//')) {\n const base = new URL(baseURL);\n return `${base.protocol}${href}`;\n }\n return new URL(href.replace(/^\\//, ''), baseURL.replace(/\\/+$/, '') + '/').toString();\n }\n}\n\nexport function uniq<T>(arr: T[]): T[] {\n return Array.from(new Set(arr));\n}\n\nexport function absUrl(base: string, href?: string | null): string | null {\n if (!href) return null;\n try {\n return new URL(href, base).toString();\n } catch {\n return null;\n }\n}\n\nexport function normSpace(s?: string | null): string {\n return (s ?? '').replace(/\\s+/g, ' ').trim();\n}\n\nexport function parseNumberLike(s?: string | null): number | undefined {\n if (!s) return undefined;\n const m = String(s)\n .replace(/[^\\d.,]/g, '')\n .replace(',', '.');\n const n = parseFloat(m);\n return Number.isFinite(n) ? n : undefined;\n}\n\nexport function parseIntLike(s?: string | null): number | undefined {\n if (!s) return undefined;\n const n = parseInt(String(s).replace(/[^\\d]/g, ''), 10);\n return Number.isFinite(n) ? n : undefined;\n}\n\nexport function guessKindFromPath(path: string): import('./types').ViewerKind {\n const p = path.split('?')[0].split('#')[0];\n if (p.includes('/hentai_manga/') || p.includes('/munga/')) return 'manga';\n if (p.includes('/comics/')) return 'comics';\n if (p.includes('/pictures/')) return 'pictures';\n if (p.includes('/humor/')) return 'humor';\n if (p.includes('/video/')) return 'video';\n if (p.includes('/games/')) return 'game';\n return 'other';\n}\n\nexport function guessAlphabetSectionFromPath(path: string): string {\n const slug = String(path || '')\n .trim()\n .replace(/^\\//, '')\n .split('/')[0]\n ?.toLowerCase();\n const map: Record<string, string> = {\n comics: 'alphabetical_order_comics',\n manga: 'alphabetical_order_manga',\n pictures: 'alphabetical_order_pipictures',\n porn_gifs: 'alphabetical_order_gif',\n characters: 'alphabetical_order_characters',\n category_comic: 'alphabetical_order_category_comic',\n authors_comics: 'alphabetical_order_authors_comics',\n authors_hentai: 'alphabetical_order_authors_hentai',\n pipictures: 'alphabetical_order_pipictures'\n };\n return map[slug] || (slug ? `alphabetical_order_${slug}` : 'alphabetical_order');\n}\n","import * as cheerio from 'cheerio/slim';\n\nfunction pageIndexFromParam(raw?: string | null): number | null {\n if (!raw) return null;\n const decoded = decodeURIComponent(String(raw));\n const parts = decoded\n .split(',')\n .map((s) => parseInt(s.trim(), 10))\n .filter((n) => Number.isFinite(n));\n if (!parts.length) return null;\n return Math.max(...parts);\n}\n\nfunction pageIndexFromHref(href: string): number | null {\n if (!href) return null;\n try {\n const u = new URL(href, 'https://example.com');\n return pageIndexFromParam(u.searchParams.get('page'));\n } catch {\n const m = href.match(/[?&]page=([^&#]+)/i);\n return m ? pageIndexFromParam(m[1]) : null;\n }\n}\n\nexport function extractTotalPages(html: string): number {\n const $ = cheerio.load(html);\n const root = $(\n 'ul.pager, nav.pagination, .pagination, .item-list .pager, #content .pager',\n ).first();\n if (!root.length) return 1;\n\n const lastHref =\n root\n .find('li.pager-last a[href], a[rel=\"last\"], a[title*=\"Last\"], a[title*=\"Последняя\"]')\n .attr('href') || undefined;\n\n if (lastHref) {\n const idx = pageIndexFromHref(lastHref);\n if (idx != null) return Math.max(1, idx + 1);\n }\n\n let maxPages = 0;\n root.find('a[href]').each((_, a) => {\n const href = String($(a).attr('href') || '');\n const idx = pageIndexFromHref(href);\n if (idx != null) maxPages = Math.max(maxPages, idx + 1);\n });\n\n root.find('a, li, span').each((_, el) => {\n const n = Number(($(el).text() || '').trim());\n if (Number.isFinite(n)) maxPages = Math.max(maxPages, n);\n });\n\n return Math.max(1, maxPages || 1);\n}\n","import * as cheerio from 'cheerio/slim';\nimport type { AnyNode, Element } from 'domhandler';\nimport { normSpace, parseIntLike, toAbsolute } from '../utils';\nimport type { AlphabetLetter, AlphabetBlock, ListingItem, Page } from '../types';\nimport { extractTotalPages } from './pagination';\n\nexport function parseAlphabetLetters(html: string, baseURL: string): AlphabetLetter[] {\n const $ = cheerio.load(html);\n const letters: AlphabetLetter[] = [];\n\n $('.views-summary a[href]').each((_, a) => {\n const el = $(a);\n const raw = normSpace(el.text());\n if (!raw) return;\n\n const count = parseIntLike(raw);\n const label = raw.replace(/\\(\\s*\\d+\\s*\\)\\s*$/, '').trim() || raw;\n const hrefRel = el.attr('href') || '';\n const href = toAbsolute(baseURL, hrefRel) || '';\n const lastSeg = decodeURIComponent((hrefRel.split('/').filter(Boolean).pop() || '').trim());\n if (!label || !href) return;\n\n letters.push({\n label,\n value: lastSeg || label,\n href,\n count: typeof count === 'number' ? count : undefined,\n active: el.hasClass('active') || /(^|\\s)active(\\s|$)/.test(el.attr('class') || ''),\n });\n });\n\n const uniq = new Map<string, AlphabetLetter>();\n for (const l of letters) if (!uniq.has(l.value)) uniq.set(l.value, l);\n return Array.from(uniq.values());\n}\n\nexport function parseAlphabetInline(html: string, baseURL: string): AlphabetBlock | null {\n const $ = cheerio.load(html);\n const containers: Element[] = [];\n\n containers.push(...($('.view-glossary-comics').toArray() as Element[]));\n if (containers.length === 0) containers.push(...($('.view-glossary').toArray() as Element[]));\n if (containers.length === 0) {\n const anyNodes = $('.view').has('.views-summary a').toArray();\n const onlyElements = anyNodes.filter((n): n is Element => (n as any)?.type === 'tag');\n containers.push(...onlyElements);\n }\n if (containers.length === 0) return null;\n\n const grouped = new Map<string, AlphabetLetter[]>();\n\n for (const cont of containers) {\n const $cont = $(cont);\n $cont.find('.views-summary a[href]').each((__, a) => {\n const el = $(a);\n const raw = normSpace(el.text());\n if (!raw) return;\n\n const count = parseIntLike(raw);\n const label = raw.replace(/\\(\\s*\\d+\\s*\\)\\s*$/, '').trim() || raw;\n const hrefRel = el.attr('href') || '';\n const hrefAbs = toAbsolute(baseURL, hrefRel);\n if (!hrefAbs) return;\n\n let section = '';\n try {\n const p = new URL(hrefAbs).pathname;\n const m = p.match(/^\\/([^/]+)/);\n section = m ? m[1] : '';\n } catch {}\n\n const value =\n decodeURIComponent((hrefRel.split('/').filter(Boolean).pop() || '').trim()) || label;\n\n const entry: AlphabetLetter = {\n label,\n value,\n href: hrefAbs,\n count: typeof count === 'number' ? count : undefined,\n active: el.hasClass('active') || /(^|\\s)active(\\s|$)/.test(el.attr('class') || ''),\n };\n\n const arr = grouped.get(section) ?? [];\n if (!arr.some((x) => x.value === entry.value)) arr.push(entry);\n grouped.set(section, arr);\n });\n }\n\n if (!grouped.size) return null;\n\n let chosen: { section: string; letters: AlphabetLetter[] } | null = null;\n for (const [sec, letters] of grouped.entries()) {\n if (letters.some((l) => l.active)) {\n chosen = { section: sec, letters };\n break;\n }\n }\n if (!chosen) {\n let bestSec = '';\n let bestArr: AlphabetLetter[] = [];\n for (const [sec, letters] of grouped.entries()) {\n if (letters.length > bestArr.length) {\n bestSec = sec;\n bestArr = letters;\n }\n }\n chosen = { section: bestSec, letters: bestArr };\n }\n if (!chosen) {\n const [sec, letters] = grouped.entries().next().value as [string, AlphabetLetter[]];\n chosen = { section: sec, letters };\n }\n\n chosen.letters.sort((a, b) => a.label.localeCompare(b.label, 'en'));\n if (!looksLikeAlphabet(chosen.letters)) return null;\n return { section: chosen.section, letters: chosen.letters };\n}\n\nfunction looksLikeAlphabet(letters: AlphabetLetter[]): boolean {\n const short = letters.filter(l => /^[A-Z#]$/i.test(l.label.trim())).length;\n return letters.length >= 10 && short >= 10;\n}\n\nfunction pickFromSrcset(srcset?: string): string | undefined {\n if (!srcset) return;\n const first = srcset.split(',')[0]?.trim();\n if (!first) return;\n const url = first.split(/\\s+/)[0];\n return url || undefined;\n}\n\nfunction pickFromStyle(style?: string): string | undefined {\n if (!style) return;\n const m = style.match(/url\\((['\"]?)(.*?)\\1\\)/i);\n return m?.[2] || undefined;\n}\n\nfunction pickThumbUrl(\n scope: cheerio.Cheerio<Element | AnyNode>,\n baseURL: string,\n): string | undefined {\n const candidates = [\n '.views-field-field-comg-preview img',\n '.views-field-field-cat-preview img',\n '.views-field-field-category-preview img',\n '.views-field-field-man-preview-1 img',\n '.views-field-field-man-preview img',\n '.views-field-field-author-preview img',\n '.views-field-field-authors-pre img',\n '.views-field-field-gif-pre-1 img',\n '.views-field-field-gif-preview img',\n '.views-field-field-gif-pre img',\n '.views-field-field-gif img',\n '.views-field-field-preview img',\n '.views-field-field-image img',\n '.views-field-field-avatar img',\n '.field-content a > img',\n '.field-content img',\n 'a > img',\n 'img',\n ];\n\n for (const sel of candidates) {\n const img = scope.find(sel).first();\n if (img.length) {\n const ds = img.attr('data-src') || img.attr('data-original');\n const ss = pickFromSrcset(img.attr('srcset') || '');\n const src = ds || ss || img.attr('src');\n const abs = toAbsolute(baseURL, src || '');\n if (abs) return abs;\n }\n }\n\n const srcset = pickFromSrcset(scope.find('picture source').first().attr('srcset') || '');\n if (srcset) {\n const abs = toAbsolute(baseURL, srcset);\n if (abs) return abs;\n }\n\n const bg = pickFromStyle(\n (scope.attr('style') as string | undefined) ||\n (scope.find('[style*=\"background-image\"]').first().attr('style') as string | undefined),\n );\n if (bg) {\n const abs = toAbsolute(baseURL, bg);\n if (abs) return abs;\n }\n\n return undefined;\n}\n\nexport function parseAlphabetListing(\n html: string,\n baseURL: string,\n page: number,\n): Page<ListingItem> {\n const $ = cheerio.load(html);\n const items: ListingItem[] = [];\n\n $('table.views-view-grid td').each((_, td) => {\n const scope = $(td);\n const a = scope\n .find(\n '.views-field-title a[href], .views-field-name a[href], strong a[href], h5 a[href], a[href]',\n )\n .first();\n const href = a.attr('href') || '';\n const url = toAbsolute(baseURL, href);\n const title = (\n a.text() ||\n scope.find('.views-field-title .field-content').text() ||\n scope.find('.views-field-name .field-content').text() ||\n scope.find('strong').first().text() ||\n scope.find('h5').first().text() ||\n ''\n ).trim();\n const thumb = pickThumbUrl(scope as any, baseURL);\n if (url && title) items.push({ title, url, thumb });\n });\n\n if (items.length === 0) {\n $('.view .view-content .views-row').each((_, row) => {\n const el = $(row);\n const a = el\n .find(\n '.views-field-title a[href], .views-field-name a[href], strong a[href], h5 a[href], a[href]',\n )\n .first();\n const href = a.attr('href') || '';\n const url = toAbsolute(baseURL, href);\n const title = (\n a.text() ||\n el.find('.views-field-title .field-content').text() ||\n el.find('.views-field-name .field-content').text() ||\n el.find('strong').first().text() ||\n el.find('h5').first().text() ||\n ''\n ).trim();\n const thumb = pickThumbUrl(el as any, baseURL);\n if (url && title) items.push({ title, url, thumb });\n });\n }\n\n const totalPages = extractTotalPages(html);\n const hasNext = page + 1 < totalPages;\n\n return { items, page, hasNext, totalPages };\n}\n","import type { HttpClient } from '../http';\nimport type { ListingItem, Page, ListingQuery } from '../types';\nimport { parseHubListing } from '../parsers/listing';\nimport { parseAlphabetInline, parseAlphabetListing } from '../parsers/alphabet';\nimport { guessAlphabetSectionFromPath } from '../utils';\nimport { parseExposedSorting } from '../parsers/sorting';\n\nfunction buildUrl(baseURL: string, path: string, params?: ListingQuery): string {\n const url = new URL(path.startsWith('/') ? path : `/${path}`, baseURL);\n if (params) {\n for (const [k, v] of Object.entries(params)) {\n if (v === undefined) continue;\n if (typeof v === 'boolean') url.searchParams.set(k, v ? '1' : '0');\n else url.searchParams.set(k, String(v));\n }\n }\n return url.pathname + (url.search ? url.search : '');\n}\n\ntype ListByPathOptions = ListingQuery & {\n letter?: string;\n};\n\nfunction normalizeCharactersPath(path: string): string {\n const clean = path.startsWith('/') ? path : `/${path}`;\n if (/^\\/alphabetical_order_characters\\/?$/i.test(clean)) return '/characters';\n return clean;\n}\n\nfunction sniffPagePrefixFromHtml(html: string): string | null {\n const m =\n html.match(\n /<ul[^>]*class=[\"'][^\"']*pager[^\"']*[\"'][\\s\\S]*?\\bhref=[\"'][^\"']*?\\bpage=([^\"&]+)[\"'][\\s\\S]*?<\\/ul>/i,\n ) || html.match(/\\bpage=([^\"&]+)/i);\n if (!m) return null;\n\n try {\n const decoded = decodeURIComponent(m[1]);\n if (decoded.includes(',')) {\n const parts = decoded.split(',').map((s) => s.trim());\n if (parts.length > 1) return parts.slice(0, -1).join(',') + ','; // \"0,\"\n }\n } catch {\n // ignore\n }\n return null;\n}\n\nfunction buildPageParam(htmlWithPager: string, page: number): string {\n const prefix = sniffPagePrefixFromHtml(htmlWithPager);\n return prefix ? `${prefix}${page}` : String(page);\n}\n\nfunction getAppliedFromHtml(html: string, baseURL: string): Record<string, string> {\n const sorting = parseExposedSorting(html, baseURL);\n return sorting?.appliedParams ?? {};\n}\n\nexport async function latest(\n http: HttpClient,\n baseURL: string,\n page = 0,\n params?: ListingQuery,\n): Promise<Page<ListingItem>> {\n const url0 = buildUrl(baseURL, '/new', { ...(params ?? {}), page: 0 });\n const html0 = await http.getHtml(url0);\n\n if (page === 0) {\n return parseHubListing(html0, baseURL, 0);\n }\n\n const applied = params ? {} : getAppliedFromHtml(html0, baseURL);\n const pageParam = buildPageParam(html0, page);\n\n const html = await http.getHtml(\n buildUrl(baseURL, '/new', { ...applied, ...(params ?? {}), page: pageParam }),\n );\n return parseHubListing(html, baseURL, page);\n}\n\nexport async function listByPath(\n http: HttpClient,\n baseURL: string,\n path: string,\n page = 0,\n opts?: ListByPathOptions,\n): Promise<Page<ListingItem>> {\n const clean = path.startsWith('/') ? path : `/${path}`;\n const commonParams: ListingQuery = { ...(opts ?? {}) };\n delete (commonParams as Record<string, unknown>).letter;\n\n if (opts?.letter) {\n const entryHtml = await http.getHtml(buildUrl(baseURL, clean, commonParams));\n const alphabet = parseAlphabetInline(entryHtml, baseURL);\n\n const wanted = String(opts.letter).toUpperCase();\n\n let letterUrl: string;\n if (alphabet) {\n const match =\n alphabet.letters.find((l) => (l.value || '').toUpperCase() === wanted) ||\n alphabet.letters.find((l) => (l.label || '').toUpperCase() === wanted);\n letterUrl = match?.href || `/${alphabet.section}/${encodeURIComponent(wanted)}`;\n } else {\n const section = guessAlphabetSectionFromPath(clean);\n letterUrl = `/${section}/${encodeURIComponent(wanted)}`;\n }\n\n const url0 = buildUrl(baseURL, letterUrl, { ...commonParams, page: 0 });\n const html0 = await http.getHtml(url0);\n\n const res0 = parseAlphabetListing(html0, baseURL, 0);\n if (alphabet) (res0 as Page<ListingItem>).alphabet = alphabet;\n\n if (page === 0) {\n return res0;\n }\n\n const applied = Object.keys(commonParams).length ? {} : getAppliedFromHtml(html0, baseURL);\n const pageParam = buildPageParam(html0, page);\n\n const html = await http.getHtml(\n buildUrl(baseURL, letterUrl, { ...applied, ...commonParams, page: pageParam }),\n );\n const res = parseAlphabetListing(html, baseURL, page);\n if (alphabet) (res as Page<ListingItem>).alphabet = alphabet;\n return res;\n }\n\n const effective = normalizeCharactersPath(clean);\n\n const html0 = await http.getHtml(buildUrl(baseURL, effective, { ...commonParams, page: 0 }));\n const parsed0 = parseHubListing(html0, baseURL, 0);\n\n if (effective !== clean && !parsed0.alphabet) {\n try {\n const entryHtml = await http.getHtml(buildUrl(baseURL, clean, commonParams));\n const alpha = parseAlphabetInline(entryHtml, baseURL);\n if (alpha) parsed0.alphabet = alpha;\n } catch {\n // best-effort\n }\n }\n\n if (page === 0) {\n return parsed0;\n }\n\n const applied = Object.keys(commonParams).length\n ? {}\n : ((parsed0 as any).sorting?.appliedParams ?? getAppliedFromHtml(html0, baseURL));\n\n const pageParam = buildPageParam(html0, page);\n\n const html = await http.getHtml(\n buildUrl(baseURL, effective, { ...applied, ...commonParams, page: pageParam }),\n );\n const parsed = parseHubListing(html, baseURL, page);\n\n if (effective !== clean && !parsed.alphabet) {\n try {\n const entryHtml = await http.getHtml(buildUrl(baseURL, clean, commonParams));\n const alpha = parseAlphabetInline(entryHtml, baseURL);\n if (alpha) parsed.alphabet = alpha;\n } catch {\n // best-effort\n }\n }\n\n return parsed;\n}\n","import { toAbsolute } from '../utils';\r\nimport type { ExposedOption, ExposedSelect, SortingUI } from '../types';\r\n\r\nexport function parseExposedSorting(html: string, baseURL: string): SortingUI | undefined {\r\n const vfIdx = html.search(/<div[^>]+class=[\"'][^\"']*view-filters[^\"']*[\"'][^>]*>/i);\r\n if (vfIdx < 0) return undefined;\r\n\r\n const formStart = html.indexOf('<form', vfIdx);\r\n if (formStart < 0) return undefined;\r\n const formEnd = html.indexOf('</form>', formStart);\r\n if (formEnd < 0) return undefined;\r\n const formHtml = html.slice(formStart, formEnd + 7);\r\n\r\n const actionMatch = /<form[^>]*\\baction=[\"']([^\"']+)[\"'][^>]*>/i.exec(formHtml);\r\n if (!actionMatch) return undefined;\r\n\r\n const abs = toAbsolute(baseURL, actionMatch[1] || '');\r\n if (!abs) return undefined;\r\n\r\n let actionPath = '/';\r\n try {\r\n actionPath = new URL(abs).pathname || '/';\r\n } catch {\r\n actionPath = '/';\r\n }\r\n\r\n const labels = new Map<string, string>();\r\n const reLabel = /<label[^>]*\\bfor=[\"']([^\"']+)[\"'][^>]*>([\\s\\S]*?)<\\/label>/gi;\r\n let lm: RegExpExecArray | null;\r\n while ((lm = reLabel.exec(formHtml))) {\r\n const id = lm[1];\r\n const raw = (lm[2] || '')\r\n .replace(/<[^>]*>/g, ' ')\r\n .replace(/\\s+/g, ' ')\r\n .trim();\r\n if (id && raw) labels.set(id, raw);\r\n }\r\n\r\n const selects: ExposedSelect[] = [];\r\n const reSelect = /<select\\b([^>]*)>([\\s\\S]*?)<\\/select>/gi;\r\n let sm: RegExpExecArray | null;\r\n while ((sm = reSelect.exec(formHtml))) {\r\n const attrs = sm[1] || '';\r\n const inner = sm[2] || '';\r\n\r\n const name = /(?:^|\\s)name=[\"']([^\"']+)[\"']/i.exec(attrs)?.[1];\r\n if (!name) continue;\r\n\r\n const idAttr = /(?:^|\\s)id=[\"']([^\"']+)[\"']/i.exec(attrs)?.[1];\r\n const label = idAttr ? labels.get(idAttr) : undefined;\r\n\r\n const options: ExposedOption[] = [];\r\n const reOpt = /<option\\b([^>]*)>([\\s\\S]*?)<\\/option>/gi;\r\n let om: RegExpExecArray | null;\r\n while ((om = reOpt.exec(inner))) {\r\n const oattrs = om[1] || '';\r\n const text = (om[2] || '')\r\n .replace(/<[^>]*>/g, ' ')\r\n .replace(/\\s+/g, ' ')\r\n .trim();\r\n const val = /(?:^|\\s)value=[\"']([^\"']*)[\"']/i.exec(oattrs)?.[1] ?? text;\r\n const selected = /\\bselected\\b/i.test(oattrs) || /\\bselected=[\"']selected[\"']/i.test(oattrs);\r\n options.push({ value: val, label: text || val, selected });\r\n }\r\n\r\n selects.push({ name, label, options });\r\n }\r\n\r\n if (!selects.length) return undefined;\r\n\r\n const appliedParams: Record<string, string> = {};\r\n for (const s of selects) {\r\n const selected = s.options.find((o) => o.selected);\r\n if (selected && selected.value !== undefined) {\r\n appliedParams[s.name] = String(selected.value);\r\n }\r\n }\r\n\r\n return { actionPath, selects, appliedParams };\r\n}\r\n","import * as cheerio from 'cheerio/slim';\nimport { toAbsolute } from '../utils';\nimport type { ListingItem, Page } from '../types';\nimport { extractTotalPages } from './pagination';\nimport { parseAlphabetInline } from './alphabet';\nimport { parseExposedSorting } from './sorting';\n\nfunction pickFromSrcset(srcset?: string): string | undefined {\n if (!srcset) return;\n const first = srcset.split(',')[0]?.trim();\n if (!first) return;\n const url = first.split(/\\s+/)[0];\n return url || undefined;\n}\n\nfunction pickFromStyle(style?: string): string | undefined {\n if (!style) return;\n const m = style.match(/url\\((['\"]?)(.*?)\\1\\)/i);\n return m?.[2] || undefined;\n}\n\nfunction pickThumb($scope: cheerio.Cheerio<any>, baseURL: string): string | undefined {\n const cands = [\n '.views-field-field-preview img',\n '.views-field-field-image img',\n '.views-field-field-avatar img',\n '.views-field-field-cat-preview img',\n '.views-field-field-category-preview img',\n '.views-field-field-comg-preview img',\n '.views-field-field-gif-preview img',\n '.views-field-field-gif-pre img',\n '.views-field-field-gif img',\n '.views-field-field-files img',\n 'img',\n ];\n\n for (const sel of cands) {\n const img = $scope.find(sel).first();\n if (img.length) {\n const ds = img.attr('data-src') || img.attr('data-original');\n const ss = pickFromSrcset(img.attr('srcset') || '');\n const src = ds || ss || img.attr('src');\n const abs = toAbsolute(baseURL, src || '');\n if (abs) return abs;\n }\n }\n\n const srcset = pickFromSrcset($scope.find('picture source').first().attr('srcset') || '');\n if (srcset) return toAbsolute(baseURL, srcset);\n\n const bg = pickFromStyle(\n $scope.attr('style') || $scope.find('[style*=\"background-image\"]').first().attr('style'),\n );\n if (bg) return toAbsolute(baseURL, bg);\n\n return undefined;\n}\n\nfunction findTitleLink($scope: cheerio.Cheerio<any>) {\n const sel = $scope.find('.views-field-title a[href]').first().length\n ? '.views-field-title a[href]'\n : $scope.find('.views-field-name a[href]').first().length\n ? '.views-field-name a[href]'\n : $scope.find('.views-field-nothing-1 h3 a[href]').first().length\n ? '.views-field-nothing-1 h3 a[href]'\n : $scope.find('strong a[href]').first().length\n ? 'strong a[href]'\n : $scope.find('h5 a[href]').first().length\n ? 'h5 a[href]'\n : 'a[href]';\n return $scope.find(sel).first();\n}\n\nfunction textFrom($el: cheerio.Cheerio<any>): string {\n return ($el.text() || '').replace(/\\s+/g, ' ').trim();\n}\n\nfunction isPager($a: cheerio.Cheerio<any>): boolean {\n return !!$a.closest('ul.pager, .pager, nav.pagination').length;\n}\n\nfunction cardRoot($a: cheerio.Cheerio<any>): cheerio.Cheerio<any> {\n const r = $a.closest('li, .views-row, td, .node, .views-col, .view-content > div, tr').first();\n return r.length ? r : $a.parent();\n}\n\nexport function parseHubListing(html: string, baseURL: string, page: number): Page<ListingItem> {\n const $ = cheerio.load(html);\n const items: ListingItem[] = [];\n const seen = new Set<string>();\n\n const views = $('.view');\n const scopes = views.length ? views.toArray() : [$('body').get(0)!];\n\n for (const v of scopes) {\n const $view = $(v);\n const $root = $view.find('.view-content').length ? $view.find('.view-content') : $view;\n\n $root.find('table.views-table tbody tr').each((_, tr) => {\n const $tr = $(tr);\n\n let a = $tr.find('.views-field-nothing-1 h3 a[href]').first();\n if (!a.length) {\n const cand = $tr.find('a[href]').first();\n if (cand.length && !isPager(cand)) a = cand;\n }\n const href = a.attr('href') || '';\n const url = toAbsolute(baseURL, href);\n if (!url || seen.has(url)) return;\n\n const title =\n textFrom($tr.find('.views-field-nothing-1 h3').first()) ||\n textFrom(a) ||\n a.attr('title') ||\n '';\n\n if (!title.trim()) return;\n\n const thumbCell = $tr.find('.views-field-field-files').first();\n const thumb = pickThumb(thumbCell, baseURL) || pickThumb($tr, baseURL);\n\n items.push({ title: title.trim(), url, thumb });\n seen.add(url);\n });\n\n $root.find('table.views-view-grid td').each((_, td) => {\n const $td = $(td);\n const a = findTitleLink($td);\n const href = a.attr('href') || '';\n const url = toAbsolute(baseURL, href);\n if (!url || seen.has(url)) return;\n\n const title =\n textFrom(a) ||\n textFrom($td.find('.views-field-title .field-content')) ||\n textFrom($td.find('.views-field-name .field-content')) ||\n a.attr('title') ||\n '';\n\n const thumb = pickThumb($td, baseURL);\n if (title) {\n items.push({ title, url, thumb });\n seen.add(url);\n }\n });\n\n $root.find('.views-row, .node, li').each((_, row) => {\n const $row = $(row);\n const a = findTitleLink($row);\n const href = a.attr('href') || '';\n const url = toAbsolute(baseURL, href);\n if (!url || seen.has(url)) return;\n\n const title =\n textFrom(a) ||\n textFrom($row.find('.views-field-title .field-content')) ||\n textFrom($row.find('.views-field-name .field-content')) ||\n a.attr('title') ||\n '';\n\n const thumb = pickThumb($row, baseURL);\n if (title) {\n items.push({ title, url, thumb });\n seen.add(url);\n }\n });\n\n $root.find('a[href] img').each((_, imgEl) => {\n const $a = $(imgEl).closest('a[href]');\n if (isPager($a)) return;\n\n const url = toAbsolute(baseURL, $a.attr('href') || '');\n if (!url || seen.has(url)) return;\n\n const $card = cardRoot($a);\n const title =\n textFrom($card.find('.views-field-title .field-content').first()) ||\n textFrom($card.find('.views-field-name .field-content').first()) ||\n textFrom($card.find('.views-field-nothing-1 h3').first()) ||\n $a.attr('title') ||\n $(imgEl).attr('alt') ||\n '';\n\n if (!title.trim()) return;\n\n const thumb =\n pickThumb($card, baseURL) ||\n pickThumb($a, baseURL) ||\n toAbsolute(baseURL, $(imgEl).attr('src') || '');\n\n items.push({ title: title.trim(), url, thumb });\n seen.add(url);\n });\n }\n\n const totalPages = extractTotalPages(html);\n const hasNext = page + 1 < totalPages;\n const alphabet = parseAlphabetInline(html, baseURL) || undefined;\n const sorting = parseExposedSorting(html, baseURL);\n\n return {\n items,\n page,\n hasNext,\n totalPages,\n pageSize: undefined,\n alphabet,\n sorting,\n };\n}\n","import { HttpClient } from '../http';\nimport { Post } from '../types';\nimport { parsePost } from '../parsers/post';\n\nexport async function getPost(http: HttpClient, baseURL: string, urlOrSlug: string): Promise<Post> {\n const html = await http.getHtml(urlOrSlug);\n const absolute = (() => {\n try {\n return new URL(urlOrSlug).toString();\n } catch {\n return new URL(urlOrSlug.replace(/^\\//, ''), baseURL + '/').toString();\n }\n })();\n return parsePost(html, baseURL, absolute);\n}\n","import * as cheerio from 'cheerio/slim';\nimport { Post } from '../types';\nimport { toAbsolute, uniq } from '../utils';\n\nexport function parsePost(html: string, baseURL: string, url: string): Post {\n const $ = cheerio.load(html);\n\n const title =\n $('h1').first().text().trim() ||\n $('.page-title, .node-title, .title').first().text().trim() ||\n url;\n\n const container = $('#content, .content, article, .node, .field-items').first();\n\n const imgs: string[] = [];\n container.find('img').each((_, img) => {\n const el = $(img);\n const src = el.attr('data-src') || el.attr('src');\n const abs = toAbsolute(baseURL, src || '');\n if (abs) imgs.push(abs);\n });\n\n const images = uniq(imgs);\n const tags: string[] = [];\n $('.tags a, a[rel=\"tag\"], .field-name-field-tags a').each((_, a) => {\n const t = $(a).text().trim();\n if (t) tags.push(t);\n });\n\n const author =\n $('.author a').first().text().trim() || $('.submitted .username').first().text().trim() || null;\n\n return { title, url, images, tags: uniq(tags), author };\n}\n","import { HttpClient } from '../http';\nimport { Page, ListingItem } from '../types';\nimport { parseSearch } from '../parsers/search';\nimport { extractViewsContextForSearch, extractHtmlFromDrupalAjax } from '../parsers/ajax';\n\nexport async function search(\n http: HttpClient,\n baseURL: string,\n query: string,\n page = 0,\n): Promise<Page<ListingItem>> {\n const q = encodeURIComponent(query);\n\n const html1 = await http.getHtml(`/search?search_api_views_fulltext=${q}&page=${page}`);\n const parsed1 = parseSearch(html1, baseURL, page);\n if (parsed1.items.length > 0) return parsed1;\n\n const firstHtml = await http.getHtml(`/search?search_api_views_fulltext=${q}`);\n const ctx = extractViewsContextForSearch(firstHtml);\n\n const ajaxUrl = `/views/ajax?search_api_views_fulltext=${q}&undefined=Search&_wrapper_format=drupal_ajax`;\n const payload: Record<string, string | string[]> = {\n view_name: ctx.view_name || 'search',\n view_display_id: ctx.view_display_id || 'page',\n view_args: '',\n view_path: 'search',\n view_base_path: 'search',\n view_dom_id: ctx.view_dom_id,\n pager_element: '0',\n page: String(page),\n };\n if (ctx.ajax_html_id) payload['ajax_html_ids[]'] = [ctx.ajax_html_id];\n\n const json: unknown = await http.postForm<unknown>(ajaxUrl, payload);\n const html2 = extractHtmlFromDrupalAjax(json, ctx.view_dom_id) || '';\n return parseSearch(html2, baseURL, page);\n}\n","import * as cheerio from 'cheerio/slim';\nimport { ListingItem, Page } from '../types';\nimport { toAbsolute } from '../utils';\nimport { extractTotalPages } from './pagination';\n\nexport function parseSearch(html: string, baseURL: string, page: number): Page<ListingItem> {\n const $ = cheerio.load(html);\n const items: ListingItem[] = [];\n\n const view = $('.view')\n .filter((_, el) => {\n const cls = $(el).attr('class') || '';\n return (\n /view-id-search/.test(cls) &&\n /view-display-id-page/.test(cls) &&\n $(el).find('.view-content').length > 0\n );\n })\n .first();\n\n const rows = view.find('.view-content .views-row');\n rows.each((_, el) => {\n const row = $(el);\n\n const a = row.find('.views-field-title a[href]').first().length\n ? row.find('.views-field-title a[href]').first()\n : row.find('a[href]').first();\n\n const href = a.attr('href') || '';\n const url = toAbsolute(baseURL, href);\n const title = (a.text() || row.find('.views-field-title .field-content').text() || '').trim();\n\n const pickImg = row.find('.views-field-field-preview img').first().length\n ? row.find('.views-field-field-preview img').first()\n : row.find('.views-field-field-image img').first().length\n ? row.find('.views-field-field-image img').first()\n : row.find('.views-field-field-fl-prev img').first().length\n ? row.find('.views-field-field-fl-prev img').first()\n : row.find('.views-field-field-album-preview img').first().length\n ? row.find('.views-field-field-album-preview img').first()\n : row.find('.views-field-field-vd-preciew img').first().length\n ? row.find('.views-field-field-vd-preciew img').first()\n : row.find('.views-field-field-gif-pre img').first().length\n ? row.find('.views-field-field-gif-pre img').first()\n : row.find('.views-field-field-avatar img').first().length\n ? row.find('.views-field-field-avatar img').first()\n : row.find('img').first();\n\n let thumb = pickImg.attr('data-src') || pickImg.attr('src') || undefined;\n thumb = toAbsolute(baseURL, thumb);\n\n if (url && title) items.push({ title, url, thumb });\n });\n\n const totalPages = extractTotalPages(html);\n const hasNext = page + 1 < totalPages;\n\n if (items.length === 0) {\n return { items: [], page, hasNext: false, totalPages: 1 };\n }\n return { items, page, hasNext, totalPages };\n}\n","import * as cheerio from 'cheerio/slim';\n\nexport function extractViewsContextForSearch(html: string): {\n view_name: string;\n view_display_id: string;\n view_dom_id: string;\n ajax_html_id?: string;\n} {\n const $ = cheerio.load(html);\n\n const view = $('.view')\n .filter((_, el) => {\n const cls = $(el).attr('class') || '';\n return /view-id-search/.test(cls) && /view-display-id-page/.test(cls);\n })\n .first();\n\n const cls = view.attr('class') || '';\n const view_name = cls.match(/view-id-([^\\s]+)/)?.[1] || 'search';\n const view_display_id = cls.match(/view-display-id-([^\\s]+)/)?.[1] || 'page';\n\n const domFromClass = cls.match(/view-dom-id-([^\\s]+)/)?.[1] || '';\n const domFromId = (view.attr('id') || '').replace(/^view-dom-id-/, '');\n const view_dom_id = domFromClass || domFromId || 'view-dom-id-1';\n\n const ajax_html_id = $('[id^=\"views-exposed-form\"]').attr('id') || view.attr('id') || undefined;\n\n return { view_name, view_display_id, view_dom_id, ajax_html_id };\n}\n\nexport function extractHtmlFromDrupalAjax(payload: unknown, wantDomId?: string): string | null {\n if (Array.isArray(payload)) {\n for (const cmd of payload) {\n const c = cmd as any;\n const sel = String(c?.selector || '');\n const data = c?.data;\n if (\n (c?.command === 'insert' || c?.command === 'replaceWith') &&\n typeof data === 'string' &&\n data.trim() &&\n (!wantDomId || sel.includes(wantDomId) || sel.includes('view-content'))\n )\n return data;\n }\n const concat = payload.map((x: any) => (typeof x?.data === 'string' ? x.data : '')).join('');\n return concat.trim() ? concat : null;\n }\n const disp = (payload as any)?.display;\n return typeof disp === 'string' ? disp : null;\n}\n","import { HttpClient } from '../http';\nimport { UpdatesResult, MultpornUpdatesParams, ListingItem, ViewName } from '../types';\nimport { parseViewDisplay } from '../parsers/viewDisplay';\n\ntype JCarouselResponse = {\n status: boolean;\n display: string;\n title?: string;\n messages?: string;\n};\n\nconst VIEW_PRESETS: Record<\n string,\n { view_display_id?: string; jcarousel_dom_id?: string | number }\n> = {\n random_top_comics: { view_display_id: 'block', jcarousel_dom_id: 7 },\n top_random_characters: { view_display_id: 'block', jcarousel_dom_id: 8 },\n};\n\nfunction uniq<T>(arr: T[]): T[] {\n return Array.from(new Set(arr));\n}\n\nexport async function updates(\n http: HttpClient,\n baseURL: string,\n params: MultpornUpdatesParams = {},\n): Promise<UpdatesResult> {\n const viewName: ViewName = (params.view_name as ViewName) ?? ('new_mini' as ViewName);\n\n const preset = VIEW_PRESETS[viewName] || {};\n const first = Number(params.first ?? 0);\n const last = Number(params.last ?? 8);\n\n const basePayload = {\n js: '1',\n first: String(first),\n last: String(last),\n view_args: params.view_args ?? '',\n view_path: params.view_path ?? 'node',\n view_base_path: params.view_base_path ?? '',\n view_name: viewName,\n };\n\n const displayCandidates = uniq<string>([\n params.view_display_id ?? preset.view_display_id ?? 'block_1',\n 'block',\n 'block_2',\n 'block_3',\n 'page',\n 'default',\n ]).filter(Boolean);\n\n const origDom = Number(params.jcarousel_dom_id ?? preset.jcarousel_dom_id ?? 1);\n const domCandidates = uniq<number>([\n origDom,\n origDom - 1,\n origDom + 1,\n ...Array.from({ length: 10 }, (_, i) => i + 1),\n ]).filter((n) => Number.isFinite(n) && n > 0);\n\n let displayHtml = '';\n\n for (const view_display_id of displayCandidates) {\n for (const jcarousel_dom_id of domCandidates) {\n try {\n const qs = new URLSearchParams({\n ...basePayload,\n view_display_id: String(view_display_id),\n jcarousel_dom_id: String(jcarousel_dom_id),\n }).toString();\n\n const data = await http.getJson<JCarouselResponse>(`/jcarousel/ajax/views?${qs}`);\n const html = data?.display?.trim() ?? '';\n if (html) {\n displayHtml = html;\n displayCandidates.length = 0;\n break;\n }\n } catch {\n // продолжим перебирать кандидатов\n }\n }\n }\n\n if (!displayHtml) {\n return { items: [], first, last, html: '', viewName };\n }\n\n const items: ListingItem[] = parseViewDisplay(viewName, displayHtml, baseURL);\n return { items, first, last, html: displayHtml, viewName };\n}\n\nexport const updatesShortcuts = {\n newMini: (http: HttpClient, baseURL: string, p?: Omit<MultpornUpdatesParams, 'view_name'>) =>\n updates(http, baseURL, { ...(p ?? {}), view_name: 'new_mini' }),\n userUploadFront: (\n http: HttpClient,\n baseURL: string,\n p?: Omit<MultpornUpdatesParams, 'view_name'>,\n ) => updates(http, baseURL, { ...(p ?? {}), view_name: 'user_upload_front' }),\n updatedManga: (http: HttpClient, baseURL: string, p?: Omit<MultpornUpdatesParams, 'view_name'>) =>\n updates(http, baseURL, { ...(p ?? {}), view_name: 'updated_manga' }),\n updatedMangaPromoted: (\n http: HttpClient,\n baseURL: string,\n p?: Omit<MultpornUpdatesParams, 'view_name'>,\n ) => updates(http, baseURL, { ...(p ?? {}), view_name: 'updated_manga_promoted' }),\n updatedGames: (http: HttpClient, baseURL: string, p?: Omit<MultpornUpdatesParams, 'view_name'>) =>\n updates(http, baseURL, { ...(p ?? {}), view_name: 'updated_games' }),\n randomTopComics: (\n http: HttpClient,\n baseURL: string,\n p?: Omit<MultpornUpdatesParams, 'view_name'>,\n ) => updates(http, baseURL, { ...(p ?? {}), view_name: 'random_top_comics' }),\n topRandomCharacters: (\n http: HttpClient,\n baseURL: string,\n p?: Omit<MultpornUpdatesParams, 'view_name'>,\n ) => updates(http, baseURL, { ...(p ?? {}), view_name: 'top_random_characters' }),\n};\n","import * as cheerio from 'cheerio/slim';\nimport { ListingItem, ViewName } from '../types';\nimport { toAbsolute } from '../utils';\n\nexport function parseViewDisplay(\n viewName: ViewName | string,\n html: string,\n baseURL: string,\n): ListingItem[] {\n const $ = cheerio.load(html);\n const items: ListingItem[] = [];\n\n const pickThumb = (scope: cheerio.Cheerio<any>) => {\n const img = scope.find('.views-field-field-preview img').first().length\n ? scope.find('.views-field-field-preview img').first()\n : scope.find('.views-field-field-image img').first().length\n ? scope.find('.views-field-field-image img').first()\n : scope.find('.views-field-field-avatar img').first().length\n ? scope.find('.views-field-field-avatar img').first()\n : scope.find('img').first();\n let thumb = img.attr('data-src') || img.attr('src') || undefined;\n return toAbsolute(baseURL, thumb);\n };\n\n const liList = $('ul.jcarousel li');\n liList.each((_, li) => {\n const scope = $(li);\n\n const a = scope.find('.views-field-title a[href]').first().length\n ? scope.find('.views-field-title a[href]').first()\n : scope.find('.views-field-name a[href]').first();\n\n const href = a.attr('href') || '';\n const url = toAbsolute(baseURL, href);\n\n const title = (\n a.text() ||\n scope.find('.views-field-title .field-content').text() ||\n scope.find('.views-field-name .field-content').text() ||\n ''\n ).trim();\n\n const thumb = pickThumb(scope);\n\n if (url && title) items.push({ title, url, thumb });\n });\n\n return items;\n}\n","import {\n absUrl,\n normSpace,\n parseIntLike,\n parseNumberLike,\n toAbsolute,\n uniq,\n guessKindFromPath,\n} from '../utils';\nimport type { LinkItem, ViewerImage, ViewerKind, ViewerMeta } from '../types';\n\nfunction decodeHtml(s: string): string {\n return s\n .replace(/ /g, ' ')\n .replace(/&/g, '&')\n .replace(/"/g, '\"')\n .replace(/'/g, \"'\")\n .replace(/</g, '<')\n .replace(/>/g, '>');\n}\n\nfunction textBetween(html: string, openRe: RegExp, close: string): string | null {\n const m = openRe.exec(html);\n if (!m) return null;\n const i = m.index + m[0].length;\n const j = html.indexOf(close, i);\n if (j < 0) return null;\n return html.slice(i, j);\n}\n\nfunction stripTags(s: string): string {\n return s.replace(/<[^>]*>/g, '');\n}\n\nfunction collectLinks(blockHtml: string, baseURL: string): LinkItem[] {\n const out: LinkItem[] = [];\n const re = /<a\\s+[^>]*href=\"([^\"]+)\"[^>]*>([\\s\\S]*?)<\\/a>/gi;\n let m: RegExpExecArray | null;\n while ((m = re.exec(blockHtml))) {\n const url = absUrl(baseURL, m[1]) ?? '';\n const title = normSpace(decodeHtml(stripTags(m[2])));\n if (url && title) out.push({ url, title });\n }\n return out;\n}\n\nfunction findFieldNodeAndSys(html: string): { nodeId: number; fieldSys: string } | null {\n const re = /id=\"field--node--(\\d+)--([a-z0-9_-]+)--full\"/i;\n const m = re.exec(html);\n if (m) {\n const nodeId = parseInt(m[1], 10);\n const fieldSys = m[2].replace(/-/g, '_');\n if (Number.isFinite(nodeId)) return { nodeId, fieldSys };\n }\n\n const re2 = /\\/juicebox\\/xml\\/field\\/node\\/(\\d+)\\/([a-z0-9_]+)\\/full/gi;\n const m2 = re2.exec(html);\n if (m2) {\n const nodeId = parseInt(m2[1], 10);\n const fieldSys = m2[2];\n if (Number.isFinite(nodeId)) return { nodeId, fieldSys };\n }\n return null;\n}\n\nexport function buildJuiceboxXmlUrl(baseURL: string, nodeId: number, fieldSys: string): string {\n const root = baseURL.replace(/\\/+$/, '');\n return `${root}/juicebox/xml/field/node/${nodeId}/${fieldSys}/full`;\n}\n\nexport function parseJuiceboxXml(xml: string): ViewerImage[] {\n const images: ViewerImage[] = [];\n const reImg = /<image\\b([^>]+)>/gi;\n let m: RegExpExecArray | null;\n while ((m = reImg.exec(xml))) {\n const attrs = m[1];\n const map: Record<string, string> = {};\n let am: RegExpExecArray | null;\n const reAttr = /([a-zA-Z0-9_-]+)\\s*=\\s*\"([^\"]*)\"/g;\n while ((am = reAttr.exec(attrs))) map[am[1]] = am[2];\n\n const original =\n map['linkURL'] || map['imageURL'] || map['largeImageURL'] || map['smallImageURL'] || '';\n if (!original) continue;\n\n images.push({\n original,\n large: map['largeImageURL'],\n medium: map['imageURL'] || map['smallImageURL'],\n small: map['smallImageURL'],\n thumb: map['thumbURL'],\n });\n }\n return images;\n}\n\nexport function parseInlineJuiceboxFromHtml(html: string): ViewerImage[] {\n const out: ViewerImage[] = [];\n const reMed = /<img[^>]+src=\"([^\"]+\\/styles\\/juicebox_(?:medium|small|large)\\/[^\"]+)\"[^>]*>/gi;\n const seen = new Set<string>();\n let m: RegExpExecArray | null;\n while ((m = reMed.exec(html))) {\n const url = m[1];\n if (seen.has(url)) continue;\n seen.add(url);\n out.push({ original: url, medium: url });\n }\n return out;\n}\n\nfunction parseBreadcrumbs(html: string, baseURL: string): LinkItem[] {\n const block = textBetween(html, /<div[^>]+class=\"breadcrumb\"[^>]*>/i, '</div>');\n return block ? collectLinks(block, baseURL) : [];\n}\n\nfunction findLabeledFieldBlock(html: string, labelStartsWith: string): string | null {\n const esc = labelStartsWith.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n const re = new RegExp(\n `<(?:h3|div)[^>]*class=\"[^\"]*field-label[^\"]*\"[^>]*>\\\\s*${esc}\\\\s*:?\\\\s*<\\\\/[^>]+>`,\n 'i',\n );\n const idx = html.search(re);\n if (idx < 0) return null;\n\n const open = html.lastIndexOf('<div', idx);\n let depth = 0;\n for (let i = open; i < html.length; i++) {\n if (html.startsWith('<div', i)) depth++;\n if (html.startsWith('</div>', i)) {\n depth--;\n if (depth === 0) {\n return html.slice(open, i + 6);\n }\n }\n }\n return null;\n}\n\nfunction parseLabeledField(html: string, labelStartsWith: string): string | null {\n return findLabeledFieldBlock(html, labelStartsWith);\n}\n\nfunction parsePlainValuesFromLabeledField(html: string, label: string): string[] {\n const block = findLabeledFieldBlock(html, label);\n if (!block) return [];\n const text = normSpace(decodeHtml(stripTags(block)))\n .replace(new RegExp(`^${label}\\\\s*:?\\\\s*`, 'i'), '')\n .trim();\n if (!text) return [];\n return text.split(/\\s*[,;]\\s*/).filter(Boolean);\n}\n\nfunction parseTitle(html: string): string {\n const h1 = textBetween(html, /<h1[^>]*id=\"page-title\"[^>]*>/i, '</h1>');\n if (h1) return normSpace(decodeHtml(stripTags(h1)));\n const m = /<meta[^>]+property=\"og:title\"[^>]+content=\"([^\"]+)\"/i.exec(html);\n if (m) return normSpace(decodeHtml(m[1]));\n return '';\n}\n\nfunction parseVotesAndRating(html: string): { rating?: number; votes?: number } {\n const block =\n /<div[^>]*class=\"[^\"]*\\bfivestar-summary\\b[^\"]*\"[^>]*>([\\s\\S]*?)<\\/div>/i.exec(html)?.[1] ||\n /<div[^>]*class=\"[^\"]*\\bfivestar-average[^\"]*\"[^>]*>([\\s\\S]*?)<\\/div>/i.exec(html)?.[1] ||\n '';\n\n if (block) {\n const mAvg =\n /class=\"average-rating\"[^>]*>[\\s\\S]*?Average[^:]*:\\s*(?:<span[^>]*>)?([\\d.,]+)(?:<\\/span>)?/i.exec(\n block,\n );\n const mVotes =\n /class=\"total-votes\"[^>]*>\\s*\\(\\s*(?:<span[^>]*>)?(\\d+)(?:<\\/span>)?\\s+votes?\\s*\\)/i.exec(\n block,\n );\n\n const rating = mAvg ? parseNumberLike(mAvg[1]) : undefined;\n const votes = mVotes ? parseIntLike(mVotes[1]) : undefined;\n if (rating != null || votes != null) return { rating, votes };\n }\n\n const m1 =\n /Average\\s*:\\s*(?:<span[^>]*>)?([\\d.,]+)(?:<\\/span>)?[\\s\\S]*?\\(\\s*(?:<span[^>]*>)?(\\d+)(?:<\\/span>)?\\s*votes?\\s*\\)/i.exec(\n html,\n );\n if (m1) {\n return {\n rating: parseNumberLike(m1[1]),\n votes: parseIntLike(m1[2]),\n };\n }\n\n const m2 = /Average[^<>\\d]*([\\d.,]+)/i.exec(html);\n const m3 = /\\((\\d+)\\s+votes?\\)/i.exec(html);\n if (m2 || m3) {\n const rating = m2 ? parseNumberLike(m2[1]) : undefined;\n const votes = m3 ? parseIntLike(m3[1]) : undefined;\n return { rating, votes };\n }\n\n return {};\n}\n\nfunction parseViews(html: string): number | undefined {\n const patterns: RegExp[] = [\n /<li[^>]*class=\"statistics_counter[^\"]*\"[^>]*>\\s*<span>\\s*([\\d\\s.,]+)\\s+views\\s*<\\/span>/i,\n />\\s*([\\d\\s.,]+)\\s+views\\s*<\\/(?:span|div|li|h\\d)>/i,\n />\\s*Views\\s*[:\\-]?\\s*<\\/?(?:span|strong|b)?[^>]*>\\s*([\\d\\s.,]+)\\s*</i,\n /\\bViews\\s*[:\\-]?\\s*([\\d\\s.,]+)/i,\n ];\n for (const rx of patterns) {\n const m = rx.exec(html);\n if (m && m[1]) return parseIntLike(m[1]);\n }\n return undefined;\n}\n\nfunction parseLinksFromLabeledField(html: string, baseURL: string, label: string): LinkItem[] {\n const block = parseLabeledField(html, label);\n return block ? collectLinks(block, baseURL) : [];\n}\n\nfunction parseRelated(html: string, baseURL: string): LinkItem[] {\n const pieces: string[] = [];\n const re =\n /<div[^>]+class=\"view[^\"]*down[^\"]*random[^\"]*hentai[^\"]*manga[^\"]*\"[^>]*>([\\s\\S]*?)<\\/div>\\s*<\\/div>/gi;\n let m: RegExpExecArray | null;\n while ((m = re.exec(html))) pieces.push(m[1]);\n return uniq(pieces.flatMap((p) => collectLinks(p, baseURL)));\n}\n\nfunction parseUploader(\n html: string,\n baseURL: string,\n):\n | {\n name?: string;\n url?: string;\n avatar?: string;\n dateText?: string;\n }\n | undefined {\n const m = /<footer[^>]*class=\"[^\"]*\\bsubmitted\\b[^\"]*\"[^>]*>([\\s\\S]*?)<\\/footer>/i.exec(html);\n if (!m) return undefined;\n const block = m[1];\n\n const a = /Uploaded\\s+by\\s*<a[^>]*href=\"([^\"]+)\"[^>]*>([\\s\\S]*?)<\\/a>\\s*on\\s*([^<]+)/i.exec(\n block,\n );\n const img = /<div[^>]*class=\"user-picture\"[^>]*>[\\s\\S]*?<img[^>]*src=\"([^\"]+)\"/i.exec(block);\n\n const out: { name?: string; url?: string; avatar?: string; dateText?: string } = {};\n if (a) {\n out.url = absUrl(baseURL, a[1]) ?? '';\n out.name = normSpace(decodeHtml(stripTags(a[2])));\n out.dateText = normSpace(decodeHtml(a[3]));\n }\n if (img) out.avatar = absUrl(baseURL, img[1]) ?? '';\n return out;\n}\n\nexport function parseViewerMeta(\n html: string,\n baseURL: string,\n absoluteUrl: string,\n): {\n meta: ViewerMeta;\n nodeId: number | null;\n fieldSys: string | null;\n} {\n const title = parseTitle(html);\n const breadcrumbs = parseBreadcrumbs(html, baseURL);\n\n let authors = parseLinksFromLabeledField(html, baseURL, 'Author');\n if (authors.length === 0) {\n const altLinks = parseLinksFromLabeledField(html, baseURL, \"Artist's name\");\n if (altLinks.length) authors = altLinks;\n if (authors.length === 0) {\n const altPlain = parsePlainValuesFromLabeledField(html, \"Artist's name\");\n if (altPlain.length) {\n authors = altPlain.map((t) => ({ title: t, url: '' }));\n }\n }\n }\n\n let sections = parseLinksFromLabeledField(html, baseURL, 'Section');\n if (sections.length === 0) {\n const sPlain = parsePlainValuesFromLabeledField(html, 'Section');\n if (sPlain.length) sections = sPlain.map((t) => ({ title: t, url: '' }));\n }\n\n let tags = parseLinksFromLabeledField(html, baseURL, 'Tags');\n if (tags.length === 0) {\n const block =\n /<div[^>]*class=\"[^\"]*field-name-field-category[^\"]*\"[^>]*>([\\s\\S]*?)<\\/div>/i.exec(html);\n if (block) tags = collectLinks(block[1], baseURL);\n }\n\n const characters = parseLinksFromLabeledField(html, baseURL, 'Characters');\n const userTags = parseLinksFromLabeledField(html, baseURL, 'User tags');\n const { rating, votes } = parseVotesAndRating(html);\n const views = parseViews(html);\n\n const kind: ViewerKind = guessKindFromPath(absoluteUrl);\n const field = findFieldNodeAndSys(html);\n const uploader = parseUploader(html, baseURL);\n\n const meta: ViewerMeta = {\n nodeId: field?.nodeId ?? null,\n fieldSys: field?.fieldSys ?? null,\n title,\n kind,\n breadcrumbs,\n authors,\n sections,\n tags,\n characters,\n userTags,\n rating,\n votes,\n views,\n related: parseRelated(html, baseURL),\n };\n\n if (uploader) {\n (meta as any).uploader = uploader;\n }\n\n return { meta, nodeId: meta.nodeId, fieldSys: meta.fieldSys };\n}\n\nfunction findCanonicalUrl(html: string, baseURL: string): string {\n const m1 = /<link[^>]+rel=[\"']canonical[\"'][^>]+href=[\"']([^\"']+)[\"']/i.exec(html);\n if (m1?.[1]) return absUrl(baseURL, m1[1]) ?? baseURL.replace(/\\/+$/, '');\n const m2 = /<meta[^>]+property=[\"']og:url[\"'][^>]+content=[\"']([^\"']+)[\"']/i.exec(html);\n if (m2?.[1]) return absUrl(baseURL, m2[1]) ?? baseURL.replace(/\\/+$/, '');\n return baseURL.replace(/\\/+$/, '');\n}\n\nconst EXCLUDE_URL_PATTERNS: RegExp[] = [\n /\\/styles\\/avatars\\//i,\n /\\/user_avatars\\//i,\n /\\/default_images\\//i,\n /\\/styles\\/taxonomy_(?:comics|manga)\\//i,\n /\\/com_preview\\//i,\n /\\/promo\\//i,\n];\n\nfunction isExcludedUrl(u: string): boolean {\n const s = String(u);\n return EXCLUDE_URL_PATTERNS.some((re) => re.test(s));\n}\n\nfunction stripExcludedBlocks(html: string): string {\n const patterns: RegExp[] = [\n /<div[^>]+id=\"comments\"[^>]*>[\\s\\S]*?<\\/div>/gi,\n /<section[^>]+id=\"comments\"[^>]*>[\\s\\S]*?<\\/section>/gi,\n /<div[^>]+class=\"[^\"]*\\bcomments?\\b[^\"]*\"[^>]*>[\\s\\S]*?<\\/div>/gi,\n /<div[^>]+class=\"[^\"]*\\bcomment\\b[^\"]*\"[^>]*>[\\s\\S]*?<\\/div>/gi,\n /<ul[^>]+class=\"[^\"]*\\bcomment\\b[^\"]*\"[^>]*>[\\s\\S]*?<\\/ul>/gi,\n\n /<div[^>]+class=\"[^\"]*\\brelated\\b[^\"]*\"[^>]*>[\\s\\S]*?<\\/div>/gi,\n /<div[^>]+class=\"[^\"]*\\bmore\\b[^\"]*\"[^>]*>[\\s\\S]*?<\\/div>/gi,\n /<div[^>]+class=\"[^\"]*\\bmore-comics\\b[^\"]*\"[^>]*>[\\s\\S]*?<\\/div>/gi,\n /<div[^>]+class=\"[^\"]*\\bpane-related\\b[^\"]*\"[^>]*>[\\s\\S]*?<\\/div>/gi,\n\n /<aside[\\s\\S]*?<\\/aside>/gi,\n /<div[^>]+class=\"[^\"]*\\bsidebar\\b[^\"]*\"[^>]*>[\\s\\S]*?<\\/div>/gi,\n /<div[^>]+class=\"[^\"]*\\bnode-footer\\b[^\"]*\"[^>]*>[\\s\\S]*?<\\/div>/gi,\n\n /<div[^>]+class=\"[^\"]*\\bpane-views\\b[^\"]*\"[^>]*>[\\s\\S]*?<\\/div>/gi,\n /<div[^>]+class=\"[^\"]*\\bpane-taxonomy\\b[^\"]*\"[^>]*>[\\s\\S]*?<\\/div>/gi,\n ];\n\n let cleaned = html;\n for (const re of patterns) cleaned = cleaned.replace(re, '');\n return cleaned;\n}\n\nfunction collectImgSrcs(html: string): string[] {\n const out: string[] = [];\n const re = /<img[^>]+src=[\"']([^\"']+)[\"'][^>]*>/gi;\n let m: RegExpExecArray | null;\n while ((m = re.exec(html))) out.push(m[1]);\n return out;\n}\n\nfunction collectContentImages(html: string): string[] {\n const cleaned = stripExcludedBlocks(html);\n return collectImgSrcs(cleaned).filter((u) => !!u && !isExcludedUrl(u));\n}\n\nexport function parseViewer(\n html: string,\n baseURL: string,\n): { meta: ViewerMeta; images: ViewerImage[] } {\n const absoluteUrl = findCanonicalUrl(html, baseURL);\n const { meta } = parseViewerMeta(html, baseURL, absoluteUrl);\n\n const inline: ViewerImage[] = parseInlineJuiceboxFromHtml(html)\n .map((im): ViewerImage => {\n const original = (toAbsolute(baseURL, im.original || '') || '') as string;\n return {\n original,\n large: im.large ? toAbsolute(baseURL, im.large) || undefined : undefined,\n medium: im.medium ? toAbsolute(baseURL, im.medium) || undefined : undefined,\n small: im.small ? toAbsolute(baseURL, im.small) || undefined : undefined,\n thumb: im.thumb ? toAbsolute(baseURL, im.thumb) || undefined : undefined,\n };\n })\n .filter((im) => !!im.original);\n\n let fallback: ViewerImage[] = [];\n if (inline.length === 0) {\n const srcs = collectContentImages(html)\n .map((u) => toAbsolute(baseURL, u) || '')\n .filter((u) => !!u);\n\n const seen = new Set<string>();\n fallback = srcs\n .filter((u) => {\n if (!u || seen.has(u)) return false;\n seen.add(u);\n return true;\n })\n .map((u): ViewerImage => ({ original: u }));\n }\n\n const all: ViewerImage[] = [...inline, ...fallback];\n const byOriginal = new Map<string, ViewerImage>();\n for (const im of all) {\n const key = im.original || '';\n if (key && !byOriginal.has(key)) byOriginal.set(key, im as ViewerImage);\n }\n\n return { meta, images: Array.from(byOriginal.values()) };\n}\n\nexport default parseViewer;\n","export interface ParsedVideo {\n poster?: string;\n sources: Array<{ url: string; type?: string; label?: string }>;\n}\n\nconst ABS_URL = /^https?:\\/\\//i;\n\nfunction absolutize(u: string, base: string) {\n if (!u) return '';\n if (ABS_URL.test(u)) return u;\n if (u.startsWith('//')) return 'https:' + u;\n if (u.startsWith('/')) return base.replace(/\\/+$/, '') + u;\n return u;\n}\n\nexport function parseVideoFromHtml(html: string, baseURL: string): ParsedVideo | null {\n if (!html || !/node-video|class=[\"']video-js|<video/i.test(html)) return null;\n\n const posterMatch =\n html.match(/<video[^>]*\\sposter=[\"']([^\"']+)[\"']/i) ||\n html.match(/class=[\"']video-js[^\"']*[\"'][^>]*\\sposter=[\"']([^\"']+)[\"']/i);\n\n const poster = posterMatch ? absolutize(posterMatch[1], baseURL) : undefined;\n\n const sources: Array<{ url: string; type?: string; label?: string }> = [];\n\n const mainVideo = html.match(/<video[^>]*\\ssrc=[\"']([^\"']+)[\"'][^>]*>/i);\n if (mainVideo) sources.push({ url: absolutize(mainVideo[1], baseURL) });\n\n const re = /<source[^>]*\\ssrc=[\"']([^\"']+)[\"'][^>]*?(?:\\stype=[\"']([^\"']+)[\"'])?[^>]*>/gi;\n for (let m: RegExpExecArray | null; (m = re.exec(html)); ) {\n sources.push({ url: absolutize(m[1], baseURL), type: m[2] });\n }\n\n if (!sources.length) return null;\n\n return { poster, sources };\n}\n","import { HttpClient } from '../http';\nimport {\n ResolveOptions,\n ViewerMeta,\n ViewerImage,\n ViewerResult,\n ResolvedRoute,\n ViewerPayload,\n Page,\n ListingItem,\n} from '../types';\n\nimport * as viewerParsers from '../parsers/viewer';\nimport { parseVideoFromHtml } from '../parsers/video';\nimport { parseHubListing } from '../parsers/listing';\nimport { ListingsAPI } from './index';\n\nconst ABS_URL = /^https?:\\/\\//i;\n\nfunction absolutize(u: string, base: string) {\n if (!u) return '';\n if (ABS_URL.test(u)) return u;\n if (u.startsWith('//')) return 'https:' + u;\n if (u.startsWith('/')) return base.replace(/\\/+$/, '') + u;\n return base.replace(/\\/+$/, '') + '/' + u.replace(/^\\/+/, '');\n}\n\nfunction buildViewerUrl(base: string, urlOrSlug: string) {\n if (ABS_URL.test(urlOrSlug)) return urlOrSlug;\n if (urlOrSlug.startsWith('/')) return base.replace(/\\/+$/, '') + urlOrSlug;\n return base.replace(/\\/+$/, '') + '/' + urlOrSlug.replace(/^\\/+/, '');\n}\n\nasync function fetchHtml(http: HttpClient, url: string): Promise<string> {\n const anyHttp = http as any;\n\n if (typeof anyHttp.getText === 'function') return anyHttp.getText(url);\n if (typeof anyHttp.get === 'function') return anyHttp.get(url) as Promise<string>;\n\n if (typeof anyHttp.text === 'function') return anyHttp.text(url);\n if (typeof anyHttp.fetch === 'function') {\n const r = await anyHttp.fetch(url);\n if (typeof r === 'string') return r;\n if (r && typeof r.text === 'function') return await r.text();\n }\n\n if (typeof fetch === 'function') {\n const r = await fetch(url);\n return await r.text();\n }\n\n throw new Error('HttpClient: no getText/get/text/fetch available');\n}\n\nfunction proxyImgMaybe(u: string, opts?: ResolveOptions): string {\n if (!u) return '';\n return opts?.proxyImage ? opts.proxyImage(u) : u;\n}\nfunction proxyVidMaybe(u: string, opts?: ResolveOptions): string {\n if (!u) return '';\n const proxyVideo = (opts as any)?.proxyVideo as ((url: string) => string) | undefined;\n return proxyVideo ? proxyVideo(u) : proxyImgMaybe(u, opts);\n}\n\nfunction tryParseRichMeta(html: string, baseURL: string, absoluteUrl: string): ViewerMeta {\n const anyParsers = viewerParsers as unknown as {\n parseViewerMeta?: (\n h: string,\n b: string,\n abs: string,\n ) => { meta: ViewerMeta; nodeId: number | null; fieldSys: string | null };\n };\n\n if (typeof anyParsers.parseViewerMeta === 'function') {\n try {\n const { meta } = anyParsers.parseViewerMeta(html, baseURL, absoluteUrl);\n if (!meta.title) {\n const t = extractMeta(html, baseURL).title;\n if (t) (meta as any).title = t;\n }\n return meta;\n } catch {}\n }\n return extractMeta(html, baseURL);\n}\n\nfunction parseImagesWithBackoff(\n html: string,\n baseURL: string,\n): { meta: ViewerMeta; images: ViewerImage[] } {\n const anyParsers = viewerParsers as unknown as {\n parseViewer?: (h: string, b: string) => { meta: ViewerMeta; images: ViewerImage[] };\n default?: (h: string, b: string) => { meta: ViewerMeta; images: ViewerImage[] };\n };\n const candidate = anyParsers.parseViewer ?? anyParsers.default;\n\n if (typeof candidate === 'function') {\n return candidate(html, baseURL);\n }\n\n const images: ViewerImage[] = [];\n const re = /<img[^>]+src=[\"']([^\"']+)[\"'][^>]*>/gi;\n let m: RegExpExecArray | null;\n while ((m = re.exec(html))) {\n const original = absolutize(m[1], baseURL);\n if (!original) continue;\n images.push({ original, medium: original } as ViewerImage);\n }\n\n const meta = extractMeta(html, baseURL);\n return { meta, images };\n}\n\nfunction hasViewerClues(html: string): boolean {\n const hasJuicebox =\n /juicebox/i.test(html) || /\\/juicebox\\/xml\\/field\\/node\\/\\d+\\/[a-z0-9_]+\\/full/i.test(html);\n const hasFieldNode = /id=[\"']field--node--\\d+--[a-z0-9_-]+--full[\"']/i.test(html);\n const hasJbStyles = /styles\\/juicebox_(?:large|medium|small)\\//i.test(html);\n const hasNodeBody = /<body[^>]+class=[\"'][^\"']*\\bnode\\b[^\"']*[\"']/i.test(html);\n const hasGalleryField = /field-name-(?:field_)?(?:pictures|images|image|post_pictures)\\b/i.test(\n html,\n );\n return hasJuicebox || hasFieldNode || hasJbStyles || hasNodeBody || hasGalleryField;\n}\n\nexport const ViewerAPI = {\n async resolveViewer(\n http: HttpClient,\n baseURL: string,\n urlOrSlug: string,\n opts: ResolveOptions = {},\n ): Promise<ViewerResult> {\n const url = buildViewerUrl(baseURL, urlOrSlug);\n const html = await fetchHtml(http, url);\n\n const parsedVideo = parseVideoFromHtml(html, baseURL);\n if (parsedVideo && parsedVideo.sources?.length) {\n const meta = tryParseRichMeta(html, baseURL, url);\n return {\n kind: 'video',\n meta,\n video: {\n poster: parsedVideo.poster ? proxyImgMaybe(parsedVideo.poster, opts) : undefined,\n sources: parsedVideo.sources.map((s) => ({\n ...s,\n proxied: proxyVidMaybe(s.url, opts),\n })),\n },\n };\n }\n\n if (hasViewerClues(html)) {\n const imgRes = parseImagesWithBackoff(html, baseURL);\n const images: ViewerImage[] = (imgRes.images || []).map((im: ViewerImage) => {\n const preferred =\n im.original ||\n (im as any).large ||\n (im as any).medium ||\n (im as any).small ||\n (im as any).thumb ||\n '';\n return { ...im, proxied: proxyImgMaybe(preferred, opts) };\n });\n return {\n kind: 'images',\n meta: imgRes.meta,\n images,\n };\n }\n\n return { kind: 'other', meta: extractMeta(html, baseURL) };\n },\n\n async resolveSmart(\n http: HttpClient,\n baseURL: string,\n urlOrSlug: string,\n opts: ResolveOptions = {},\n ): Promise<ResolvedRoute> {\n const url = buildViewerUrl(baseURL, urlOrSlug);\n const u = new URL(url);\n const path = u.pathname;\n\n const html = await fetchHtml(http, url);\n\n const parsedVideo = parseVideoFromHtml(html, baseURL);\n if (parsedVideo && parsedVideo.sources?.length) {\n const meta = tryParseRichMeta(html, baseURL, url);\n const viewer: ViewerResult = {\n kind: 'video',\n meta,\n video: {\n poster: parsedVideo.poster ? proxyImgMaybe(parsedVideo.poster, opts) : undefined,\n sources: parsedVideo.sources.map((s) => ({\n ...s,\n proxied: proxyVidMaybe(s.url, opts),\n })),\n },\n };\n\n let recommendations: ListingItem[] | undefined;\n try {\n const recPage = parseHubListing(html, baseURL, 0);\n if (recPage?.items?.length) {\n recommendations = recPage.items.map((it) => ({\n ...it,\n proxiedThumb: it.thumb ? proxyImgMaybe(it.thumb, opts) : undefined,\n }));\n }\n } catch {}\n\n const data: ViewerPayload = { absoluteUrl: url, path, viewer };\n (data as any).recommendations = recommendations;\n return { route: 'viewer', data: data as any };\n }\n\n if (hasViewerClues(html)) {\n const { meta, images } = parseImagesWithBackoff(html, baseURL);\n const mapped: ViewerImage[] = (images || []).map((im: ViewerImage) => {\n const preferred =\n im.original ||\n (im as any).large ||\n (im as any).medium ||\n (im as any).small ||\n (im as any).thumb ||\n '';\n return { ...im, proxied: proxyImgMaybe(preferred, opts) };\n });\n\n const viewer: ViewerResult = { kind: 'images', meta, images: mapped };\n\n let recommendations: ListingItem[] | undefined;\n try {\n const recPage = parseHubListing(html, baseURL, 0);\n if (recPage?.items?.length) {\n recommendations = recPage.items.map((it) => ({\n ...it,\n proxiedThumb: it.thumb ? proxyImgMaybe(it.thumb, opts) : undefined,\n }));\n }\n } catch {}\n\n const data: ViewerPayload = { absoluteUrl: url, path, viewer };\n (data as any).recommendations = recommendations;\n return { route: 'viewer', data: data as any };\n }\n\n const page: Page<ListingItem> = await ListingsAPI.listByPath(http, baseURL, path, 0);\n return { route: 'listing', data: { ...page, absoluteUrl: url, path } as any };\n },\n};\n\nfunction extractText(html: string, re: RegExp) {\n const m = html.match(re);\n return m ? m[1].replace(/<[^>]*>/g, '').trim() : '';\n}\n\nfunction grabLinksByLabel(html: string, baseURL: string, label: string) {\n const esc = label.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n const reLbl = new RegExp(\n `<(?:h3|div)[^>]*class=[\"'][^\"']*field-label[^\"']*[\"'][^>]*>\\\\s*${esc}\\\\s*:?\\\\s*<\\\\/[^>]+>`,\n 'i',\n );\n const idx = html.search(reLbl);\n if (idx < 0) return [];\n\n const open = html.lastIndexOf('<div', idx);\n const close = html.indexOf('</div>', idx);\n if (open < 0 || close < 0) return [];\n\n const block = html.slice(open, close + 6);\n const out: Array<{ title: string; url: string }> = [];\n const reA = /<a[^>]*href=[\"']([^\"']+)[\"'][^>]*>([\\s\\S]*?)<\\/a>/gi;\n for (let m: RegExpExecArray | null; (m = reA.exec(block)); ) {\n out.push({\n title: m[2].replace(/<[^>]*>/g, '').trim(),\n url: absolutize(m[1], baseURL),\n });\n }\n return out;\n}\n\nfunction grabLinks(html: string, blockRe: RegExp, baseURL: string) {\n const alt = `(?:${blockRe.source})`;\n const reDiv = new RegExp(\n `<div[^>]*class=[\"'][^\"']*\\\\bfield\\\\b[^\"']*\\\\b${alt}\\\\b[^\"']*[\"'][^>]*>([\\\\s\\\\S]*?)<\\\\/div>`,\n 'i',\n );\n\n const m = reDiv.exec(html);\n if (!m) return [];\n const block = m[1];\n\n const arr: Array<{ title: string; url: string }> = [];\n const reA = /<a[^>]*href=[\"']([^\"']+)[\"'][^>]*>([\\s\\S]*?)<\\/a>/gi;\n for (let x: RegExpExecArray | null; (x = reA.exec(block)); ) {\n arr.push({\n title: x[2].replace(/<[^>]*>/g, '').trim(),\n url: absolutize(x[1], baseURL),\n });\n }\n return arr;\n}\n\nfunction extractMeta(html: string, baseURL: string): ViewerMeta {\n const title =\n extractText(html, /<h1[^>]*id=[\"']page-title[\"'][^>]*>([\\s\\S]*?)<\\/h1>/i) ||\n extractText(html, /<title>([\\s\\S]*?)<\\/title>/i);\n\n const breadcrumbs: Array<{ title: string; url: string }> = [];\n const reCrumb =\n /<span[^>]*typeof=[\"']v:Breadcrumb[\"'][^>]*>[\\s\\S]*?<a[^>]*href=[\"']([^\"']+)[\"'][^>]*>([\\s\\S]*?)<\\/a>[\\s\\S]*?<\\/span>/gi;\n for (let m: RegExpExecArray | null; (m = reCrumb.exec(html)); ) {\n breadcrumbs.push({\n title: m[2].replace(/<[^>]*>/g, '').trim(),\n url: absolutize(m[1], baseURL),\n });\n }\n\n let authors =\n grabLinks(\n html,\n /field-name-field-vd-authors|field-name-field-authors|field-name-field-au/i,\n baseURL,\n ) || [];\n if (authors.length === 0) {\n authors = grabLinksByLabel(html, baseURL, 'Author');\n }\n\n const sections = grabLinks(\n html,\n /field-name-field-vd-group|field-name-field-group|field-name-field-sections/i,\n baseURL,\n );\n const tags =\n grabLinks(html, /field-name-field-(?:vd-)?tags|field-name-field-category/i, baseURL) || [];\n\n const meta = {\n title,\n breadcrumbs,\n authors,\n sections,\n tags,\n nodeId: '' as any,\n fieldSys: {} as any,\n kind: 'viewer',\n } as unknown as ViewerMeta;\n\n return meta;\n}\n","// src/client-core.ts\r\nimport { HttpClient, HttpClientOptions } from './http';\r\n\r\nimport {\r\n ListingItem,\r\n Page,\r\n Post,\r\n UpdatesResult,\r\n ViewName,\r\n MultpornUpdatesParams,\r\n AlphabetSection,\r\n AlphabetLetter,\r\n ViewerResult,\r\n ResolveOptions,\r\n ResolvedRoute,\r\n ListingQuery,\r\n} from './types';\r\n\r\nimport { SearchAPI, UpdatesAPI, PostsAPI, ListingsAPI, AlphabetAPI, ViewerAPI } from './api/index';\r\n\r\n// Удобные ре-экспорты парсеров — чтобы можно было использовать напрямую из корня\r\nexport { parseHubListing as parseListing } from './parsers/listing';\r\nexport { parsePost } from './parsers/post';\r\n\r\nexport type MultpornClientOptions = Omit<HttpClientOptions, 'baseURL'> & {\r\n baseURL?: string;\r\n};\r\n\r\nexport class MultpornClient {\r\n private http: HttpClient;\r\n private baseURL: string;\r\n\r\n constructor(opts: MultpornClientOptions = {}) {\r\n this.baseURL = (opts.baseURL ?? 'https://multporn.net').replace(/\\/+$/, '');\r\n this.http = new HttpClient({ ...opts, baseURL: this.baseURL });\r\n }\r\n\r\n // -------- Listing\r\n latest(page = 0, params?: ListingQuery): Promise<Page<ListingItem>> {\r\n return ListingsAPI.latest(this.http, this.baseURL, page, params);\r\n }\r\n\r\n listByPath(\r\n path: string,\r\n page = 0,\r\n params?: ListingQuery & { letter?: string },\r\n ): Promise<Page<ListingItem>> {\r\n return ListingsAPI.listByPath(this.http, this.baseURL, path, page, params);\r\n }\r\n\r\n // -------- Search\r\n search(query: string, page = 0): Promise<Page<ListingItem>> {\r\n return SearchAPI.search(this.http, this.baseURL, query, page);\r\n }\r\n\r\n // -------- Post\r\n getPost(urlOrSlug: string): Promise<Post> {\r\n return PostsAPI.getPost(this.http, this.baseURL, urlOrSlug);\r\n }\r\n\r\n // -------- Viewer / Resolver\r\n /**\r\n * Жёсткое разрешение ссылки в ViewerResult (images/video/other) без маршрутизации.\r\n */\r\n resolve(urlOrSlug: string, opts: ResolveOptions = {}): Promise<ViewerResult> {\r\n return ViewerAPI.resolveViewer(this.http, this.baseURL, urlOrSlug, opts);\r\n }\r\n\r\n /**\r\n * Умный резолвер: возвращает либо listing-страницу (хаб), либо viewer-пейлоад (пост).\r\n */\r\n resolveSmart(urlOrSlug: string, opts: ResolveOptions = {}): Promise<ResolvedRoute> {\r\n return ViewerAPI.resolveSmart(this.http, this.baseURL, urlOrSlug, opts);\r\n }\r\n\r\n // -------- Updates (Drupal / jcarousel/ajax/views)\r\n updates(params: MultpornUpdatesParams = {}): Promise<UpdatesResult> {\r\n return UpdatesAPI.updates(this.http, this.baseURL, params);\r\n }\r\n\r\n viewUpdates(\r\n viewName: ViewName,\r\n params?: Omit<MultpornUpdatesParams, 'view_name'>,\r\n ): Promise<UpdatesResult> {\r\n return this.updates({ ...(params ?? {}), view_name: viewName });\r\n }\r\n\r\n // Шорткаты для популярных view_name — выше остаётся общий метод updates()\r\n updatesNewMini(p?: Omit<MultpornUpdatesParams, 'view_name'>) {\r\n return UpdatesAPI.updates(this.http, this.baseURL, { ...(p ?? {}), view_name: 'new_mini' });\r\n }\r\n\r\n userUploadFront(p?: Omit<MultpornUpdatesParams, 'view_name'>) {\r\n return UpdatesAPI.updates(this.http, this.baseURL, {\r\n ...(p ?? {}),\r\n view_name: 'user_upload_front',\r\n });\r\n }\r\n\r\n updatedManga(p?: Omit<MultpornUpdatesParams, 'view_name'>) {\r\n return UpdatesAPI.updates(this.http, this.baseURL, {\r\n ...(p ?? {}),\r\n view_name: 'updated_manga',\r\n });\r\n }\r\n\r\n updatedMangaPromoted(p?: Omit<MultpornUpdatesParams, 'view_name'>) {\r\n return UpdatesAPI.updates(this.http, this.baseURL, {\r\n ...(p ?? {}),\r\n view_name: 'updated_manga_promoted',\r\n });\r\n }\r\n\r\n updatedGames(p?: Omit<MultpornUpdatesParams, 'view_name'>) {\r\n return UpdatesAPI.updates(this.http, this.baseURL, {\r\n ...(p ?? {}),\r\n view_name: 'updated_games',\r\n });\r\n }\r\n\r\n randomTopComics(p?: Omit<MultpornUpdatesParams, 'view_name'>) {\r\n return UpdatesAPI.updates(this.http, this.baseURL, {\r\n ...(p ?? {}),\r\n view_name: 'random_top_comics',\r\n });\r\n }\r\n\r\n topRandomCharacters(p?: Omit<MultpornUpdatesParams, 'view_name'>) {\r\n return UpdatesAPI.updates(this.http, this.baseURL, {\r\n ...(p ?? {}),\r\n view_name: 'top_random_characters',\r\n });\r\n }\r\n\r\n // -------- Alphabet\r\n alphabetLetters(section: AlphabetSection): Promise<AlphabetLetter[]> {\r\n return AlphabetAPI.alphabetLetters(this.http, this.baseURL, section);\r\n }\r\n\r\n alphabet(section: AlphabetSection, letter: string, page = 0): Promise<Page<ListingItem>> {\r\n return AlphabetAPI.alphabetItems(this.http, this.baseURL, section, letter, page);\r\n }\r\n}\r\n\r\nexport { MultpornClient as MultpornClientCore };\r\n\r\nexport default MultpornClient;\r\n","import { createCheerioDom } from './dom/cheerio';\r\nimport { MultpornClientCore } from './client-core';\r\n\r\nexport class MultpornClient extends MultpornClientCore {\r\n constructor(opts?: Partial<ConstructorParameters<typeof MultpornClientCore>[0]>) {\r\n super({ ...(opts || {}), dom: createCheerioDom() } as any);\r\n }\r\n}\r\n\r\nexport * from './types';\r\nexport * from './http';\r\n"]}
|