@prosopo/provider 5.3.0 → 5.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. package/.turbo/turbo-build$colon$cjs.log +10 -10
  2. package/.turbo/turbo-build$colon$tsc.log +25 -25
  3. package/.turbo/turbo-build.log +11 -11
  4. package/CHANGELOG.md +28 -0
  5. package/dist/api/captcha/getFrictionlessCaptchaChallenge/handler.d.ts.map +1 -1
  6. package/dist/api/captcha/getFrictionlessCaptchaChallenge/handler.js +2 -1
  7. package/dist/api/captcha/getFrictionlessCaptchaChallenge/handler.js.map +1 -1
  8. package/dist/api/captcha/submitPoWCaptchaSolution.d.ts.map +1 -1
  9. package/dist/api/captcha/submitPoWCaptchaSolution.js +1 -1
  10. package/dist/api/captcha/submitPoWCaptchaSolution.js.map +1 -1
  11. package/dist/api/ja4.d.ts.map +1 -1
  12. package/dist/api/ja4.js +14 -147
  13. package/dist/api/ja4.js.map +1 -1
  14. package/dist/cjs/api/captcha/getFrictionlessCaptchaChallenge/handler.cjs +2 -1
  15. package/dist/cjs/api/captcha/submitPoWCaptchaSolution.cjs +1 -1
  16. package/dist/cjs/api/ja4.cjs +13 -147
  17. package/dist/cjs/tasks/captchaManager.cjs +4 -2
  18. package/dist/cjs/tasks/detection/decodePayload.cjs +985 -1197
  19. package/dist/cjs/tasks/detection/decodePayload.js +1 -1
  20. package/dist/cjs/tasks/detection/getBotScore.cjs +2 -0
  21. package/dist/cjs/tasks/frictionless/frictionlessTasks.cjs +13 -5
  22. package/dist/cjs/tasks/imgCaptcha/imgCaptchaTasksUtils.cjs +19 -5
  23. package/dist/tasks/captchaManager.d.ts.map +1 -1
  24. package/dist/tasks/captchaManager.js +4 -2
  25. package/dist/tasks/captchaManager.js.map +1 -1
  26. package/dist/tasks/detection/decodePayload.d.ts +2 -2
  27. package/dist/tasks/detection/decodePayload.d.ts.map +1 -1
  28. package/dist/tasks/detection/decodePayload.js +1 -1
  29. package/dist/tasks/detection/decodePayload.js.map +1 -1
  30. package/dist/tasks/detection/getBotScore.d.ts +2 -0
  31. package/dist/tasks/detection/getBotScore.d.ts.map +1 -1
  32. package/dist/tasks/detection/getBotScore.js +4 -2
  33. package/dist/tasks/detection/getBotScore.js.map +1 -1
  34. package/dist/tasks/frictionless/frictionlessTasks.d.ts +2 -1
  35. package/dist/tasks/frictionless/frictionlessTasks.d.ts.map +1 -1
  36. package/dist/tasks/frictionless/frictionlessTasks.js +13 -5
  37. package/dist/tasks/frictionless/frictionlessTasks.js.map +1 -1
  38. package/dist/tasks/imgCaptcha/imgCaptchaTasksUtils.d.ts.map +1 -1
  39. package/dist/tasks/imgCaptcha/imgCaptchaTasksUtils.js +21 -6
  40. package/dist/tasks/imgCaptcha/imgCaptchaTasksUtils.js.map +1 -1
  41. package/dist/tests/unit/tasks/captchaManager.unit.test.js +33 -0
  42. package/dist/tests/unit/tasks/captchaManager.unit.test.js.map +1 -1
  43. package/dist/tests/unit/tasks/detection/getBotScore.unit.test.js +19 -0
  44. package/dist/tests/unit/tasks/detection/getBotScore.unit.test.js.map +1 -1
  45. package/dist/tests/unit/tasks/imgCaptcha/imgCaptchaTasksUtils.unit.test.js +30 -54
  46. package/dist/tests/unit/tasks/imgCaptcha/imgCaptchaTasksUtils.unit.test.js.map +1 -1
  47. package/package.json +16 -14
@@ -1 +1 @@
1
- {"version":3,"file":"ja4.js","sourceRoot":"","sources":["../../src/api/ja4.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,MAAM,oBAAoB,GAAG,CAAC,CAAC;AAC/B,MAAM,uBAAuB,GAAG,CAAC,CAAC;AAClC,MAAM,qBAAqB,GAAG,IAAI,CAAC;AACnC,MAAM,sBAAsB,GAAG,IAAI,CAAC;AAEpC,MAAM,eAAe,GAAG,MAAM,CAAC;AAC/B,MAAM,wBAAwB,GAAG,MAAM,CAAC;AACxC,MAAM,QAAQ,GAAG,MAAM,CAAC;AACxB,MAAM,sBAAsB,GAAG,MAAM,CAAC;AAItC,SAAS,QAAQ,CAAC,EAAU;IAC3B,OAAO,CAAC,EAAE,GAAG,MAAM,CAAC,KAAK,MAAM,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC;AAC5D,CAAC;AAED,SAAS,MAAM,CAAC,KAAa;IAC5B,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AACtE,CAAC;AAED,SAAS,YAAY,CAAC,GAAa;IAClC,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACpE,CAAC;AAGD,SAAS,QAAQ,CAAC,CAAS;IAC1B,IACC,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC;QACxB,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC;QACxB,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,EACvB,CAAC;QACF,OAAO,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IAC/B,CAAC;IACD,OAAO,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AACxC,CAAC;AAID,SAAS,aAAa,CAAC,QAAgB;IACtC,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IAC1E,MAAM,IAAI,GACT,QAAQ,CAAC,MAAM,GAAG,CAAC;QAClB,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACnD,CAAC,CAAC,GAAG,CAAC;IACR,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AACtB,CAAC;AAED,SAAS,aAAa,CAAC,OAAe;IACrC,QAAQ,OAAO,EAAE,CAAC;QACjB,KAAK,MAAM;YACV,OAAO,IAAI,CAAC;QACb,KAAK,MAAM;YACV,OAAO,IAAI,CAAC;QACb,KAAK,MAAM;YACV,OAAO,IAAI,CAAC;QACb,KAAK,MAAM;YACV,OAAO,IAAI,CAAC;QACb;YACC,OAAO,IAAI,CAAC;IACd,CAAC;AACF,CAAC;AAED,MAAM,OAAO,aAAc,SAAQ,KAAK;IACvC,YAAY,OAAe;QAC1B,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,eAAe,CAAC;IAC7B,CAAC;CACD;AAoBD,MAAM,UAAU,YAAY,CAAC,IAAY;IACxC,IAAI,MAAM,GAAG,CAAC,CAAC;IAEf,IAAI,IAAI,CAAC,MAAM,GAAG,oBAAoB,GAAG,uBAAuB,EAAE,CAAC;QAClE,MAAM,IAAI,aAAa,CAAC,uBAAuB,CAAC,CAAC;IAClD,CAAC;IAGD,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IAC1C,MAAM,IAAI,CAAC,CAAC;IACZ,IAAI,UAAU,KAAK,qBAAqB,EAAE,CAAC;QAC1C,MAAM,IAAI,aAAa,CACtB,0BAA0B,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CACnD,CAAC;IACH,CAAC;IACD,MAAM,IAAI,CAAC,CAAC;IACZ,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;IAC5C,MAAM,IAAI,CAAC,CAAC;IAEZ,IAAI,IAAI,CAAC,MAAM,GAAG,oBAAoB,GAAG,SAAS,EAAE,CAAC;QACpD,MAAM,IAAI,aAAa,CAAC,8BAA8B,CAAC,CAAC;IACzD,CAAC;IAGD,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,oBAAoB,GAAG,SAAS,CAAC,CAAC;IAG1D,IAAI,IAAI,CAAC,MAAM,GAAG,oBAAoB,GAAG,uBAAuB,EAAE,CAAC;QAClE,MAAM,IAAI,aAAa,CAAC,uCAAuC,CAAC,CAAC;IAClE,CAAC;IAGD,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IACvC,MAAM,IAAI,CAAC,CAAC;IACZ,IAAI,OAAO,KAAK,sBAAsB,EAAE,CAAC;QACxC,MAAM,IAAI,aAAa,CACtB,uCAAuC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAC7D,CAAC;IACH,CAAC;IACD,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAC1C,MAAM,IAAI,CAAC,CAAC;IACZ,IAAI,IAAI,CAAC,MAAM,GAAG,MAAM,GAAG,MAAM,EAAE,CAAC;QACnC,MAAM,IAAI,aAAa,CAAC,yCAAyC,CAAC,CAAC;IACpE,CAAC;IAGD,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC;IAGzC,IAAI,IAAI,CAAC,MAAM,GAAG,MAAM,GAAG,EAAE,EAAE,CAAC;QAC/B,MAAM,IAAI,aAAa,CAAC,4BAA4B,CAAC,CAAC;IACvD,CAAC;IAED,IAAI,aAAa,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;IAC9C,MAAM,IAAI,CAAC,CAAC;IACZ,MAAM,IAAI,EAAE,CAAC;IAEb,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IAC5C,MAAM,IAAI,CAAC,CAAC;IACZ,IAAI,IAAI,CAAC,MAAM,GAAG,MAAM,GAAG,YAAY,EAAE,CAAC;QACzC,MAAM,IAAI,aAAa,CAAC,yBAAyB,CAAC,CAAC;IACpD,CAAC;IACD,MAAM,IAAI,YAAY,CAAC;IAEvB,IAAI,IAAI,CAAC,MAAM,GAAG,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9B,MAAM,IAAI,aAAa,CAAC,mCAAmC,CAAC,CAAC;IAC9D,CAAC;IACD,MAAM,eAAe,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;IAClD,MAAM,IAAI,CAAC,CAAC;IAEZ,IAAI,IAAI,CAAC,MAAM,GAAG,MAAM,GAAG,eAAe,EAAE,CAAC;QAC5C,MAAM,IAAI,aAAa,CAAC,4BAA4B,CAAC,CAAC;IACvD,CAAC;IACD,IAAI,eAAe,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;QAC/B,MAAM,IAAI,aAAa,CAAC,6CAA6C,CAAC,CAAC;IACxE,CAAC;IACD,MAAM,YAAY,GAAa,EAAE,CAAC;IAClC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,eAAe,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QAC7C,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;IAClD,CAAC;IACD,MAAM,IAAI,eAAe,CAAC;IAE1B,IAAI,IAAI,CAAC,MAAM,GAAG,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9B,MAAM,IAAI,aAAa,CAAC,kCAAkC,CAAC,CAAC;IAC7D,CAAC;IACD,MAAM,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IAC9C,MAAM,IAAI,CAAC,CAAC;IACZ,IAAI,IAAI,CAAC,MAAM,GAAG,MAAM,GAAG,cAAc,EAAE,CAAC;QAC3C,MAAM,IAAI,aAAa,CAAC,uCAAuC,CAAC,CAAC;IAClE,CAAC;IACD,MAAM,IAAI,cAAc,CAAC;IAEzB,IAAI,IAAI,CAAC,MAAM,GAAG,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9B,MAAM,IAAI,aAAa,CAAC,gCAAgC,CAAC,CAAC;IAC3D,CAAC;IACD,MAAM,aAAa,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;IAChD,MAAM,IAAI,CAAC,CAAC;IAEZ,IAAI,IAAI,CAAC,MAAM,GAAG,MAAM,GAAG,aAAa,EAAE,CAAC;QAC1C,MAAM,IAAI,aAAa,CAAC,yBAAyB,CAAC,CAAC;IACpD,CAAC;IAED,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,MAAM,aAAa,GAAa,EAAE,CAAC;IACnC,MAAM,aAAa,GAAa,EAAE,CAAC;IAEnC,IAAI,SAAS,GAAG,MAAM,CAAC;IACvB,MAAM,MAAM,GAAG,MAAM,GAAG,aAAa,CAAC;IAEtC,OAAO,SAAS,GAAG,CAAC,IAAI,MAAM,EAAE,CAAC;QAChC,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;QAC3C,SAAS,IAAI,CAAC,CAAC;QACf,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;QAC5C,SAAS,IAAI,CAAC,CAAC;QACf,IAAI,SAAS,GAAG,MAAM,GAAG,MAAM;YAAE,MAAM;QACvC,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,SAAS,GAAG,MAAM,CAAC,CAAC;QAC7D,SAAS,IAAI,MAAM,CAAC;QAEpB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAEnB,IAAI,KAAK,KAAK,sBAAsB,EAAE,CAAC;YAGtC,IAAI,OAAO,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;gBACzB,MAAM,OAAO,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;gBACrC,IAAI,IAAI,GAAG,CAAC,CAAC;gBACb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,OAAO,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;oBACpE,MAAM,CAAC,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;oBAClC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI;wBAAE,IAAI,GAAG,CAAC,CAAC;gBACxC,CAAC;gBACD,IAAI,IAAI,GAAG,CAAC;oBAAE,aAAa,GAAG,IAAI,CAAC;YACpC,CAAC;QACF,CAAC;aAAM,IAAI,KAAK,KAAK,wBAAwB,EAAE,CAAC;YAE/C,IAAI,OAAO,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;gBACzB,MAAM,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;gBAGvC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;oBACtE,MAAM,GAAG,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;oBACpC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;wBAAE,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBAC7C,CAAC;YACF,CAAC;QACF,CAAC;aAAM,IAAI,KAAK,KAAK,QAAQ,EAAE,CAAC;YAI/B,IAAI,OAAO,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;gBACzB,MAAM,OAAO,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;gBACxC,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC;gBACtD,IAAI,OAAO,GAAG,CAAC,CAAC;gBAChB,OAAO,OAAO,GAAG,OAAO,EAAE,CAAC;oBAC1B,MAAM,QAAQ,GAAG,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;oBAC5C,OAAO,IAAI,CAAC,CAAC;oBACb,IAAI,OAAO,GAAG,QAAQ,GAAG,OAAO;wBAAE,MAAM;oBACxC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC;oBAClE,OAAO,IAAI,QAAQ,CAAC;gBACrB,CAAC;YACF,CAAC;QACF,CAAC;IACF,CAAC;IAGD,MAAM,UAAU,GAAG,aAAa,CAAC,aAAa,CAAC,CAAC;IAIhD,MAAM,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;IACzD,MAAM,SAAS,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;IACnC,MAAM,CAAC,SAAS,EAAE,QAAQ,CAAC,GAAG,SAAS;QACtC,CAAC,CAAC,aAAa,CAAC,SAAS,CAAC;QAC1B,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAEd,MAAM,gBAAgB,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IAClE,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IAEzD,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,gBAAgB,CAAC,MAAM,CAAC;SACvD,QAAQ,EAAE;SACV,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACnB,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,aAAa,CAAC,MAAM,CAAC;SACjD,QAAQ,EAAE;SACV,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAEnB,MAAM,UAAU,GAAG,IAAI,UAAU,GAAG,GAAG,GAAG,WAAW,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,EAAE,CAAC;IAG1F,MAAM,aAAa,GAAG,CAAC,GAAG,gBAAgB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAClE,MAAM,UAAU,GAAG,MAAM,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC,CAAC;IAIvD,MAAM,YAAY,GAAG,aAAa,CAAC,MAAM,CACxC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,eAAe,IAAI,CAAC,KAAK,QAAQ,CAC9C,CAAC;IACF,MAAM,UAAU,GAAG,CAAC,GAAG,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC3D,MAAM,MAAM,GAAG,YAAY,CAAC,UAAU,CAAC,CAAC;IACxC,MAAM,SAAS,GAAG,YAAY,CAAC,aAAa,CAAC,CAAC;IAC9C,MAAM,YAAY,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,SAAS,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;IAC9E,MAAM,OAAO,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC;IAErC,OAAO,GAAG,UAAU,IAAI,UAAU,IAAI,OAAO,EAAE,CAAC;AACjD,CAAC"}
1
+ {"version":3,"file":"ja4.js","sourceRoot":"","sources":["../../src/api/ja4.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAU5C,MAAM,GAAG,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC3C,MAAM,eAAe,GAAoB,CAAC,GAAG,EAAE;IAC9C,IAAI,CAAC;QACJ,OAAO,GAAG,CAAC,qBAAqB,CAAoB,CAAC;IACtD,CAAC;IAAC,MAAM,CAAC;QAIR,OAAO,GAAG,CAAC,2BAA2B,CAAoB,CAAC;IAC5D,CAAC;AACF,CAAC,CAAC,EAAE,CAAC;AACL,MAAM,kBAAkB,GAAG,eAAe,CAAC,YAAY,CAAC;AAExD,MAAM,OAAO,aAAc,SAAQ,KAAK;IACvC,YAAY,OAAe;QAC1B,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,eAAe,CAAC;IAC7B,CAAC;CACD;AAQD,MAAM,UAAU,YAAY,CAAC,IAAY;IACxC,IAAI,CAAC;QACJ,OAAO,kBAAkB,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACd,MAAM,IAAI,aAAa,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;IAC3E,CAAC;AACF,CAAC"}
@@ -231,7 +231,7 @@ var handler_default = (env, userAccessRulesStorage) => async (req, res, next) =>
231
231
  tasks.frictionlessManager.isValidRequest(clientRecord, _prosopo_types.CaptchaType.frictionless, env),
232
232
  tasks.frictionlessManager.getPrioritisedAccessPolicies(userAccessRulesStorage, dapp, userScope)
233
233
  ]);
234
- const { baseBotScore: rawBaseBotScore, timestamp: rawTimestamp, userId: rawUserId, userAgent: rawUserAgent, webView, iFrame, decryptedHeadHash, decryptionFailed: rawDecryptionFailed, triggeredDetectors, shadowDomPenalty, entropyMathRandomFingerprint, entropyCryptoFingerprint, entropyWallClockOffsetMs, entropyMathRandomFirst, g, sw, md, bn, fs, bundleId } = decryptedPayload;
234
+ const { baseBotScore: rawBaseBotScore, timestamp: rawTimestamp, userId: rawUserId, userAgent: rawUserAgent, webView, iFrame, decryptedHeadHash, decryptionFailed: rawDecryptionFailed, triggeredDetectors, shadowDomPenalty, entropyMathRandomFingerprint, entropyCryptoFingerprint, entropyWallClockOffsetMs, entropyMathRandomFirst, g, sw, md, bn, fs, s, bundleId } = decryptedPayload;
235
235
  const detectorOverride = process.env.PROSOPO_TEST_FRICTIONLESS_DETECTOR_OVERRIDE === "1";
236
236
  const baseBotScore = detectorOverride ? 0 : rawBaseBotScore;
237
237
  const timestamp = detectorOverride ? Date.now() : rawTimestamp;
@@ -296,6 +296,7 @@ var handler_default = (env, userAccessRulesStorage) => async (req, res, next) =>
296
296
  ...md !== void 0 && { md },
297
297
  ...bn !== void 0 && { bn },
298
298
  ...fs !== void 0 && { fs },
299
+ ...s !== void 0 && { s },
299
300
  ...req.tcpToChelloUs !== void 0 && { tcpToChelloUs: req.tcpToChelloUs },
300
301
  ...req.chelloToHandshakeUs !== void 0 && { chelloToHandshakeUs: req.chelloToHandshakeUs }
301
302
  });
@@ -133,7 +133,7 @@ var buildEscalation = async (tasks, result, challenge, handshakeTiming) => {
133
133
  const routed = result.routingOutput;
134
134
  const escalatedType = require_puzzleRenderer.downgradePuzzleIfUnavailable(routed.captchaType);
135
135
  const selectionReason = routed.reason ?? originSession.reason;
136
- const newSession = await tasks.frictionlessManager.createSession(originSession.token, originSession.score, originSession.threshold, originSession.scoreComponents, originSession.ipAddress, escalatedType, originSession.siteKey ?? powRecord.dappAccount, escalatedType === _prosopo_types.CaptchaType.image ? routed.solvedImagesCount ?? originSession.solvedImagesCount : void 0, void 0, originSession.userSitekeyIpHash, originSession.webView, originSession.iFrame, originSession.decryptedHeadHash, selectionReason, void 0, void 0, originSession.ipInfo, originSession.headers, originSession.mode, originSession.simdReadings, originSession.entropyMathRandomFingerprint, originSession.entropyCryptoFingerprint, originSession.entropyWallClockOffsetMs, originSession.entropyMathRandomFirst, originSession.bundleId, originSession.currentUrl, handshakeTiming?.tcpToChelloUs, handshakeTiming?.chelloToHandshakeUs, true, originSession.iframeUrl, originSession.isProtect, originSession.sessionId, originSession.g, void 0, originSession.i, originSession.sw, originSession.md, originSession.bn, originSession.fs);
136
+ const newSession = await tasks.frictionlessManager.createSession(originSession.token, originSession.score, originSession.threshold, originSession.scoreComponents, originSession.ipAddress, escalatedType, originSession.siteKey ?? powRecord.dappAccount, escalatedType === _prosopo_types.CaptchaType.image ? routed.solvedImagesCount ?? originSession.solvedImagesCount : void 0, void 0, originSession.userSitekeyIpHash, originSession.webView, originSession.iFrame, originSession.decryptedHeadHash, selectionReason, void 0, void 0, originSession.ipInfo, originSession.headers, originSession.mode, originSession.simdReadings, originSession.entropyMathRandomFingerprint, originSession.entropyCryptoFingerprint, originSession.entropyWallClockOffsetMs, originSession.entropyMathRandomFirst, originSession.bundleId, originSession.currentUrl, handshakeTiming?.tcpToChelloUs, handshakeTiming?.chelloToHandshakeUs, true, originSession.iframeUrl, originSession.isProtect, originSession.sessionId, originSession.g, void 0, originSession.i, originSession.sw, originSession.md, originSession.bn, originSession.fs, originSession.s);
137
137
  if (tasks.writeQueue) await tasks.writeQueue.cacheSessionEscalation(powRecord.sessionId, newSession.sessionId);
138
138
  return {
139
139
  captchaType: escalatedType,
@@ -1,38 +1,12 @@
1
- let node_crypto = require("node:crypto");
2
1
  //#region src/api/ja4.ts
3
- var RECORD_HEADER_LENGTH = 5;
4
- var HANDSHAKE_HEADER_LENGTH = 4;
5
- var HANDSHAKE_RECORD_TYPE = 22;
6
- var HANDSHAKE_MESSAGE_TYPE = 1;
7
- var EXT_SERVER_NAME = 0;
8
- var EXT_SIGNATURE_ALGORITHMS = 13;
9
- var EXT_ALPN = 16;
10
- var EXT_SUPPORTED_VERSIONS = 43;
11
- function isGrease(id) {
12
- return (id & 3855) === 2570 && id >> 8 === (id & 255);
13
- }
14
- function hash12(input) {
15
- return (0, node_crypto.createHash)("sha256").update(input).digest("hex").slice(0, 12);
16
- }
17
- function formatIdList(ids) {
18
- return ids.map((id) => id.toString(16).padStart(4, "0")).join(",");
19
- }
20
- function alpnChar(b) {
21
- if (b >= 48 && b <= 57 || b >= 65 && b <= 90 || b >= 97 && b <= 122) return String.fromCharCode(b);
22
- return b.toString(16).padStart(2, "0");
23
- }
24
- function alpnFirstLast(protocol) {
25
- return [protocol.length > 0 ? alpnChar(protocol.readUInt8(0)) : "0", protocol.length > 1 ? alpnChar(protocol.readUInt8(protocol.length - 1)) : "0"];
26
- }
27
- function tlsVersionStr(version) {
28
- switch (version) {
29
- case 769: return "10";
30
- case 770: return "11";
31
- case 771: return "12";
32
- case 772: return "13";
33
- default: return "00";
2
+ var req = (0, require("node:module").createRequire)(require("url").pathToFileURL(__filename).href);
3
+ var nativeCalculateJa4 = (() => {
4
+ try {
5
+ return req("@prosopo/native-ja4");
6
+ } catch {
7
+ return req("./prosopo-native-ja4.node");
34
8
  }
35
- }
9
+ })().calculateJa4;
36
10
  var Ja4ParseError = class extends Error {
37
11
  constructor(message) {
38
12
  super(message);
@@ -42,123 +16,15 @@ var Ja4ParseError = class extends Error {
42
16
  /**
43
17
  * Compute a JA4 TLS fingerprint from raw ClientHello bytes.
44
18
  *
45
- * Expects the full TLS record:
46
- * 5-byte record header (content_type + version + record_len)
47
- * 4-byte handshake header (msg_type + msg_len)
48
- * ClientHello body
49
- *
50
- * Throws Ja4ParseError for structural failures in the TLS record or handshake
51
- * header (wrong record type, wrong message type, declared lengths exceeding the
52
- * buffer, odd cipher-suite length).
53
- *
54
- * Extension-level malformation (truncated extension body, malformed ALPN
55
- * entries) is handled defensively: parsing stops at the first bad entry and
56
- * a fingerprint is produced from whatever was successfully parsed. This matches
57
- * the Rust reference implementation and avoids turning extension parse errors
58
- * into connection-fingerprinting failures.
19
+ * Delegates to the Rust implementation in @prosopo/native-ja4. Structural
20
+ * TLS parse failures are rethrown as Ja4ParseError.
59
21
  */
60
22
  function calculateJa4(data) {
61
- let offset = 0;
62
- if (data.length < RECORD_HEADER_LENGTH + HANDSHAKE_HEADER_LENGTH) throw new Ja4ParseError("ClientHello too short");
63
- const recordType = data.readUInt8(offset);
64
- offset += 1;
65
- if (recordType !== HANDSHAKE_RECORD_TYPE) throw new Ja4ParseError(`Invalid record type: 0x${recordType.toString(16)}`);
66
- offset += 2;
67
- const recordLen = data.readUInt16BE(offset);
68
- offset += 2;
69
- if (data.length < RECORD_HEADER_LENGTH + recordLen) throw new Ja4ParseError("Record length exceeds buffer");
70
- data = data.subarray(0, RECORD_HEADER_LENGTH + recordLen);
71
- if (data.length < RECORD_HEADER_LENGTH + HANDSHAKE_HEADER_LENGTH) throw new Ja4ParseError("Record too short for handshake header");
72
- const msgType = data.readUInt8(offset);
73
- offset += 1;
74
- if (msgType !== HANDSHAKE_MESSAGE_TYPE) throw new Ja4ParseError(`Not a ClientHello: handshake type 0x${msgType.toString(16)}`);
75
- const msgLen = data.readUIntBE(offset, 3);
76
- offset += 3;
77
- if (data.length - offset < msgLen) throw new Ja4ParseError("Handshake message length exceeds record");
78
- data = data.subarray(0, offset + msgLen);
79
- if (data.length - offset < 35) throw new Ja4ParseError("ClientHello body too short");
80
- let clientVersion = data.readUInt16BE(offset);
81
- offset += 2;
82
- offset += 32;
83
- const sessionIdLen = data.readUInt8(offset);
84
- offset += 1;
85
- if (data.length - offset < sessionIdLen) throw new Ja4ParseError("Truncated at session ID");
86
- offset += sessionIdLen;
87
- if (data.length - offset < 2) throw new Ja4ParseError("Truncated at cipher suites length");
88
- const cipherSuitesLen = data.readUInt16BE(offset);
89
- offset += 2;
90
- if (data.length - offset < cipherSuitesLen) throw new Ja4ParseError("Truncated at cipher suites");
91
- if (cipherSuitesLen % 2 !== 0) throw new Ja4ParseError("Cipher suites length is not a multiple of 2");
92
- const cipherSuites = [];
93
- for (let i = 0; i < cipherSuitesLen; i += 2) cipherSuites.push(data.readUInt16BE(offset + i));
94
- offset += cipherSuitesLen;
95
- if (data.length - offset < 1) throw new Ja4ParseError("Truncated at compression methods");
96
- const compressionLen = data.readUInt8(offset);
97
- offset += 1;
98
- if (data.length - offset < compressionLen) throw new Ja4ParseError("Truncated at compression methods data");
99
- offset += compressionLen;
100
- if (data.length - offset < 2) throw new Ja4ParseError("Truncated at extensions length");
101
- const extensionsLen = data.readUInt16BE(offset);
102
- offset += 2;
103
- if (data.length - offset < extensionsLen) throw new Ja4ParseError("Truncated at extensions");
104
- const extIds = [];
105
- const sigAlgorithms = [];
106
- const alpnProtocols = [];
107
- let extOffset = offset;
108
- const extEnd = offset + extensionsLen;
109
- while (extOffset + 4 <= extEnd) {
110
- const extId = data.readUInt16BE(extOffset);
111
- extOffset += 2;
112
- const extLen = data.readUInt16BE(extOffset);
113
- extOffset += 2;
114
- if (extOffset + extLen > extEnd) break;
115
- const extData = data.subarray(extOffset, extOffset + extLen);
116
- extOffset += extLen;
117
- extIds.push(extId);
118
- if (extId === EXT_SUPPORTED_VERSIONS) {
119
- if (extData.length >= 1) {
120
- const listLen = extData.readUInt8(0);
121
- let best = 0;
122
- for (let i = 1; i + 1 < extData.length && i + 1 <= listLen; i += 2) {
123
- const v = extData.readUInt16BE(i);
124
- if (!isGrease(v) && v > best) best = v;
125
- }
126
- if (best > 0) clientVersion = best;
127
- }
128
- } else if (extId === EXT_SIGNATURE_ALGORITHMS) {
129
- if (extData.length >= 2) {
130
- const algLen = extData.readUInt16BE(0);
131
- for (let i = 2; i + 1 < extData.length && i + 1 < algLen + 2; i += 2) {
132
- const alg = extData.readUInt16BE(i);
133
- if (!isGrease(alg)) sigAlgorithms.push(alg);
134
- }
135
- }
136
- } else if (extId === EXT_ALPN) {
137
- if (extData.length >= 2) {
138
- const listLen = extData.readUInt16BE(0);
139
- const listEnd = Math.min(extData.length, 2 + listLen);
140
- let alpnOff = 2;
141
- while (alpnOff < listEnd) {
142
- const protoLen = extData.readUInt8(alpnOff);
143
- alpnOff += 1;
144
- if (alpnOff + protoLen > listEnd) break;
145
- alpnProtocols.push(extData.subarray(alpnOff, alpnOff + protoLen));
146
- alpnOff += protoLen;
147
- }
148
- }
149
- }
23
+ try {
24
+ return nativeCalculateJa4(data);
25
+ } catch (err) {
26
+ throw new Ja4ParseError(err instanceof Error ? err.message : String(err));
150
27
  }
151
- const versionStr = tlsVersionStr(clientVersion);
152
- const sni = extIds.includes(EXT_SERVER_NAME) ? "d" : "i";
153
- const firstAlpn = alpnProtocols[0];
154
- const [alpnFirst, alpnLast] = firstAlpn ? alpnFirstLast(firstAlpn) : ["0", "0"];
155
- const nonGreaseCiphers = cipherSuites.filter((c) => !isGrease(c));
156
- const nonGreaseExts = extIds.filter((e) => !isGrease(e));
157
- const firstChunk = `t${versionStr}${sni}${Math.min(99, nonGreaseCiphers.length).toString().padStart(2, "0")}${Math.min(99, nonGreaseExts.length).toString().padStart(2, "0")}${alpnFirst}${alpnLast}`;
158
- const cipherHash = hash12(formatIdList([...nonGreaseCiphers].sort((a, b) => a - b)));
159
- const extStr = formatIdList([...nonGreaseExts.filter((e) => e !== EXT_SERVER_NAME && e !== EXT_ALPN)].sort((a, b) => a - b));
160
- const sigAlgStr = formatIdList(sigAlgorithms);
161
- return `${firstChunk}_${cipherHash}_${hash12(sigAlgStr.length > 0 ? `${extStr}_${sigAlgStr}` : extStr)}`;
162
28
  }
163
29
  //#endregion
164
30
  exports.Ja4ParseError = Ja4ParseError;
@@ -108,7 +108,8 @@ var CaptchaManager = class CaptchaManager {
108
108
  const needsMd = session.md === void 0;
109
109
  const needsBn = session.bn === void 0;
110
110
  const needsFs = session.fs === void 0;
111
- if (!needsSimd && !needsDns && !needsEntropyMath && !needsEntropyCrypto && !needsEntropyWall && !needsEntropyFirst && !needsG && !needsI && !needsSw && !needsMd && !needsBn && !needsFs) return session;
111
+ const needsS = session.s === void 0;
112
+ if (!needsSimd && !needsDns && !needsEntropyMath && !needsEntropyCrypto && !needsEntropyWall && !needsEntropyFirst && !needsG && !needsI && !needsSw && !needsMd && !needsBn && !needsFs && !needsS) return session;
112
113
  const origin = await this.db.getSessionRecordBySessionId(session.originSessionId);
113
114
  if (!origin) return session;
114
115
  return {
@@ -124,7 +125,8 @@ var CaptchaManager = class CaptchaManager {
124
125
  ...needsSw && origin.sw !== void 0 && { sw: origin.sw },
125
126
  ...needsMd && origin.md !== void 0 && { md: origin.md },
126
127
  ...needsBn && origin.bn !== void 0 && { bn: origin.bn },
127
- ...needsFs && origin.fs !== void 0 && { fs: origin.fs }
128
+ ...needsFs && origin.fs !== void 0 && { fs: origin.fs },
129
+ ...needsS && origin.s !== void 0 && { s: origin.s }
128
130
  };
129
131
  }
130
132
  /**