@keetanetwork/anchor 0.0.1

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 (76) hide show
  1. package/.done +0 -0
  2. package/LICENSE +35 -0
  3. package/client/index.d.ts +10 -0
  4. package/client/index.d.ts.map +1 -0
  5. package/client/index.js +11 -0
  6. package/client/index.js.map +1 -0
  7. package/config.d.ts +10 -0
  8. package/config.d.ts.map +1 -0
  9. package/config.js +36 -0
  10. package/config.js.map +1 -0
  11. package/lib/certificates.d.ts +106 -0
  12. package/lib/certificates.d.ts.map +1 -0
  13. package/lib/certificates.js +463 -0
  14. package/lib/certificates.js.map +1 -0
  15. package/lib/encrypted-container.d.ts +106 -0
  16. package/lib/encrypted-container.d.ts.map +1 -0
  17. package/lib/encrypted-container.js +594 -0
  18. package/lib/encrypted-container.js.map +1 -0
  19. package/lib/index.d.ts +5 -0
  20. package/lib/index.d.ts.map +1 -0
  21. package/lib/index.js +5 -0
  22. package/lib/index.js.map +1 -0
  23. package/lib/log/common.d.ts +35 -0
  24. package/lib/log/common.d.ts.map +1 -0
  25. package/lib/log/common.js +19 -0
  26. package/lib/log/common.js.map +1 -0
  27. package/lib/log/index.d.ts +59 -0
  28. package/lib/log/index.d.ts.map +1 -0
  29. package/lib/log/index.js +207 -0
  30. package/lib/log/index.js.map +1 -0
  31. package/lib/log/target_console.d.ts +13 -0
  32. package/lib/log/target_console.d.ts.map +1 -0
  33. package/lib/log/target_console.js +44 -0
  34. package/lib/log/target_console.js.map +1 -0
  35. package/lib/resolver.d.ts +308 -0
  36. package/lib/resolver.d.ts.map +1 -0
  37. package/lib/resolver.js +1429 -0
  38. package/lib/resolver.js.map +1 -0
  39. package/lib/utils/array.d.ts +10 -0
  40. package/lib/utils/array.d.ts.map +1 -0
  41. package/lib/utils/array.js +12 -0
  42. package/lib/utils/array.js.map +1 -0
  43. package/lib/utils/asn1.d.ts +13 -0
  44. package/lib/utils/asn1.d.ts.map +1 -0
  45. package/lib/utils/asn1.js +8 -0
  46. package/lib/utils/asn1.js.map +1 -0
  47. package/lib/utils/buffer.d.ts +4 -0
  48. package/lib/utils/buffer.d.ts.map +1 -0
  49. package/lib/utils/buffer.js +3 -0
  50. package/lib/utils/buffer.js.map +1 -0
  51. package/lib/utils/crypto.d.ts +4 -0
  52. package/lib/utils/crypto.d.ts.map +1 -0
  53. package/lib/utils/crypto.js +4 -0
  54. package/lib/utils/crypto.js.map +1 -0
  55. package/lib/utils/index.d.ts +5 -0
  56. package/lib/utils/index.d.ts.map +1 -0
  57. package/lib/utils/index.js +5 -0
  58. package/lib/utils/index.js.map +1 -0
  59. package/lib/utils/json.d.ts +8 -0
  60. package/lib/utils/json.d.ts.map +1 -0
  61. package/lib/utils/json.js +164 -0
  62. package/lib/utils/json.js.map +1 -0
  63. package/lib/utils/never.d.ts +8 -0
  64. package/lib/utils/never.d.ts.map +1 -0
  65. package/lib/utils/never.js +14 -0
  66. package/lib/utils/never.js.map +1 -0
  67. package/npm-shrinkwrap.json +16517 -0
  68. package/package.json +42 -0
  69. package/services/kyc/client.d.ts +139 -0
  70. package/services/kyc/client.d.ts.map +1 -0
  71. package/services/kyc/client.js +390 -0
  72. package/services/kyc/client.js.map +1 -0
  73. package/services/kyc/common.d.ts +65 -0
  74. package/services/kyc/common.d.ts.map +1 -0
  75. package/services/kyc/common.js +2 -0
  76. package/services/kyc/common.js.map +1 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolver.js","sourceRoot":"","sources":["../../src/lib/resolver.ts"],"names":[],"mappings":";;AAAA,OAAO,KAAK,cAAc,MAAM,+BAA+B,CAAC;AAChE,OAAO,YAAY,MAAM,6BAA6B,CAAC;AAGvD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,MAAM,MAAM,mBAAmB,CAAC;AAEvC,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAgM/C,SAAS,gCAAgC,CAAC,KAA0B;IACnE,IAAI,YAAY,CAAC,QAAQ,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC;QACjD,OAAM,CAAC,KAAK,CAAC,CAAC;IACf,CAAC;SAAM,IAAI,YAAY,CAAC,QAAQ,CAAC,mBAAmB,CAAC,KAAK,CAAC,EAAE,CAAC;QAC7D,KAAK,GAAG,IAAI,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC1C,CAAC;IAED,OAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AACpB,CAAC;AAED,SAAS,+BAA+B,CAAC,KAAyB;IACjE,IAAI,YAAY,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC;QAC/C,OAAM,CAAC,KAAK,CAAC,CAAC;IACf,CAAC;SAAM,IAAI,YAAY,CAAC,OAAO,CAAC,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAAC;QAC3D,KAAK,GAAG,IAAI,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACzC,CAAC;IAED,OAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AACpB,CAAC;AAED;;GAEG;AACH,MAAM,aAAa,8MAA0B,CAAC;AAiB7C,CAAC;AAKD,CAAC;AAID,CAAC;AAID,CAAC;AA8BF;;;GAGG;AACH,MAAM,gBAAgB,GAAG,MAAM,CAAC,kBAAkB,CAAC,CAAC;AAiBpD,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAAoD,CAAC;AAEhF,MAAM,QAAQ;IACJ,MAAM,CAAiD;IACvD,WAAW,CAA+B;IAC1C,OAAO,CAAwB;IAC/B,OAAO,CAAqB;IAC5B,IAAI,CAAM;IACV,SAAS,CAAW;IACpB,MAAM,CAAgB;IACd,QAAQ,CAAc;IAE/B,MAAM,CAAU,cAAc,GAAG,+CAA+C,CAAC;IAEzF,MAAM,CAAC,UAAU,CAAC,KAAc;QAC/B,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YACjD,OAAM,CAAC,KAAK,CAAC,CAAC;QACf,CAAC;QACD,IAAI,CAAC,CAAC,YAAY,IAAI,KAAK,CAAC,EAAE,CAAC;YAC9B,OAAM,CAAC,KAAK,CAAC,CAAC;QACf,CAAC;QAED,OAAM,CAAC,KAAK,CAAC,UAAU,KAAK,QAAQ,CAAC,cAAc,CAAC,CAAC;IACtD,CAAC;IAUD,MAAM,CAAC,cAAc,CAAC,QAA8D;QACnF,OAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;IAClE,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,cAAc,CAAC,KAAc;QACnC,qBAAqB,CAAC,KAAK,CAAC,CAAC;IAC9B,CAAC;IAED,YAAY,GAAiB,EAAE,MAAsB;QACpD;;;;WAIG;QACH,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,gBAAgB,EAAE;YAC7C,KAAK,EAAE,QAAQ,CAAC,cAAc;YAC9B,UAAU,EAAE,KAAK;SACjB,CAAC,CAAC;QACH,IAAI,CAAC,IAAI,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;QACzB,IAAI,CAAC,MAAM,GAAG;YACb,yEAAyE;YACzE,QAAQ,EAAE,MAAM,CAAC,KAAK,EAAE,QAAQ,IAAI,IAAI,GAAG,EAA6C;YACxF,WAAW,EAAE,MAAM,CAAC,KAAK,EAAE,WAAW,IAAI,EAAE,GAAG,IAAI;YACnD,WAAW,EAAE,MAAM,CAAC,KAAK,EAAE,WAAW,IAAI,CAAC,GAAG,IAAI;SAClD,CAAC;QACF,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC;QACrC,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC;QAC7B,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC;QAC7B,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC;QACjC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,gBAAgB,CAAC,CAAC;QAC7D,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YACjC,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC;QACxC,CAAC;aAAM,CAAC;YACP,IAAI,CAAC,QAAQ,GAAG,IAAI,GAAG,EAAE,CAAC;QAC3B,CAAC;IACF,CAAC;IAEO,KAAK,CAAC,aAAa,CAAC,QAAgB;QAC3C;;;WAGG;QACH,yEAAyE;QACzE,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAqB,CAAC,CAAC;QAEjF,OAAM,CAAC,MAAM,CAAC,CAAC;IAChB,CAAC;IAEO,KAAK,CAAC,eAAe,CAAC,GAAQ;QACrC,MAAM,aAAa,GAAG,GAAG,CAAC,QAAQ,CAAC;QACnC,MAAM,IAAI,GAAG,GAAG,CAAC,QAAQ,CAAC;QAE1B,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;QAE7B,IAAI,IAAI,KAAK,WAAW,EAAE,CAAC;YAC1B,MAAK,CAAC,IAAI,KAAK,CAAC,qBAAqB,IAAI,EAAE,CAAC,CAAC,CAAC;QAC/C,CAAC;QAED,IAAI,OAAiC,CAAC;QACtC,IAAI,CAAC;YACJ,OAAO,GAAG,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,mBAAmB,CAAC,aAAa,CAAC,CAAC;QACzE,CAAC;QAAC,MAAM,CAAC;YACR,OAAM,CAAC,EAAE,CAAC,CAAC;QACZ,CAAC;QAED,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;QAC/D,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QACpF,IAAI,QAAQ,KAAK,EAAE,EAAE,CAAC;YACrB,OAAM,CAAC,EAAE,CAAC,CAAC;QACZ,CAAC;QAED,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,YAAY,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,kBAAkB,EAAE,aAAa,EAAE,GAAG,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC;QAC/G,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QAClD,OAAM,CAAC,MAAM,CAAC,CAAC;IAChB,CAAC;IAEO,KAAK,CAAC,YAAY,CAAC,GAAQ;QAClC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QAE1B,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE;YAC3C,MAAM,EAAE,KAAK;YACb,OAAO,EAAE;gBACR,QAAQ,EAAE,kBAAkB;aAC5B;SACD,CAAC,CAAC;QAEH,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC;YACjB,MAAK,CAAC,IAAI,KAAK,CAAC,qBAAqB,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,UAAU,QAAQ,GAAG,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC;QACrG,CAAC;QAED,IAAI,OAAO,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YAC5B;;;eAGG;YACH,OAAM,CAAC,EAAE,CAAC,CAAC;QACZ,CAAC;QAED,IAAI,OAAO,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YAC5B,MAAK,CAAC,IAAI,KAAK,CAAC,0BAA0B,OAAO,CAAC,MAAM,QAAQ,GAAG,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC;QACpF,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;QAEtD,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,YAAY,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,UAAU,EAAE,GAAG,CAAC,QAAQ,EAAE,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC;QAEhG,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QAElD,OAAM,CAAC,MAAM,CAAC,CAAC;IAChB,CAAC;IAEO,KAAK,CAAC,OAAO,CAAC,GAAQ;QAC7B,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QAEpB,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,EAAE,CAAC;QAChC;;;;WAIG;QACH,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;YACjC,OAAM,CAAC,EAAE,CAAC,CAAC;QACZ,CAAC;QACD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAE5B;;;WAGG;QACH,IAAI,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAElD,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YAClE,IAAI,QAAQ,CAAC,OAAO,GAAG,IAAI,IAAI,EAAE,EAAE,CAAC;gBACnC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;gBACtC,QAAQ,GAAG,SAAS,CAAC;YACtB,CAAC;QACF,CAAC;QAED,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC5B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;YAExB,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC;gBACnB,OAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YACxB,CAAC;iBAAM,CAAC;gBACP,MAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YACvB,CAAC;QACF,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;QAEzB,IAAI,MAAwB,CAAC;QAC7B,IAAI,CAAC;YACJ,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC;YAC9B,IAAI,QAAQ,KAAK,WAAW,EAAE,CAAC;gBAC9B,MAAM,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;YAC1C,CAAC;iBAAM,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;gBAClC,MAAM,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;YACvC,CAAC;iBAAM,CAAC;gBACP,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;gBAChC,MAAK,CAAC,IAAI,KAAK,CAAC,yBAAyB,QAAQ,EAAE,CAAC,CAAC,CAAC;YACvD,CAAC;QACF,CAAC;QAAC,OAAO,SAAS,EAAE,CAAC;YACpB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE;gBAClC,IAAI,EAAE,KAAK;gBACX,KAAK,EAAE,SAAS;gBAChB,OAAO,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;aACvD,CAAC,CAAC;YAEH,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,YAAY,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,UAAU,EAAE,GAAG,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;YACvG,MAAK,CAAC,SAAS,CAAC,CAAC;QAClB,CAAC;QAED,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,YAAY,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,UAAU,EAAE,GAAG,CAAC,QAAQ,EAAE,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;QAE9F,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE;YAClC,IAAI,EAAE,IAAI;YACV,KAAK,EAAE,MAAM;YACb,OAAO,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;SACvD,CAAC,CAAC;QAEH,OAAM,CAAC,MAAM,CAAC,CAAC;IAChB,CAAC;IAIO,KAAK,CAAC,YAAY,CAAuD,KAAQ;QACxF,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACzB,OAAM,CAAC,KAAK,CAAC,CAAC;QACf,CAAC;QAED;;;WAGG;QACH,IAAI,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC;YAC1B,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC/B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YAEvC,OAAM,CAAC,MAAM,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC;QACzC,CAAC;QAED,OAAM,CAAC,KAAK,CAAC,CAAC;IACf,CAAC;IAEO,oBAAoB,CAAC,KAAmB,EAAE,MAAsB;QACvE,QAAQ,MAAM,EAAE,CAAC;YAChB,KAAK,KAAK;gBACT,OAAM,CAAC,KAAK,CAAC,CAAC;YACf,KAAK,QAAQ;gBACZ,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;oBAC/B,MAAK,CAAC,IAAI,KAAK,CAAC,2BAA2B,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC;gBAC7D,CAAC;gBAED,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;oBACpB,MAAK,CAAC,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC,CAAC;gBAClD,CAAC;gBAED,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;oBAC1B,MAAK,CAAC,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC,CAAC;gBACtD,CAAC;gBAED,OAAM,CAAC,KAAK,CAAC,CAAC;YACf,KAAK,OAAO;gBACX,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;oBAC3B,MAAK,CAAC,IAAI,KAAK,CAAC,0BAA0B,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC;gBAC5D,CAAC;gBAED,OAAM,CAAC,KAAK,CAAC,CAAC;YACf,KAAK,WAAW;gBACf,IAAI,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,CAAC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;oBAC1E,MAAK,CAAC,IAAI,KAAK,CAAC,6BAA6B,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC;gBAC/D,CAAC;gBAED,OAAM,CAAC,KAAK,CAAC,CAAC;YACf,KAAK,QAAQ,CAAC;YACd,KAAK,QAAQ,CAAC;YACd,KAAK,SAAS;gBACb,IAAI,OAAO,KAAK,KAAK,MAAM,EAAE,CAAC;oBAC7B,MAAK,CAAC,IAAI,KAAK,CAAC,cAAc,MAAM,SAAS,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC;gBAC/D,CAAC;gBACD,OAAM,CAAC,KAAK,CAAC,CAAC;YACf;gBACC,WAAW,CAAC,MAAM,CAAC,CAAC;QACtB,CAAC;IACF,CAAC;IAEO,KAAK,CAAC,OAAO,CAAC,KAAuB;QAC5C,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YACjD,IAAI,QAA4C,CAAC;YACjD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC1B,QAAQ,GAAG,EAAE,CAAC;YACf,CAAC;iBAAM,CAAC;gBACP,QAAQ,GAAG,EAAE,CAAC;YACf,CAAC;YACD,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC;gBACzB;;;;mBAIG;gBACH,aAAa;gBACb,mEAAmE;gBACnE,MAAM,QAAQ,GAAqB,KAAK,CAAC,GAAG,CAAC,CAAC;gBAE9C,IAAI,aAAa,CAAC,QAAQ,CAAC,EAAE,CAAC;oBAC7B,MAAM,iBAAiB,GAAG,IAAI,QAAQ,CAAC,QAAQ,CAAC,GAAG,EAAE;wBACpD,UAAU,EAAE,IAAI,CAAC,WAAW;wBAC5B,MAAM,EAAE,IAAI,CAAC,OAAO;wBACpB,MAAM,EAAE,IAAI,CAAC,OAAO;wBACpB,QAAQ,EAAE,IAAI,CAAC,SAAS;wBACxB,KAAK,EAAE,IAAI,CAAC,MAAM;wBAClB,MAAM,EAAE,IAAI;qBACZ,CAAC,CAAC;oBAEH,MAAM,mBAAmB,GAAqB,iBAAiB,CAAC,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;oBAE9F,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;wBAC7B,MAAK,CAAC,IAAI,KAAK,CAAC,8HAA8H,CAAC,CAAC,CAAC;oBAClJ,CAAC;oBACD,QAAQ,CAAC,GAAG,CAAC,GAAG,mBAAmB,CAAC;gBACrC,CAAC;qBAAM,CAAC;oBACP;;;uBAGG;oBACH,aAAa;oBACb,MAAM,aAAa,GAAqB,KAAK,EAAE,SAAyB,KAAK,EAAE,EAAE;wBAChF,MAAM,MAAM,GAAG,IAAI,CAAC,oBAAoB,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,CAAC;wBAC/E,OAAM,CAAC,MAAM,CAAC,CAAC;oBAChB,CAAC,CAAC;oBAEF;;;;;uBAKG;oBACH,aAAa;oBACb,QAAQ,CAAC,GAAG,CAAC,GAAG,aAAa,CAAC;gBAC/B,CAAC;YACF,CAAC;YAED,OAAM,CAAC,QAAQ,CAAC,CAAC;QAClB,CAAC;aAAM,CAAC;YACP,OAAM,CAAC,KAAK,CAAC,CAAC;QACf,CAAC;IACF,CAAC;IAUD,KAAK,CAAC,KAAK,CAAC,SAAyB,KAAK;QACzC,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAE5C,MAAM,MAAM,GAAG,IAAI,CAAC,oBAAoB,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,CAAC;QAE5E,OAAM,CAAC,MAAM,CAAC,CAAC;IAChB,CAAC;;AAqBF,SAAS,uBAAuB,CAAC,KAAc;IAC9C,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACjD,MAAK,CAAC,IAAI,KAAK,CAAC,2BAA2B,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC;IAC7D,CAAC;IAED,IAAI,CAAC,CAAC,cAAc,IAAI,KAAK,CAAC,EAAE,CAAC;QAChC,MAAK,CAAC,IAAI,KAAK,CAAC,6DAA6D,CAAC,CAAC,CAAC;IACjF,CAAC;IAED,IAAI,OAAO,KAAK,CAAC,YAAY,KAAK,UAAU,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC;QACpF,MAAK,CAAC,IAAI,KAAK,CAAC,0DAA0D,OAAO,KAAK,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC;IACzG,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC;QACvC,KAAK,MAAM,WAAW,IAAI,KAAK,CAAC,YAAY,EAAE,CAAC;YAC9C,IAAI,OAAO,WAAW,KAAK,QAAQ,EAAE,CAAC;gBACrC,MAAK,CAAC,IAAI,KAAK,CAAC,0DAA0D,OAAO,WAAW,EAAE,CAAC,CAAC,CAAC;YAClG,CAAC;QACF,CAAC;IACF,CAAC;AACF,CAAC;AAED,SAAS,+BAA+B,CAAC,KAAc;IACtD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACjD,MAAK,CAAC,IAAI,KAAK,CAAC,2BAA2B,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC;IAC7D,CAAC;IAED,IAAI,CAAC,CAAC,cAAc,IAAI,KAAK,CAAC,EAAE,CAAC;QAChC,OAAO;IACR,CAAC;IAED,uBAAuB,CAAC,KAAK,CAAC,CAAC;AAChC,CAAC;AAED,SAAS,wBAAwB,CAAC,KAAc;IAC/C,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACjD,MAAK,CAAC,IAAI,KAAK,CAAC,2BAA2B,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC;IAC7D,CAAC;IAED,IAAI,CAAC,CAAC,eAAe,IAAI,KAAK,CAAC,EAAE,CAAC;QACjC,MAAK,CAAC,IAAI,KAAK,CAAC,8DAA8D,CAAC,CAAC,CAAC;IAClF,CAAC;IAED,IAAI,OAAO,KAAK,CAAC,aAAa,KAAK,UAAU,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE,CAAC;QACtF,MAAK,CAAC,IAAI,KAAK,CAAC,2DAA2D,OAAO,KAAK,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;IAC3G,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE,CAAC;QACxC,KAAK,MAAM,YAAY,IAAI,KAAK,CAAC,aAAa,EAAE,CAAC;YAChD,IAAI,OAAO,YAAY,KAAK,QAAQ,EAAE,CAAC;gBACtC,MAAK,CAAC,IAAI,KAAK,CAAC,2DAA2D,OAAO,YAAY,EAAE,CAAC,CAAC,CAAC;YACpG,CAAC;QACF,CAAC;IACF,CAAC;AACF,CAAC;AAED,SAAS,4BAA4B,CAAC,KAAc;IACnD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACjD,MAAK,CAAC,IAAI,KAAK,CAAC,2BAA2B,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC;IAC7D,CAAC;IAED,IAAI,CAAC,CAAC,YAAY,IAAI,KAAK,CAAC,EAAE,CAAC;QAC9B,MAAK,CAAC,IAAI,KAAK,CAAC,gEAAgE,CAAC,CAAC,CAAC;IACpF,CAAC;IAED,IAAI,CAAC,OAAO,KAAK,CAAC,UAAU,KAAK,QAAQ,IAAI,KAAK,CAAC,UAAU,KAAK,IAAI,CAAC,IAAI,OAAO,KAAK,CAAC,UAAU,KAAK,UAAU,EAAE,CAAC;QACnH,MAAK,CAAC,IAAI,KAAK,CAAC,yDAAyD,OAAO,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;IACtG,CAAC;IAED,IAAI,OAAO,KAAK,CAAC,UAAU,KAAK,UAAU,EAAE,CAAC;QAC5C,KAAK,MAAM,CAAC,SAAS,EAAE,cAAc,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;YAC5E,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE,CAAC;gBACnC,MAAK,CAAC,IAAI,KAAK,CAAC,+DAA+D,OAAO,SAAS,EAAE,CAAC,CAAC,CAAC;YACrG,CAAC;YAED,IAAI,OAAO,cAAc,KAAK,QAAQ,EAAE,CAAC;gBACxC,MAAK,CAAC,IAAI,KAAK,CAAC,wBAAwB,SAAS,yBAAyB,OAAO,cAAc,EAAE,CAAC,CAAC,CAAC;YACrG,CAAC;QACF,CAAC;IACF,CAAC;AACF,CAAC;AAED,SAAS,wBAAwB,CAAC,KAAc;IAC/C,4BAA4B,CAAC,KAAK,CAAC,CAAC;AACrC,CAAC;AAED,SAAS,+BAA+B,CAAC,KAAc;IACtD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACjD,MAAK,CAAC,IAAI,KAAK,CAAC,2BAA2B,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC;IAC7D,CAAC;IAED,IAAI,cAAc,IAAI,KAAK,EAAE,CAAC;QAC7B,IAAI,OAAO,KAAK,CAAC,YAAY,KAAK,UAAU,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC;YACpF,MAAK,CAAC,IAAI,KAAK,CAAC,0DAA0D,OAAO,KAAK,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC;QACzG,CAAC;QAED,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC;YACvC,KAAK,MAAM,WAAW,IAAI,KAAK,CAAC,YAAY,EAAE,CAAC;gBAC9C,IAAI,OAAO,WAAW,KAAK,QAAQ,EAAE,CAAC;oBACrC,MAAK,CAAC,IAAI,KAAK,CAAC,0DAA0D,OAAO,WAAW,EAAE,CAAC,CAAC,CAAC;gBAClG,CAAC;YACF,CAAC;QACF,CAAC;IACF,CAAC;AACF,CAAC;AAED,SAAS,aAAa,CAAC,KAAc;IACpC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACjD,MAAK,CAAC,IAAI,KAAK,CAAC,2BAA2B,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC;IAC7D,CAAC;IAED,IAAI,CAAC,CAAC,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;QACtB,MAAK,CAAC,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAC,CAAC;IAC5E,CAAC;IAED,IAAI,OAAO,KAAK,CAAC,EAAE,KAAK,QAAQ,IAAI,OAAO,KAAK,CAAC,EAAE,KAAK,UAAU,EAAE,CAAC;QACpE,MAAK,CAAC,IAAI,KAAK,CAAC,gDAAgD,OAAO,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IACrF,CAAC;AACF,CAAC;AAID,MAAM,iCAAiC,GAAG,UAAS,KAAc;IAChE,4BAA4B,CAAC,KAAK,CAAC,CAAC;IACpC,uBAAuB,CAAC,KAAK,CAAC,CAAC;IAC/B,wBAAwB,CAAC,KAAK,CAAC,CAAC;IAChC,+BAA+B,CAAC,KAAK,CAAC,CAAC;IAEvC,OAAM,CAAC,KAAK,CAAC,CAAC;AAEf,CAAC,CAAC;AACF,MAAM,6BAA6B,GAAG,UAAS,KAAc;IAC5D,wBAAwB,CAAC,KAAK,CAAC,CAAC;IAChC,+BAA+B,CAAC,KAAK,CAAC,CAAC;IACvC,aAAa,CAAC,KAAK,CAAC,CAAC;IAErB,OAAM,CAAC,KAAK,CAAC,CAAC;AACf,CAAC,CAAC;AAEF,MAAM,QAAQ;IACJ,KAAK,CAAyB;IAC9B,WAAW,CAA+B;IAC1C,OAAO,CAAwB;IAC/B,OAAO,CAAqB;IAC5B,MAAM,CAAgB;IACtB,cAAc,CAAuC;IAErD,EAAE,CAAS;IAEpB,MAAM,CAAU,QAAQ,GAAoB,QAAQ,CAAC;IAErD,YAAY,MAAsB;QACjC,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC;QACzB,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC;QACrC,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC;QAC7B,IAAI,CAAC,cAAc,GAAG;YACrB,GAAG,MAAM,CAAC,KAAK;YACf,QAAQ,EAAE,IAAI,GAAG,EAAE;SACnB,CAAC;QAEF,IAAI,CAAC,EAAE,GAAG,MAAM,CAAC,EAAE,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;QAE3C,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,YAAY,IAAI,CAAC,EAAE,EAAE,EAAE,qCAAqC,EAAE,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,GAAG,EAAE,CAAC,CAAC;QAEpH,IAAI,cAAc,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;YACrD,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC;QAC9B,CAAC;aAAM,CAAC;YACP,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC;QACrC,CAAC;QAED,IAAI,CAAC,MAAM,GAAG;YACb,QAAQ,EAAE;gBACT,KAAK,EAAE,CAAC;aACR;YACD,KAAK,EAAE;gBACN,KAAK,EAAE,CAAC;aACR;YACD,WAAW,EAAE;gBACZ,KAAK,EAAE,CAAC;aACR;YACD,KAAK,EAAE,CAAC;YACR,KAAK,EAAE;gBACN,GAAG,EAAE,CAAC;gBACN,IAAI,EAAE,CAAC;aACP;SACD,CAAC;IACH,CAAC;IAED,gBAAgB;IAChB,aAAa,CAAC,WAAmB;QAChC,IAAI,WAAW,KAAK,gBAAgB,EAAE,CAAC;YACtC,MAAK,CAAC,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC,CAAC;QAC1C,CAAC;QAED,OAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACrB,CAAC;IAED,IAAI,KAAK;QACR,OAAM,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;IACtC,CAAC;IAEO,KAAK,CAAC,qBAAqB,CAAC,eAA6C,EAAE,QAA0C;QAC5H,IAAI,eAAe,KAAK,SAAS,EAAE,CAAC;YACnC,OAAM,CAAC,SAAS,CAAC,CAAC;QACnB,CAAC;QAED,MAAM,MAAM,GAAiC,EAAE,CAAC;QAChD,KAAK,MAAM,qBAAqB,IAAI,eAAe,EAAE,CAAC;YACrD,IAAI,CAAC;gBACJ,MAAM,mBAAmB,GAAG,MAAM,eAAe,CAAC,qBAAqB,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC;gBACrF,IAAI,mBAAmB,KAAK,SAAS,EAAE,CAAC;oBACvC,SAAS;gBACV,CAAC;gBAED,IAAI,CAAC,CAAC,YAAY,IAAI,mBAAmB,CAAC,EAAE,CAAC;oBAC5C,SAAS;gBACV,CAAC;gBAED,IAAI,QAAQ,CAAC,aAAa,KAAK,SAAS,EAAE,CAAC;oBAC1C,MAAM,aAAa,GAAG,MAAM,mBAAmB,CAAC,aAAa,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;oBAC/E,MAAM,gCAAgC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,WAAU,IAAI;wBAC/F,OAAM,CAAC,MAAM,IAAI,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC;oBACnC,CAAC,CAAC,CAAC,CAAC;oBAEJ,IAAI,UAAU,GAAG,IAAI,CAAC;oBACtB,KAAK,MAAM,iBAAiB,IAAI,QAAQ,CAAC,aAAa,EAAE,CAAC;wBACxD,MAAM,0BAA0B,GAAG,gCAAgC,CAAC,iBAAiB,CAAC,CAAC;wBACvF,IAAI,CAAC,gCAAgC,CAAC,QAAQ,CAAC,0BAA0B,CAAC,EAAE,CAAC;4BAC5E,UAAU,GAAG,KAAK,CAAC;4BACnB,MAAM;wBACP,CAAC;oBACF,CAAC;oBAED,IAAI,CAAC,UAAU,EAAE,CAAC;wBACjB,SAAS;oBACV,CAAC;gBACF,CAAC;gBAED,IAAI,QAAQ,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;oBACzC,MAAM,YAAY,GAAG,MAAM,mBAAmB,CAAC,YAAY,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;oBAC7E,MAAM,+BAA+B,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,WAAU,IAAI;wBAC7F,OAAM,CAAC,MAAM,IAAI,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC;oBACnC,CAAC,CAAC,CAAC,CAAC;oBACJ,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,YAAY,IAAI,CAAC,EAAE,EAAE,EAAE,yBAAyB,EAAE,QAAQ,CAAC,YAAY,EAAE,SAAS,EAAE,+BAA+B,EAAE,KAAK,EAAE,qBAAqB,CAAC,CAAC;oBAEvK,IAAI,UAAU,GAAG,IAAI,CAAC;oBACtB,KAAK,MAAM,gBAAgB,IAAI,QAAQ,CAAC,YAAY,EAAE,CAAC;wBACtD,MAAM,yBAAyB,GAAG,+BAA+B,CAAC,gBAAgB,CAAC,CAAC;wBACpF,IAAI,CAAC,+BAA+B,CAAC,QAAQ,CAAC,yBAAyB,CAAC,EAAE,CAAC;4BAC1E,UAAU,GAAG,KAAK,CAAC;4BACnB,MAAM;wBACP,CAAC;oBACF,CAAC;oBAED,IAAI,CAAC,UAAU,EAAE,CAAC;wBACjB,SAAS;oBACV,CAAC;gBACF,CAAC;gBAED,MAAM,CAAC,qBAAqB,CAAC,GAAG,iCAAiC,CAAC,mBAAmB,CAAC,CAAC;YACxF,CAAC;YAAC,OAAO,wBAAwB,EAAE,CAAC;gBACnC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,YAAY,IAAI,CAAC,EAAE,EAAE,EAAE,gCAAgC,EAAE,qBAAqB,EAAE,GAAG,EAAE,wBAAwB,EAAE,cAAc,CAAC,CAAC;YACpJ,CAAC;QACF,CAAC;QAED,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACtC;;;eAGG;YACH,OAAM,CAAC,SAAS,CAAC,CAAC;QACnB,CAAC;QAED,OAAM,CAAC,MAAM,CAAC,CAAC;IAChB,CAAC;IAEO,KAAK,CAAC,iBAAiB,CAAC,WAAyC,EAAE,QAAsC;QAChH,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;YAC/B,OAAM,CAAC,SAAS,CAAC,CAAC;QACnB,CAAC;QAED,MAAM,MAAM,GAA6B,EAAE,CAAC;QAC5C,KAAK,MAAM,iBAAiB,IAAI,WAAW,EAAE,CAAC;YAC7C,IAAI,CAAC;gBACJ,MAAM,eAAe,GAAG,MAAM,WAAW,CAAC,iBAAiB,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC;gBACzE,IAAI,eAAe,KAAK,SAAS,EAAE,CAAC;oBACnC,SAAS;gBACV,CAAC;gBAED,IAAI,CAAC,CAAC,YAAY,IAAI,eAAe,CAAC,EAAE,CAAC;oBACxC,SAAS;gBACV,CAAC;gBAED,IAAI,QAAQ,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;oBACzC,IAAI,UAAU,GAAG,IAAI,CAAC;oBACtB;;;;uBAIG;oBACH,IAAI,cAAc,IAAI,eAAe,EAAE,CAAC;wBACvC,MAAM,YAAY,GAAG,MAAM,eAAe,CAAC,YAAY,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;wBACzE,MAAM,2BAA2B,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,WAAU,IAAI;4BACzF,OAAM,CAAC,MAAM,IAAI,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;wBAChC,CAAC,CAAC,CAAC,CAAC;wBACJ,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,YAAY,IAAI,CAAC,EAAE,EAAE,EAAE,yBAAyB,EAAE,QAAQ,CAAC,YAAY,EAAE,SAAS,EAAE,2BAA2B,EAAE,KAAK,EAAE,iBAAiB,CAAC,CAAC;wBAE/J,KAAK,MAAM,gBAAgB,IAAI,QAAQ,CAAC,YAAY,EAAE,CAAC;4BACtD,MAAM,yBAAyB,GAAG,+BAA+B,CAAC,gBAAgB,CAAC,CAAC;4BACpF,IAAI,CAAC,2BAA2B,CAAC,QAAQ,CAAC,yBAAyB,CAAC,EAAE,CAAC;gCACtE,UAAU,GAAG,KAAK,CAAC;gCACnB,MAAM;4BACP,CAAC;wBACF,CAAC;oBACF,CAAC;oBAED,IAAI,CAAC,UAAU,EAAE,CAAC;wBACjB,SAAS;oBACV,CAAC;gBACF,CAAC;gBAED,MAAM,CAAC,iBAAiB,CAAC,GAAG,6BAA6B,CAAC,eAAe,CAAC,CAAC;YAC5E,CAAC;YAAC,OAAO,oBAAoB,EAAE,CAAC;gBAC/B,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,YAAY,IAAI,CAAC,EAAE,EAAE,EAAE,4BAA4B,EAAE,iBAAiB,EAAE,GAAG,EAAE,oBAAoB,EAAE,cAAc,CAAC,CAAC;YACxI,CAAC;QACF,CAAC;QAED,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACtC;;;eAGG;YACH,OAAM,CAAC,SAAS,CAAC,CAAC;QACnB,CAAC;QAED,OAAM,CAAC,MAAM,CAAC,CAAC;IAChB,CAAC;IAKD,KAAK,CAAC,MAAM,CAAqB,OAAU,EAAE,QAAkC;QAC9E,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,cAAc,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;QACnF,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC,OAAO,EAAE;YACtC,UAAU,EAAE,IAAI,CAAC,WAAW;YAC5B,MAAM,EAAE,IAAI,CAAC,OAAO;YACpB,MAAM,EAAE,IAAI,CAAC,OAAO;YACpB,QAAQ,EAAE,IAAI;YACd,KAAK,EAAE,IAAI,CAAC,cAAc;SAC1B,CAAC,CAAC;QACH,MAAM,YAAY,GAAG,MAAM,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACpD,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,YAAY,IAAI,CAAC,EAAE,EAAE,EAAE,gBAAgB,EAAE,YAAY,CAAC,CAAC;QAE3E,IAAI,CAAC,CAAC,SAAS,IAAI,YAAY,CAAC,EAAE,CAAC;YAClC,MAAK,CAAC,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC,CAAC;QACjE,CAAC;QAED,MAAM,mBAAmB,GAAG,MAAM,YAAY,CAAC,OAAO,EAAE,CAAC,WAAW,CAAC,CAAC;QACtE,IAAI,mBAAmB,KAAK,CAAC,EAAE,CAAC;YAC/B,MAAK,CAAC,IAAI,KAAK,CAAC,iCAAiC,mBAAmB,EAAE,CAAC,CAAC,CAAC;QAC1E,CAAC;QAED;;WAEG;QACH,MAAM,uBAAuB,GAAG,YAAY,CAAC,QAAQ,CAAC;QACtD,IAAI,uBAAuB,KAAK,SAAS,EAAE,CAAC;YAC3C,MAAK,CAAC,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC,CAAC;QAClE,CAAC;QACD,MAAM,eAAe,GAAG,MAAM,uBAAuB,CAAC,QAAQ,CAAC,CAAC;QAWhE,yEAAyE;QACzE,MAAM,IAAI,GAAG,EAAE,OAAO,EAAE,QAAQ,EAAgB,CAAC;QAEjD,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,YAAY,IAAI,CAAC,EAAE,EAAE,EAAE,YAAY,EAAE,IAAI,CAAC,OAAO,EAAE,gBAAgB,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,eAAe,CAAC,CAAC;QAC/H,QAAQ,IAAI,CAAC,OAAO,EAAE,CAAC;YACtB,KAAK,SAAS,CAAC,CAAC,CAAC;gBAChB,MAAM,eAAe,GAAG,IAAI,CAAC,QAAQ,CAAC;gBACtC,MAAM,eAAe,GAAG,MAAM,eAAe,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,CAAC;gBAClE,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,YAAY,IAAI,CAAC,EAAE,EAAE,EAAE,mBAAmB,EAAE,eAAe,CAAC,CAAC;gBAEjF,OAAM,CAAC,MAAM,IAAI,CAAC,qBAAqB,CAAC,eAAe,EAAE,eAAe,CAAC,CAAC,CAAC;YAC5E,CAAC;YACD,KAAK,KAAK,CAAC,CAAC,CAAC;gBACZ,MAAM,eAAe,GAAG,IAAI,CAAC,QAAQ,CAAC;gBACtC,MAAM,WAAW,GAAG,MAAM,eAAe,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,CAAC;gBAC1D,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,YAAY,IAAI,CAAC,EAAE,EAAE,EAAE,eAAe,EAAE,WAAW,CAAC,CAAC;gBAEzE,OAAM,CAAC,MAAM,IAAI,CAAC,iBAAiB,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC,CAAC;YACpE,CAAC;YACD,KAAK,IAAI,CAAC;YACV,KAAK,SAAS,CAAC;YACf,KAAK,UAAU,CAAC;YAChB,KAAK,OAAO;gBACX,MAAK,CAAC,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC;YACrC;gBACC,WAAW,CAAC,IAAI,CAAC,CAAC;QACpB,CAAC;IACF,CAAC;IAED,UAAU;QACT,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;QACrC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC;QAC1B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC;QAC3B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC;QAC5B,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,GAAG,CAAC,CAAC;QAC/B,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,KAAK,GAAG,CAAC,CAAC;QAClC,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC;IACvB,CAAC;;AAGF,eAAe,QAAQ,CAAC","sourcesContent":["import * as KeetaNetClient from '@keetanetwork/keetanet-client';\nimport CurrencyInfo from '@keetanetwork/currency-info';\nimport type { Logger } from './log/index.ts';\nimport type { JSONSerializable } from './utils/json.ts';\nimport { assertNever } from './utils/never.js';\nimport { Buffer } from './utils/buffer.js';\nimport crypto from './utils/crypto.js';\n\nimport { createIs, createAssert } from 'typia';\n\ntype ExternalURL = { external: '2b828e33-2692-46e9-817e-9b93d63f28fd'; url: string; };\n\ntype KeetaNetAccount = InstanceType<typeof KeetaNetClient.lib.Account>;\n\ntype CurrencySearchInput = CurrencyInfo.ISOCurrencyCode | CurrencyInfo.ISOCurrencyNumber | CurrencyInfo.Currency;\ntype CurrencySearchCanonical = CurrencyInfo.ISOCurrencyCode; /* XXX:TODO */\ntype CountrySearchInput = CurrencyInfo.ISOCountryCode | CurrencyInfo.ISOCountryNumber | CurrencyInfo.Country;\ntype CountrySearchCanonical = CurrencyInfo.ISOCountryCode; /* XXX:TODO */\n\n/**\n * A cache object\n */\ntype URLCacheObject = Map<string, {\n\tpass: true;\n\tvalue: JSONSerializable;\n\texpires: Date;\n} | {\n\tpass: false;\n\terror: unknown;\n\texpires: Date;\n}>;\n\n/**\n * Service Metadata General Structure\n */\ntype ServiceMetadata = {\n\tversion: number;\n\tservices: {\n\t\tbanking?: {\n\t\t\t[id: string]: {\n\t\t\t\toperations: {\n\t\t\t\t\tcreateAccount?: string;\n\t\t\t\t};\n\t\t\t\tcurrencyCodes: string[];\n\t\t\t\tcountryCodes: string[];\n\t\t\t\tkycProviders?: string[];\n\t\t\t};\n\t\t};\n\t\tkyc?: {\n\t\t\t[id: string]: {\n\t\t\t\toperations: {\n\t\t\t\t\t/**\n\t\t\t\t\t * Check if the KYC provider can\n\t\t\t\t\t * service a more specific locality\n\t\t\t\t\t * (optional)\n\t\t\t\t\t */\n\t\t\t\t\tcheckLocality?: string;\n\t\t\t\t\t/**\n\t\t\t\t\t * Request an estimate for a KYC\n\t\t\t\t\t * verification (optional)\n\t\t\t\t\t */\n\t\t\t\t\tgetEstimate?: string;\n\t\t\t\t\t/**\n\t\t\t\t\t * Begin the KYC verification process\n\t\t\t\t\t * with this KYC provider\n\t\t\t\t\t */\n\t\t\t\t\tcreateVerification?: string;\n\t\t\t\t\t/**\n\t\t\t\t\t * Get the certificate for the\n\t\t\t\t\t * KYC verification\n\t\t\t\t\t */\n\t\t\t\t\tgetCertificates?: string;\n\t\t\t\t};\n\t\t\t\t/**\n\t\t\t\t * Country codes which this KYC provider can\n\t\t\t\t * validate accounts in. If this is not\n\t\t\t\t * specified, then the KYC provider can\n\t\t\t\t * validate accounts in any country.\n\t\t\t\t */\n\t\t\t\tcountryCodes?: string[];\n\t\t\t\t/**\n\t\t\t\t * The Certificate Authority (CA) Certificate\n\t\t\t\t * that this KYC provider uses to sign KYC\n\t\t\t\t * certificates. This is used to identify the\n\t\t\t\t * KYC provider.\n\t\t\t\t */\n\t\t\t\tca: string;\n\t\t\t};\n\t\t};\n\t\tfx?: {\n\t\t\tinputCurrencyCodes: {\n\t\t\t\toutputCurrencyCodes: string[];\n\t\t\t\tkycProviders: string[];\n\t\t\t}[];\n\t\t};\n\t\tinbound?: {\n\t\t\t/* XXX:TODO */\n\t\t\tworkInProgress?: true;\n\t\t};\n\t\toutbound?: {\n\t\t\t/* XXX:TODO */\n\t\t\tworkInProgress?: true;\n\t\t};\n\t\tcards?: {\n\t\t\t/* XXX:TODO */\n\t\t\tworkInProgress?: true;\n\t\t};\n\t};\n};\n\n/**\n * Types of services which can be resolved\n */\ntype Services = keyof ServiceMetadata['services'];\n\n/**\n * Search criteria for each service type\n */\ntype ServiceSearchCriteria<T extends Services> = {\n\t'banking': {\n\t\t/**\n\t\t * Search for a banking provider which supports creating\n\t\t * accounts in ALL of the following currencies.\n\t\t */\n\t\tcurrencyCodes?: CurrencySearchInput[];\n\t\t/**\n\t\t * Search for a banking provider which supports creating\n\t\t * accounts in ANY of the following countries.\n\t\t */\n\t\tcountryCodes?: CountrySearchInput[];\n\t\t/**\n\t\t * Search for a banking provider which supports creating\n\t\t * accounts verified by ANY of the following KYC providers\n\t\t * (DN).\n\t\t */\n\t\tkycProviders?: string[]; /* XXX:TODO */\n\t};\n\t'fx': {\n\t\t/**\n\t\t * Search for a provider which can convert from the following\n\t\t * input currency\n\t\t */\n\t\tinputCurrencyCode: CurrencySearchInput;\n\t\t/**\n\t\t * Search for a provider which can convert to the following\n\t\t * output currency\n\t\t */\n\t\toutputCurrencyCode: CurrencySearchInput;\n\t};\n\t'kyc': {\n\t\t/**\n\t\t * Search for a KYC provider which can verify accounts in ALL\n\t\t * of the following countries.\n\t\t */\n\t\tcountryCodes: CountrySearchInput[];\n\t};\n\t'inbound': {\n\t\t/* XXX:TODO */\n\t\tworkInProgress: true;\n\t};\n\t'outbound': {\n\t\t/* XXX:TODO */\n\t\tworkInProgress: true;\n\t};\n\t'cards': {\n\t\t/* XXX:TODO */\n\t\tworkInProgress: true;\n\t};\n}[T];\n\ntype ResolverConfig = {\n\t/**\n\t * The \"root\" account to use as the basis for all lookups. It should\n\t * contain the authoritative information for resolving in its\n\t * Metadata.\n\t */\n\troot: KeetaNetAccount;\n\t/**\n\t * A KeetaNet Client to access the network using.\n\t */\n\tclient: KeetaNetClient.Client | KeetaNetClient.UserClient;\n\t/**\n\t * A list of trusted Certificate Authorities to use when connecting to\n\t * external HTTPS services.\n\t */\n\ttrustedCAs: string[]; /* XXX:TODO */\n\t/**\n\t * Logger to use for debugging\n\t */\n\tlogger?: Logger;\n\t/**\n\t * ID for this instance of the resolver\n\t */\n\tid?: string;\n\t/**\n\t * Caching Parameters\n\t */\n\tcache?: Omit<NonNullable<MetadataConfig['cache']>, 'instance'>;\n}\n\nfunction convertToCurrencySearchCanonical(input: CurrencySearchInput): CurrencySearchCanonical {\n\tif (CurrencyInfo.Currency.isCurrencyCode(input)) {\n\t\treturn(input);\n\t} else if (CurrencyInfo.Currency.isISOCurrencyNumber(input)) {\n\t\tinput = new CurrencyInfo.Currency(input);\n\t}\n\n\treturn(input.code);\n}\n\nfunction convertToCountrySearchCanonical(input: CountrySearchInput): CountrySearchCanonical {\n\tif (CurrencyInfo.Country.isCountryCode(input)) {\n\t\treturn(input);\n\t} else if (CurrencyInfo.Country.isISOCountryNumber(input)) {\n\t\tinput = new CurrencyInfo.Country(input);\n\t}\n\n\treturn(input.code);\n}\n\n/**\n * Check if a value is an ExternalURL\n */\nconst isExternalURL = createIs<ExternalURL>();\n\ntype JSONSerializablePrimitive = Exclude<JSONSerializable, object>;\ntype ValuizeInput = JSONSerializablePrimitive | ValuizableObject | ValuizableArray;\ntype ValuizableArray = (ValuizableMethod | undefined)[];\ntype ValuizableObject = { [key: string]: ValuizableMethod | undefined };\n\ntype ValuizableKind = 'any' | 'object' | 'array' | 'primitive' | 'string' | 'number' | 'boolean';\ninterface ValuizableMethod {\n\t(expect: 'object'): Promise<ValuizableObject>;\n\t(expect: 'array'): Promise<ValuizableArray>;\n\t(expect: 'primitive'): Promise<JSONSerializablePrimitive>;\n\t(expect: 'string'): Promise<string>;\n\t(expect: 'number'): Promise<number>;\n\t(expect: 'boolean'): Promise<boolean>;\n\t(expect: 'any'): Promise<ValuizeInput>;\n\t(expect?: ValuizableKind): Promise<ValuizeInput>;\n};\n\ninterface ToValuizableExpectString {\n\t(expect: 'string'): Promise<string>;\n\t(expect: 'primitive'): Promise<JSONSerializablePrimitive>;\n};\ninterface ToValuizableExpectNumber {\n\t(expect: 'number'): Promise<number>;\n\t(expect: 'primitive'): Promise<JSONSerializablePrimitive>;\n};\ninterface ToValuizableExpectBoolean {\n\t(expect: 'boolean'): Promise<boolean>;\n\t(expect: 'primitive'): Promise<JSONSerializablePrimitive>;\n};\n/* eslint-disable @stylistic/indent */\ntype ToValuizableObject<T extends object> = {\n\t[K in keyof T]:\n\t\tT[K] extends string ? ToValuizableExpectString :\n\t\tT[K] extends number ? ToValuizableExpectNumber :\n\t\tT[K] extends boolean ? ToValuizableExpectBoolean :\n\t\tT[K] extends JSONSerializablePrimitive ?\n\t\t\t(expect: 'primitive') => Promise<JSONSerializablePrimitive> :\n\t\tT[K] extends unknown[] ?\n\t\t\t(expect: 'array') => Promise<ToValuizableObject<T[K]>> :\n\t\tT[K] extends object ?\n\t\t\t(expect: 'object') => Promise<ToValuizableObject<T[K]>> :\n\t\tT[K] extends (infer U | undefined) ?\n\t\t\tToValuizable<U> | undefined :\n\t\tnever;\n};\ntype ToValuizable<T> = ToValuizableObject<{ tmp: T }>['tmp'];\n\ntype ToJSONValuizableObject<T extends object> = {\n\t[K in keyof T]: (\n\t\tT[K] extends object ?\n\t\t\tToJSONValuizableObject<T[K]> :\n\t\tT[K] extends (object | undefined) ?\n\t\t\tToJSONValuizableObject<NonNullable<T[K]>> | undefined :\n\t\tT[K]\n\t) | ExternalURL;\n};\ntype ToJSONValuizable<T> = ToJSONValuizableObject<{ tmp: T }>['tmp'];\n\n/*\n * Access token to share with the Metadata object to allow it to\n * access the mutable stats object.\n */\nconst statsAccessToken = Symbol('statsAccessToken');\n\ntype MetadataConfig = {\n\ttrustedCAs: ResolverConfig['trustedCAs'];\n\tclient: KeetaNetClient.Client;\n\tlogger?: ResolverConfig['logger'];\n\tresolver: Resolver;\n\tcache?: {\n\t\tinstance: URLCacheObject;\n\t\tpositiveTTL?: number;\n\t\tnegativeTTL?: number;\n\t};\n\tparent?: Metadata;\n};\n\ntype ValuizableInstance = { value: ValuizableMethod };\n\nconst assertServiceMetadata = createAssert<ToJSONValuizable<ServiceMetadata>>();\n\nclass Metadata implements ValuizableInstance {\n\treadonly #cache: Required<NonNullable<MetadataConfig['cache']>>;\n\treadonly #trustedCAs: ResolverConfig['trustedCAs'];\n\treadonly #client: KeetaNetClient.Client;\n\treadonly #logger: Logger | undefined;\n\treadonly #url: URL;\n\treadonly #resolver: Resolver;\n\treadonly #stats: ResolverStats;\n\tprivate readonly seenURLs: Set<string>;\n\n\tprivate static readonly instanceTypeID = 'Metadata:c85b3d67-9548-4042-9862-f6e6677690ac';\n\n\tstatic isInstance(value: unknown): value is Metadata {\n\t\tif (typeof value !== 'object' || value === null) {\n\t\t\treturn(false);\n\t\t}\n\t\tif (!('instanceID' in value)) {\n\t\t\treturn(false);\n\t\t}\n\n\t\treturn(value.instanceID === Metadata.instanceTypeID);\n\t}\n\n\t/**\n\t * Format the supplied Metadata as appropriate to be included\n\t * within the Metadata field of a KeetaNet acccount to serve\n\t * as the Metadata for the Resolver.\n\t */\n\tstatic formatMetadata(metadata: ToJSONValuizable<ServiceMetadata>): string;\n\t// eslint-disable-next-line @typescript-eslint/unified-signatures\n\tstatic formatMetadata(metadata: JSONSerializable): string;\n\tstatic formatMetadata(metadata: JSONSerializable | ToJSONValuizable<ServiceMetadata>): string {\n\t\treturn(Buffer.from(JSON.stringify(metadata)).toString('base64'));\n\t}\n\n\t/**\n\t * Assert that the supplied value is a valid Metadata Root Object\n\t */\n\tstatic assertMetadata(value: unknown): asserts value is ToJSONValuizable<ServiceMetadata> {\n\t\tassertServiceMetadata(value);\n\t}\n\n\tconstructor(url: string | URL, config: MetadataConfig) {\n\t\t/*\n\t\t * Define an \"instanceTypeID\" as an unenumerable property to\n\t\t * ensure that we can identify this object as an instance of\n\t\t * Metadata, but we do not need to serialize it.\n\t\t */\n\t\tObject.defineProperty(this, 'instanceTypeID', {\n\t\t\tvalue: Metadata.instanceTypeID,\n\t\t\tenumerable: false\n\t\t});\n\t\tthis.#url = new URL(url);\n\t\tthis.#cache = {\n\t\t\t// eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n\t\t\tinstance: config.cache?.instance ?? new Map() satisfies URLCacheObject as URLCacheObject,\n\t\t\tpositiveTTL: config.cache?.positiveTTL ?? 60 * 1000,\n\t\t\tnegativeTTL: config.cache?.negativeTTL ?? 5 * 1000\n\t\t};\n\t\tthis.#trustedCAs = config.trustedCAs;\n\t\tthis.#client = config.client;\n\t\tthis.#logger = config.logger;\n\t\tthis.#resolver = config.resolver;\n\t\tthis.#stats = this.#resolver._mutableStats(statsAccessToken);\n\t\tif (config.parent !== undefined) {\n\t\t\tthis.seenURLs = config.parent.seenURLs;\n\t\t} else {\n\t\t\tthis.seenURLs = new Set();\n\t\t}\n\t}\n\n\tprivate async parseMetadata(metadata: string) {\n\t\t/*\n\t\t * JSON.parse() will always return a JSONSerializable,\n\t\t * and not `unknown`, so we can safely cast it.\n\t\t */\n\t\t// eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n\t\tconst retval = await this.resolveValue(JSON.parse(metadata) as JSONSerializable);\n\n\t\treturn(retval);\n\t}\n\n\tprivate async readKeetaNetURL(url: URL): Promise<JSONSerializable> {\n\t\tconst accountString = url.hostname;\n\t\tconst path = url.pathname;\n\n\t\tthis.#stats.keetanet.reads++;\n\n\t\tif (path !== '/metadata') {\n\t\t\tthrow(new Error(`Unsupported path: ${path}`));\n\t\t}\n\n\t\tlet account: KeetaNetAccount | string;\n\t\ttry {\n\t\t\taccount = KeetaNetClient.lib.Account.fromPublicKeyString(accountString);\n\t\t} catch {\n\t\t\treturn('');\n\t\t}\n\n\t\tconst accountInfo = await this.#client.getAccountInfo(account);\n\t\tconst metadata = Buffer.from(accountInfo.info.metadata, 'base64').toString('utf-8');\n\t\tif (metadata === '') {\n\t\t\treturn('');\n\t\t}\n\n\t\tthis.#logger?.debug(`Resolver:${this.#resolver.id}`, 'Account info for', accountString, '=', accountInfo.info);\n\t\tconst retval = await this.parseMetadata(metadata);\n\t\treturn(retval);\n\t}\n\n\tprivate async readHTTPSURL(url: URL): Promise<JSONSerializable> {\n\t\tthis.#stats.https.reads++;\n\n\t\tconst results = await fetch(url.toString(), {\n\t\t\tmethod: 'GET',\n\t\t\theaders: {\n\t\t\t\t'Accept': 'application/json'\n\t\t\t}\n\t\t});\n\n\t\tif (!results.ok) {\n\t\t\tthrow(new Error(`Error HTTP status ${results.status} ${results.statusText} for ${url.toString()}`));\n\t\t}\n\n\t\tif (results.status === 204) {\n\t\t\t/*\n\t\t\t * 204 No Content is a valid response, so we return an empty\n\t\t\t * object.\n\t\t\t */\n\t\t\treturn({});\n\t\t}\n\n\t\tif (results.status !== 200) {\n\t\t\tthrow(new Error(`Unexpected HTTP status ${results.status} for ${url.toString()}`));\n\t\t}\n\n\t\tconst metadata = JSON.stringify(await results.json());\n\n\t\tthis.#logger?.debug(`Resolver:${this.#resolver.id}`, 'Read URL', url.toString(), ':', metadata);\n\n\t\tconst retval = await this.parseMetadata(metadata);\n\n\t\treturn(retval);\n\t}\n\n\tprivate async readURL(url: URL) {\n\t\tthis.#stats.reads++;\n\n\t\tconst cacheKey = url.toString();\n\t\t/*\n\t\t * To ensure any circular references are handled correctly, we\n\t\t * keep track of a chain of accessed URLs. If we see the same\n\t\t * URL twice, then we have a circular reference.\n\t\t */\n\t\tif (this.seenURLs.has(cacheKey)) {\n\t\t\treturn('');\n\t\t}\n\t\tthis.seenURLs.add(cacheKey);\n\n\t\t/*\n\t\t * Verify that the cache entry is still valid. If it is not,\n\t\t * then remove it from the cache.\n\t\t */\n\t\tlet cacheVal = this.#cache.instance.get(cacheKey);\n\n\t\tif (this.#cache.instance.has(cacheKey) && cacheVal !== undefined) {\n\t\t\tif (cacheVal.expires < new Date()) {\n\t\t\t\tthis.#cache.instance.delete(cacheKey);\n\t\t\t\tcacheVal = undefined;\n\t\t\t}\n\t\t}\n\n\t\tif (cacheVal !== undefined) {\n\t\t\tthis.#stats.cache.hit++;\n\n\t\t\tif (cacheVal.pass) {\n\t\t\t\treturn(cacheVal.value);\n\t\t\t} else {\n\t\t\t\tthrow(cacheVal.error);\n\t\t\t}\n\t\t}\n\n\t\tthis.#stats.cache.miss++;\n\n\t\tlet retval: JSONSerializable;\n\t\ttry {\n\t\t\tconst protocol = url.protocol;\n\t\t\tif (protocol === 'keetanet:') {\n\t\t\t\tretval = await this.readKeetaNetURL(url);\n\t\t\t} else if (protocol === 'https:') {\n\t\t\t\tretval = await this.readHTTPSURL(url);\n\t\t\t} else {\n\t\t\t\tthis.#stats.unsupported.reads++;\n\t\t\t\tthrow(new Error(`Unsupported protocol: ${protocol}`));\n\t\t\t}\n\t\t} catch (readError) {\n\t\t\tthis.#cache.instance.set(cacheKey, {\n\t\t\t\tpass: false,\n\t\t\t\terror: readError,\n\t\t\t\texpires: new Date(Date.now() + this.#cache.negativeTTL)\n\t\t\t});\n\n\t\t\tthis.#logger?.debug(`Resolver:${this.#resolver.id}`, 'Read URL', url.toString(), 'failed:', readError);\n\t\t\tthrow(readError);\n\t\t}\n\n\t\tthis.#logger?.debug(`Resolver:${this.#resolver.id}`, 'Read URL', url.toString(), ':', retval);\n\n\t\tthis.#cache.instance.set(cacheKey, {\n\t\t\tpass: true,\n\t\t\tvalue: retval,\n\t\t\texpires: new Date(Date.now() + this.#cache.positiveTTL)\n\t\t});\n\n\t\treturn(retval);\n\t}\n\n\tprivate async resolveValue<T extends ExternalURL | undefined>(value: T): Promise<JSONSerializable>;\n\tprivate async resolveValue<T extends JSONSerializable | undefined>(value: T): Promise<T>;\n\tprivate async resolveValue<T extends JSONSerializable | ExternalURL | undefined>(value: T): Promise<T | JSONSerializable> {\n\t\tif (value === undefined) {\n\t\t\treturn(value);\n\t\t}\n\n\t\t/*\n\t\t * If the value passed in is a reference to an external URL, then\n\t\t * we need to read that URL (and continue to resolve it).\n\t\t */\n\t\tif (isExternalURL(value)) {\n\t\t\tconst url = new URL(value.url);\n\t\t\tconst retval = await this.readURL(url);\n\n\t\t\treturn(await this.resolveValue(retval));\n\t\t}\n\n\t\treturn(value);\n\t}\n\n\tprivate assertValuizableKind(input: ValuizeInput, expect: ValuizableKind) {\n\t\tswitch (expect) {\n\t\t\tcase 'any':\n\t\t\t\treturn(input);\n\t\t\tcase 'object':\n\t\t\t\tif (typeof input !== 'object') {\n\t\t\t\t\tthrow(new Error(`expected an object, got ${typeof input}`));\n\t\t\t\t}\n\n\t\t\t\tif (input === null) {\n\t\t\t\t\tthrow(new Error('expected an object, got null'));\n\t\t\t\t}\n\n\t\t\t\tif (Array.isArray(input)) {\n\t\t\t\t\tthrow(new Error('expected an object, got an array'));\n\t\t\t\t}\n\n\t\t\t\treturn(input);\n\t\t\tcase 'array':\n\t\t\t\tif (!Array.isArray(input)) {\n\t\t\t\t\tthrow(new Error(`expected an array, got ${typeof input}`));\n\t\t\t\t}\n\n\t\t\t\treturn(input);\n\t\t\tcase 'primitive':\n\t\t\t\tif ((typeof input === 'object' && input !== null) || input === undefined) {\n\t\t\t\t\tthrow(new Error(`expected a primitive, got ${typeof input}`));\n\t\t\t\t}\n\n\t\t\t\treturn(input);\n\t\t\tcase 'string':\n\t\t\tcase 'number':\n\t\t\tcase 'boolean':\n\t\t\t\tif (typeof input !== expect) {\n\t\t\t\t\tthrow(new Error(`expected a ${expect}, got ${typeof input}`));\n\t\t\t\t}\n\t\t\t\treturn(input);\n\t\t\tdefault:\n\t\t\t\tassertNever(expect);\n\t\t}\n\t}\n\n\tprivate async valuize(value: JSONSerializable): Promise<ValuizeInput> {\n\t\tif (typeof value === 'object' && value !== null) {\n\t\t\tlet newValue: ValuizableObject | ValuizableArray;\n\t\t\tif (Array.isArray(value)) {\n\t\t\t\tnewValue = [];\n\t\t\t} else {\n\t\t\t\tnewValue = {};\n\t\t\t}\n\t\t\tfor (const key in value) {\n\t\t\t\t/*\n\t\t\t\t * Since `key` is the index of the array or\n\t\t\t\t * object, it is safe to use it to index\n\t\t\t\t * into the array or object.\n\t\t\t\t */\n\t\t\t\t// @ts-ignore\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n\t\t\t\tconst keyValue: JSONSerializable = value[key];\n\n\t\t\t\tif (isExternalURL(keyValue)) {\n\t\t\t\t\tconst newMetadataObject = new Metadata(keyValue.url, {\n\t\t\t\t\t\ttrustedCAs: this.#trustedCAs,\n\t\t\t\t\t\tclient: this.#client,\n\t\t\t\t\t\tlogger: this.#logger,\n\t\t\t\t\t\tresolver: this.#resolver,\n\t\t\t\t\t\tcache: this.#cache,\n\t\t\t\t\t\tparent: this\n\t\t\t\t\t});\n\n\t\t\t\t\tconst newValuizableObject: ValuizableMethod = newMetadataObject.value.bind(newMetadataObject);\n\n\t\t\t\t\tif (Array.isArray(newValue)) {\n\t\t\t\t\t\tthrow(new Error('internal error: newValue is an array, but it should be an object since it is an external field, which can only be an object'));\n\t\t\t\t\t}\n\t\t\t\t\tnewValue[key] = newValuizableObject;\n\t\t\t\t} else {\n\t\t\t\t\t/*\n\t\t\t\t\t * This is safe because `assertValuizableKind` will\n\t\t\t\t\t * ensure the correct output type\n\t\t\t\t\t */\n\t\t\t\t\t// @ts-ignore\n\t\t\t\t\tconst newValueEntry: ValuizableMethod = async (expect: ValuizableKind = 'any') => {\n\t\t\t\t\t\tconst retval = this.assertValuizableKind(await this.valuize(keyValue), expect);\n\t\t\t\t\t\treturn(retval);\n\t\t\t\t\t};\n\n\t\t\t\t\t/*\n\t\t\t\t\t * TypeScript doesn't track that `key`\n\t\t\t\t\t * is a valid index regardless of the\n\t\t\t\t\t * type of `newValue` is an array or an\n\t\t\t\t\t * object, so we need to use `@ts-ignore`\n\t\t\t\t\t */\n\t\t\t\t\t// @ts-ignore\n\t\t\t\t\tnewValue[key] = newValueEntry;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn(newValue);\n\t\t} else {\n\t\t\treturn(value);\n\t\t}\n\t}\n\n\tasync value(expect: 'object'): Promise<ValuizableObject>;\n\tasync value(expect: 'array'): Promise<ValuizableArray>;\n\tasync value(expect: 'primitive'): Promise<JSONSerializablePrimitive>;\n\tasync value(expect: 'string'): Promise<string>;\n\tasync value(expect: 'number'): Promise<number>;\n\tasync value(expect: 'boolean'): Promise<boolean>;\n\tasync value(expect: 'any'): Promise<ValuizeInput>;\n\tasync value(expect?: ValuizableKind): Promise<ValuizeInput>;\n\tasync value(expect: ValuizableKind = 'any'): Promise<ValuizeInput> {\n\t\tconst value = await this.readURL(this.#url);\n\n\t\tconst retval = this.assertValuizableKind(await this.valuize(value), expect);\n\n\t\treturn(retval);\n\t}\n}\n\n\ntype ResolverStats = {\n\tkeetanet: {\n\t\treads: number;\n\t};\n\thttps: {\n\t\treads: number;\n\t};\n\tunsupported: {\n\t\treads: number;\n\t};\n\treads: number;\n\tcache: {\n\t\thit: number;\n\t\tmiss: number;\n\t}\n};\n\nfunction assertValidCountryCodes(input: unknown): asserts input is { countryCodes: ToValuizableObject<NonNullable<ServiceMetadata['services']['banking']>[string]>['countryCodes'] } {\n\tif (typeof input !== 'object' || input === null) {\n\t\tthrow(new Error(`Expected an object, got ${typeof input}`));\n\t}\n\n\tif (!('countryCodes' in input)) {\n\t\tthrow(new Error('Expected \"countryCodes\" to be present, but it was not found'));\n\t}\n\n\tif (typeof input.countryCodes !== 'function' && !Array.isArray(input.countryCodes)) {\n\t\tthrow(new Error(`Expected \"countryCodes\" to be an array | function, got ${typeof input.countryCodes}`));\n\t}\n\n\tif (Array.isArray(input.countryCodes)) {\n\t\tfor (const countryCode of input.countryCodes) {\n\t\t\tif (typeof countryCode !== 'string') {\n\t\t\t\tthrow(new Error(`Expected \"countryCodes\" to be an array of strings, got ${typeof countryCode}`));\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction assertValidOptionalCountryCodes(input: unknown): asserts input is { countryCodes?: ToValuizableObject<NonNullable<ServiceMetadata['services']['banking']>[string]>['countryCodes'] } {\n\tif (typeof input !== 'object' || input === null) {\n\t\tthrow(new Error(`Expected an object, got ${typeof input}`));\n\t}\n\n\tif (!('countryCodes' in input)) {\n\t\treturn;\n\t}\n\n\tassertValidCountryCodes(input);\n}\n\nfunction assertValidCurrencyCodes(input: unknown): asserts input is { currencyCodes: ToValuizableObject<NonNullable<ServiceMetadata['services']['banking']>[string]>['currencyCodes'] } {\n\tif (typeof input !== 'object' || input === null) {\n\t\tthrow(new Error(`Expected an object, got ${typeof input}`));\n\t}\n\n\tif (!('currencyCodes' in input)) {\n\t\tthrow(new Error('Expected \"currencyCodes\" to be present, but it was not found'));\n\t}\n\n\tif (typeof input.currencyCodes !== 'function' && !Array.isArray(input.currencyCodes)) {\n\t\tthrow(new Error(`Expected \"currencyCodes\" to be an array | function, got ${typeof input.currencyCodes}`));\n\t}\n\n\tif (Array.isArray(input.currencyCodes)) {\n\t\tfor (const currencyCode of input.currencyCodes) {\n\t\t\tif (typeof currencyCode !== 'string') {\n\t\t\t\tthrow(new Error(`Expected \"currencyCodes\" to be an array of strings, got ${typeof currencyCode}`));\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction assertValidOperationsBanking(input: unknown): asserts input is { operations: ToValuizableObject<NonNullable<ServiceMetadata['services']['banking']>[string]>['operations'] } {\n\tif (typeof input !== 'object' || input === null) {\n\t\tthrow(new Error(`Expected an object, got ${typeof input}`));\n\t}\n\n\tif (!('operations' in input)) {\n\t\tthrow(new Error('Expected \"operations\" key in KYC service, but it was not found'));\n\t}\n\n\tif ((typeof input.operations !== 'object' || input.operations === null) && typeof input.operations !== 'function') {\n\t\tthrow(new Error(`Expected \"operations\" to be an object | function, got ${typeof input.operations}`));\n\t}\n\n\tif (typeof input.operations !== 'function') {\n\t\tfor (const [operation, operationValue] of Object.entries(input.operations)) {\n\t\t\tif (typeof operation !== 'string') {\n\t\t\t\tthrow(new Error(`Expected \"operations\" to be an object with string keys, got ${typeof operation}`));\n\t\t\t}\n\n\t\t\tif (typeof operationValue !== 'string') {\n\t\t\t\tthrow(new Error(`Expected \"operations.${operation}\" to be a string, got ${typeof operationValue}`));\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction assertValidOperationsKYC(input: unknown): asserts input is { operations: ToValuizableObject<NonNullable<ServiceMetadata['services']['kyc']>[string]>['operations'] } {\n\tassertValidOperationsBanking(input);\n}\n\nfunction assertValidOptionalKYCProviders(input: unknown): asserts input is { kycProviders?: ToValuizableObject<NonNullable<ServiceMetadata['services']['banking']>[string]>['kycProviders'] } {\n\tif (typeof input !== 'object' || input === null) {\n\t\tthrow(new Error(`Expected an object, got ${typeof input}`));\n\t}\n\n\tif ('kycProviders' in input) {\n\t\tif (typeof input.kycProviders !== 'function' && !Array.isArray(input.kycProviders)) {\n\t\t\tthrow(new Error(`Expected \"kycProviders\" to be an array | function, got ${typeof input.kycProviders}`));\n\t\t}\n\n\t\tif (Array.isArray(input.kycProviders)) {\n\t\t\tfor (const kycProvider of input.kycProviders) {\n\t\t\t\tif (typeof kycProvider !== 'string') {\n\t\t\t\t\tthrow(new Error(`Expected \"kycProviders\" to be an array of strings, got ${typeof kycProvider}`));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction assertValidCA(input: unknown): asserts input is { ca: ToValuizableObject<NonNullable<ServiceMetadata['services']['kyc']>[string]>['ca'] } {\n\tif (typeof input !== 'object' || input === null) {\n\t\tthrow(new Error(`Expected an object, got ${typeof input}`));\n\t}\n\n\tif (!('ca' in input)) {\n\t\tthrow(new Error('Expected \"ca\" key in KYC service, but it was not found'));\n\t}\n\n\tif (typeof input.ca !== 'string' && typeof input.ca !== 'function') {\n\t\tthrow(new Error(`Expected \"ca\" to be a string | function, got ${typeof input.ca}`));\n\t}\n}\n\ntype ResolverLookupBankingResults = { [id: string]: ToValuizableObject<NonNullable<ServiceMetadata['services']['banking']>[string]> };\ntype ResolverLookupKYCResults = { [id: string]: ToValuizableObject<NonNullable<ServiceMetadata['services']['kyc']>[string]> };\nconst assertResolverLookupBankingResult = function(input: unknown): ResolverLookupBankingResults[string] {\n\tassertValidOperationsBanking(input);\n\tassertValidCountryCodes(input);\n\tassertValidCurrencyCodes(input);\n\tassertValidOptionalKYCProviders(input);\n\n\treturn(input);\n\n};\nconst assertResolverLookupKYCResult = function(input: unknown): ResolverLookupKYCResults[string] {\n\tassertValidOperationsKYC(input);\n\tassertValidOptionalCountryCodes(input);\n\tassertValidCA(input);\n\n\treturn(input);\n};\n\nclass Resolver {\n\treadonly #root: ResolverConfig['root'];\n\treadonly #trustedCAs: ResolverConfig['trustedCAs'];\n\treadonly #client: KeetaNetClient.Client;\n\treadonly #logger: Logger | undefined;\n\treadonly #stats: ResolverStats;\n\treadonly #metadataCache: NonNullable<MetadataConfig['cache']>;\n\n\treadonly id: string;\n\n\tstatic readonly Metadata: typeof Metadata = Metadata;\n\n\tconstructor(config: ResolverConfig) {\n\t\tthis.#root = config.root;\n\t\tthis.#trustedCAs = config.trustedCAs;\n\t\tthis.#logger = config.logger;\n\t\tthis.#metadataCache = {\n\t\t\t...config.cache,\n\t\t\tinstance: new Map()\n\t\t};\n\n\t\tthis.id = config.id ?? crypto.randomUUID();\n\n\t\tthis.#logger?.debug(`Resolver:${this.id}`, 'Creating resolver with root account', this.#root.publicKeyString.get());\n\n\t\tif (KeetaNetClient.Client.isInstance(config.client)) {\n\t\t\tthis.#client = config.client;\n\t\t} else {\n\t\t\tthis.#client = config.client.client;\n\t\t}\n\n\t\tthis.#stats = {\n\t\t\tkeetanet: {\n\t\t\t\treads: 0\n\t\t\t},\n\t\t\thttps: {\n\t\t\t\treads: 0\n\t\t\t},\n\t\t\tunsupported: {\n\t\t\t\treads: 0\n\t\t\t},\n\t\t\treads: 0,\n\t\t\tcache: {\n\t\t\t\thit: 0,\n\t\t\t\tmiss: 0\n\t\t\t}\n\t\t};\n\t}\n\n\t/** @internal */\n\t_mutableStats(accessToken: symbol) {\n\t\tif (accessToken !== statsAccessToken) {\n\t\t\tthrow(new Error('Invalid access token'));\n\t\t}\n\n\t\treturn(this.#stats);\n\t}\n\n\tget stats(): ResolverStats {\n\t\treturn(structuredClone(this.#stats));\n\t}\n\n\tprivate async lookupBankingServices(bankingServices: ValuizableObject | undefined, criteria: ServiceSearchCriteria<'banking'>) {\n\t\tif (bankingServices === undefined) {\n\t\t\treturn(undefined);\n\t\t}\n\n\t\tconst retval: ResolverLookupBankingResults = {};\n\t\tfor (const checkBankingServiceID in bankingServices) {\n\t\t\ttry {\n\t\t\t\tconst checkBankingService = await bankingServices[checkBankingServiceID]?.('object');\n\t\t\t\tif (checkBankingService === undefined) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif (!('operations' in checkBankingService)) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif (criteria.currencyCodes !== undefined) {\n\t\t\t\t\tconst currencyCodes = await checkBankingService.currencyCodes?.('array') ?? [];\n\t\t\t\t\tconst checkBankingServiceCurrencyCodes = await Promise.all(currencyCodes.map(async function(item) {\n\t\t\t\t\t\treturn(await item?.('primitive'));\n\t\t\t\t\t}));\n\n\t\t\t\t\tlet acceptable = true;\n\t\t\t\t\tfor (const checkCurrencyCode of criteria.currencyCodes) {\n\t\t\t\t\t\tconst checkCurrencyCodeCanonical = convertToCurrencySearchCanonical(checkCurrencyCode);\n\t\t\t\t\t\tif (!checkBankingServiceCurrencyCodes.includes(checkCurrencyCodeCanonical)) {\n\t\t\t\t\t\t\tacceptable = false;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!acceptable) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (criteria.countryCodes !== undefined) {\n\t\t\t\t\tconst countryCodes = await checkBankingService.countryCodes?.('array') ?? [];\n\t\t\t\t\tconst checkBankingServiceCountryCodes = await Promise.all(countryCodes.map(async function(item) {\n\t\t\t\t\t\treturn(await item?.('primitive'));\n\t\t\t\t\t}));\n\t\t\t\t\tthis.#logger?.debug(`Resolver:${this.id}`, 'Checking country codes:', criteria.countryCodes, 'against', checkBankingServiceCountryCodes, 'for', checkBankingServiceID);\n\n\t\t\t\t\tlet acceptable = true;\n\t\t\t\t\tfor (const checkCountryCode of criteria.countryCodes) {\n\t\t\t\t\t\tconst checkCountryCodeCanonical = convertToCountrySearchCanonical(checkCountryCode);\n\t\t\t\t\t\tif (!checkBankingServiceCountryCodes.includes(checkCountryCodeCanonical)) {\n\t\t\t\t\t\t\tacceptable = false;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!acceptable) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tretval[checkBankingServiceID] = assertResolverLookupBankingResult(checkBankingService);\n\t\t\t} catch (checkBankingServiceError) {\n\t\t\t\tthis.#logger?.debug(`Resolver:${this.id}`, 'Error checking banking service', checkBankingServiceID, ':', checkBankingServiceError, ' -- ignoring');\n\t\t\t}\n\t\t}\n\n\t\tif (Object.keys(retval).length === 0) {\n\t\t\t/*\n\t\t\t * If we didn't find any banking services, then we return\n\t\t\t * undefined to indicate that no services were found.\n\t\t\t */\n\t\t\treturn(undefined);\n\t\t}\n\n\t\treturn(retval);\n\t}\n\n\tprivate async lookupKYCServices(kycServices: ValuizableObject | undefined, criteria: ServiceSearchCriteria<'kyc'>) {\n\t\tif (kycServices === undefined) {\n\t\t\treturn(undefined);\n\t\t}\n\n\t\tconst retval: ResolverLookupKYCResults = {};\n\t\tfor (const checkKYCServiceID in kycServices) {\n\t\t\ttry {\n\t\t\t\tconst checkKYCService = await kycServices[checkKYCServiceID]?.('object');\n\t\t\t\tif (checkKYCService === undefined) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif (!('operations' in checkKYCService)) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif (criteria.countryCodes !== undefined) {\n\t\t\t\t\tlet acceptable = true;\n\t\t\t\t\t/*\n\t\t\t\t\t * If the KYC service does not have a countryCodes\n\t\t\t\t\t * property, then it can validate accounts in any\n\t\t\t\t\t * country, so we skip this check.\n\t\t\t\t\t */\n\t\t\t\t\tif ('countryCodes' in checkKYCService) {\n\t\t\t\t\t\tconst countryCodes = await checkKYCService.countryCodes?.('array') ?? [];\n\t\t\t\t\t\tconst checkKYCServiceCountryCodes = await Promise.all(countryCodes.map(async function(item) {\n\t\t\t\t\t\t\treturn(await item?.('string'));\n\t\t\t\t\t\t}));\n\t\t\t\t\t\tthis.#logger?.debug(`Resolver:${this.id}`, 'Checking country codes:', criteria.countryCodes, 'against', checkKYCServiceCountryCodes, 'for', checkKYCServiceID);\n\n\t\t\t\t\t\tfor (const checkCountryCode of criteria.countryCodes) {\n\t\t\t\t\t\t\tconst checkCountryCodeCanonical = convertToCountrySearchCanonical(checkCountryCode);\n\t\t\t\t\t\t\tif (!checkKYCServiceCountryCodes.includes(checkCountryCodeCanonical)) {\n\t\t\t\t\t\t\t\tacceptable = false;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!acceptable) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tretval[checkKYCServiceID] = assertResolverLookupKYCResult(checkKYCService);\n\t\t\t} catch (checkKYCServiceError) {\n\t\t\t\tthis.#logger?.debug(`Resolver:${this.id}`, 'Error checking KYC service', checkKYCServiceID, ':', checkKYCServiceError, ' -- ignoring');\n\t\t\t}\n\t\t}\n\n\t\tif (Object.keys(retval).length === 0) {\n\t\t\t/*\n\t\t\t * If we didn't find any banking services, then we return\n\t\t\t * undefined to indicate that no services were found.\n\t\t\t */\n\t\t\treturn(undefined);\n\t\t}\n\n\t\treturn(retval);\n\t}\n\n\tasync lookup<T extends 'banking'>(service: T, criteria: ServiceSearchCriteria<'banking'>): Promise<ResolverLookupBankingResults | undefined>;\n\tasync lookup<T extends 'kyc'>(service: T, criteria: ServiceSearchCriteria<'kyc'>): Promise<ResolverLookupKYCResults | undefined>;\n\tasync lookup<T extends Services>(service: T, criteria: ServiceSearchCriteria<T>): Promise<ResolverLookupBankingResults | ResolverLookupKYCResults | undefined>;\n\tasync lookup<T extends Services>(service: T, criteria: ServiceSearchCriteria<T>): Promise<ResolverLookupBankingResults | ResolverLookupKYCResults | undefined> {\n\t\tconst rootURL = new URL(`keetanet://${this.#root.publicKeyString.get()}/metadata`);\n\t\tconst metadata = new Metadata(rootURL, {\n\t\t\ttrustedCAs: this.#trustedCAs,\n\t\t\tclient: this.#client,\n\t\t\tlogger: this.#logger,\n\t\t\tresolver: this,\n\t\t\tcache: this.#metadataCache\n\t\t});\n\t\tconst rootMetadata = await metadata.value('object');\n\t\tthis.#logger?.debug(`Resolver:${this.id}`, 'Root Metadata:', rootMetadata);\n\n\t\tif (!('version' in rootMetadata)) {\n\t\t\tthrow(new Error('Root metadata is missing \"version\" property'));\n\t\t}\n\n\t\tconst rootMetadataVersion = await rootMetadata.version?.('primitive');\n\t\tif (rootMetadataVersion !== 1) {\n\t\t\tthrow(new Error(`Unsupported metadata version: ${rootMetadataVersion}`));\n\t\t}\n\n\t\t/*\n\t\t * Get the services object\n\t\t */\n\t\tconst definedServicesProperty = rootMetadata.services;\n\t\tif (definedServicesProperty === undefined) {\n\t\t\tthrow(new Error('Root metadata is missing \"services\" property'));\n\t\t}\n\t\tconst definedServices = await definedServicesProperty('object');\n\n\t\t/*\n\t\t * We need to create a link between the service type and the\n\t\t * search criteria type, so we can use the correct type\n\t\t * for the criteria -- to do that we create an object\n\t\t * that links them together.\n\t\t */\n\t\ttype LookupArgs = {\n\t\t\t[S in Services]: { service: S; criteria: ServiceSearchCriteria<S> }\n\t\t}[Services];\n\t\t// eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n\t\tconst args = { service, criteria } as LookupArgs;\n\n\t\tthis.#logger?.debug(`Resolver:${this.id}`, 'Looking up', args.service, 'with criteria:', args.criteria, 'in', definedServices);\n\t\tswitch (args.service) {\n\t\t\tcase 'banking': {\n\t\t\t\tconst currentCriteria = args.criteria;\n\t\t\t\tconst bankingServices = await definedServices.banking?.('object');\n\t\t\t\tthis.#logger?.debug(`Resolver:${this.id}`, 'Banking Services:', bankingServices);\n\n\t\t\t\treturn(await this.lookupBankingServices(bankingServices, currentCriteria));\n\t\t\t}\n\t\t\tcase 'kyc': {\n\t\t\t\tconst currentCriteria = args.criteria;\n\t\t\t\tconst kycServices = await definedServices.kyc?.('object');\n\t\t\t\tthis.#logger?.debug(`Resolver:${this.id}`, 'KYC Services:', kycServices);\n\n\t\t\t\treturn(await this.lookupKYCServices(kycServices, currentCriteria));\n\t\t\t}\n\t\t\tcase 'fx':\n\t\t\tcase 'inbound':\n\t\t\tcase 'outbound':\n\t\t\tcase 'cards':\n\t\t\t\tthrow(new Error('not implemented'));\n\t\t\tdefault:\n\t\t\t\tassertNever(args);\n\t\t}\n\t}\n\n\tclearCache(): void {\n\t\tthis.#metadataCache.instance.clear();\n\t\tthis.#stats.cache.hit = 0;\n\t\tthis.#stats.cache.miss = 0;\n\t\tthis.#stats.https.reads = 0;\n\t\tthis.#stats.keetanet.reads = 0;\n\t\tthis.#stats.unsupported.reads = 0;\n\t\tthis.#stats.reads = 0;\n\t}\n}\n\nexport default Resolver;\nexport type {\n\tServiceMetadata,\n\tServiceSearchCriteria,\n\tServices\n};\n"]}
@@ -0,0 +1,10 @@
1
+ type Grow<T, A extends T[]> = ((x: T, ...xs: A) => void) extends ((...a: infer X) => void) ? X : never;
2
+ type GrowToSize<T, A extends T[], N extends number> = {
3
+ 0: A;
4
+ 1: GrowToSize<T, Grow<T, A>, N>;
5
+ }[A['length'] extends N ? 0 : 1];
6
+ type FixedLengthArray<T, N extends number> = GrowToSize<T, [], N>;
7
+ export declare function isArray<Length extends number>(input: unknown, len: Length): input is FixedLengthArray<unknown, Length>;
8
+ export declare function isArray(input: unknown, len?: number): input is unknown[];
9
+ export {};
10
+ //# sourceMappingURL=array.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"array.d.ts","sourceRoot":"","sources":["../../../src/lib/utils/array.ts"],"names":[],"mappings":"AAAA,KAAK,IAAI,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AACvG,KAAK,UAAU,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC,SAAS,MAAM,IAAI;IAAE,CAAC,EAAE,CAAC,CAAC;IAAC,CAAC,EAAE,UAAU,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;CAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC/H,KAAK,gBAAgB,CAAC,CAAC,EAAE,CAAC,SAAS,MAAM,IAAI,UAAU,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;AAElE,wBAAgB,OAAO,CAAC,MAAM,SAAS,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,GAAG,KAAK,IAAI,gBAAgB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;AACxH,wBAAgB,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,KAAK,IAAI,OAAO,EAAE,CAAC"}
@@ -0,0 +1,12 @@
1
+ export function isArray(input, len) {
2
+ if (!Array.isArray(input)) {
3
+ return (false);
4
+ }
5
+ if (len !== undefined) {
6
+ if (input.length !== len) {
7
+ return (false);
8
+ }
9
+ }
10
+ return (true);
11
+ }
12
+ //# sourceMappingURL=array.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"array.js","sourceRoot":"","sources":["../../../src/lib/utils/array.ts"],"names":[],"mappings":"AAMA,MAAM,UAAU,OAAO,CAAC,KAAc,EAAE,GAAY;IACnD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAC3B,OAAM,CAAC,KAAK,CAAC,CAAC;IACf,CAAC;IAED,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;QACvB,IAAI,KAAK,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YAC1B,OAAM,CAAC,KAAK,CAAC,CAAC;QACf,CAAC;IACF,CAAC;IAED,OAAM,CAAC,IAAI,CAAC,CAAC;AACd,CAAC","sourcesContent":["type Grow<T, A extends T[]> = ((x: T, ...xs: A) => void) extends ((...a: infer X) => void) ? X : never;\ntype GrowToSize<T, A extends T[], N extends number> = { 0: A, 1: GrowToSize<T, Grow<T, A>, N> }[A['length'] extends N ? 0 : 1];\ntype FixedLengthArray<T, N extends number> = GrowToSize<T, [], N>;\n\nexport function isArray<Length extends number>(input: unknown, len: Length): input is FixedLengthArray<unknown, Length>;\nexport function isArray(input: unknown, len?: number): input is unknown[];\nexport function isArray(input: unknown, len?: number): input is unknown[] {\n\tif (!Array.isArray(input)) {\n\t\treturn(false);\n\t}\n\n\tif (len !== undefined) {\n\t\tif (input.length !== len) {\n\t\t\treturn(false);\n\t\t}\n\t}\n\n\treturn(true);\n}\n"]}
@@ -0,0 +1,13 @@
1
+ import { lib as KeetaNetLib } from '@keetanetwork/keetanet-client';
2
+ import type * as ASN1Types from '@keetanetwork/keetanet-client/lib/utils/asn1.ts';
3
+ declare const ASN1: typeof KeetaNetLib.Utils.ASN1;
4
+ declare const ASN1toJS: typeof ASN1.ASN1toJS;
5
+ declare const JStoASN1: typeof ASN1.JStoASN1;
6
+ declare const BufferStorageASN1: typeof ASN1.BufferStorageASN1;
7
+ declare const ValidateASN1: typeof ASN1.ValidateASN1;
8
+ type ASN1AnyJS = ASN1Types.ASN1AnyJS;
9
+ type Schema = ASN1Types.ValidateASN1.Schema;
10
+ type SchemaMap<T extends Schema> = ASN1Types.ValidateASN1.SchemaMap<T>;
11
+ export type { ASN1AnyJS, Schema, SchemaMap };
12
+ export { ASN1toJS, JStoASN1, BufferStorageASN1, ValidateASN1 };
13
+ //# sourceMappingURL=asn1.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"asn1.d.ts","sourceRoot":"","sources":["../../../src/lib/utils/asn1.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,IAAI,WAAW,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,KAAK,KAAK,SAAS,MAAM,iDAAiD,CAAC;AAQlF,QAAA,MAAM,IAAI,EAAE,OAAO,WAAW,CAAC,KAAK,CAAC,IAA6B,CAAC;AAEnE,QAAA,MAAM,QAAQ,EAAE,OAAO,IAAI,CAAC,QAAwB,CAAC;AACrD,QAAA,MAAM,QAAQ,EAAE,OAAO,IAAI,CAAC,QAAwB,CAAC;AACrD,QAAA,MAAM,iBAAiB,EAAE,OAAO,IAAI,CAAC,iBAA0C,CAAA;AAC/E,QAAA,MAAM,YAAY,EAAE,OAAO,IAAI,CAAC,YAAgC,CAAC;AAEjE,KAAK,SAAS,GAAG,SAAS,CAAC,SAAS,CAAC;AACrC,KAAK,MAAM,GAAG,SAAS,CAAC,YAAY,CAAC,MAAM,CAAC;AAC5C,KAAK,SAAS,CAAC,CAAC,SAAS,MAAM,IAAI,SAAS,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AAEvE,YAAY,EACX,SAAS,EACT,MAAM,EACN,SAAS,EACT,CAAC;AAEF,OAAO,EACN,QAAQ,EACR,QAAQ,EACR,iBAAiB,EACjB,YAAY,EACZ,CAAC"}
@@ -0,0 +1,8 @@
1
+ import { lib as KeetaNetLib } from '@keetanetwork/keetanet-client';
2
+ const ASN1 = KeetaNetLib.Utils.ASN1;
3
+ const ASN1toJS = ASN1.ASN1toJS;
4
+ const JStoASN1 = ASN1.JStoASN1;
5
+ const BufferStorageASN1 = ASN1.BufferStorageASN1;
6
+ const ValidateASN1 = ASN1.ValidateASN1;
7
+ export { ASN1toJS, JStoASN1, BufferStorageASN1, ValidateASN1 };
8
+ //# sourceMappingURL=asn1.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"asn1.js","sourceRoot":"","sources":["../../../src/lib/utils/asn1.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,IAAI,WAAW,EAAE,MAAM,+BAA+B,CAAC;AASnE,MAAM,IAAI,GAAkC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC;AAEnE,MAAM,QAAQ,GAAyB,IAAI,CAAC,QAAQ,CAAC;AACrD,MAAM,QAAQ,GAAyB,IAAI,CAAC,QAAQ,CAAC;AACrD,MAAM,iBAAiB,GAAkC,IAAI,CAAC,iBAAiB,CAAA;AAC/E,MAAM,YAAY,GAA6B,IAAI,CAAC,YAAY,CAAC;AAYjE,OAAO,EACN,QAAQ,EACR,QAAQ,EACR,iBAAiB,EACjB,YAAY,EACZ,CAAC","sourcesContent":["import { lib as KeetaNetLib } from '@keetanetwork/keetanet-client';\nimport type * as ASN1Types from '@keetanetwork/keetanet-client/lib/utils/asn1.ts';\n/*\n * We import this file to make sure that the `asn1js` types are\n * defined, since they are required by the `ASN1toJS` and `JStoASN1`\n */\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nimport type * as _ignored_asn1js from 'asn1js';\n\nconst ASN1: typeof KeetaNetLib.Utils.ASN1 = KeetaNetLib.Utils.ASN1;\n\nconst ASN1toJS: typeof ASN1.ASN1toJS = ASN1.ASN1toJS;\nconst JStoASN1: typeof ASN1.JStoASN1 = ASN1.JStoASN1;\nconst BufferStorageASN1: typeof ASN1.BufferStorageASN1 = ASN1.BufferStorageASN1\nconst ValidateASN1: typeof ASN1.ValidateASN1 = ASN1.ValidateASN1;\n\ntype ASN1AnyJS = ASN1Types.ASN1AnyJS;\ntype Schema = ASN1Types.ValidateASN1.Schema;\ntype SchemaMap<T extends Schema> = ASN1Types.ValidateASN1.SchemaMap<T>;\n\nexport type {\n\tASN1AnyJS,\n\tSchema,\n\tSchemaMap\n};\n\nexport {\n\tASN1toJS,\n\tJStoASN1,\n\tBufferStorageASN1,\n\tValidateASN1\n};\n"]}
@@ -0,0 +1,4 @@
1
+ import { lib as KeetaNetLib } from '@keetanetwork/keetanet-client';
2
+ export type Buffer = InstanceType<typeof KeetaNetLib.Utils.Buffer.Buffer>;
3
+ export declare const Buffer: typeof KeetaNetLib.Utils.Buffer.Buffer;
4
+ //# sourceMappingURL=buffer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"buffer.d.ts","sourceRoot":"","sources":["../../../src/lib/utils/buffer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,IAAI,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAEnE,MAAM,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AAC1E,eAAO,MAAM,MAAM,EAAE,OAAO,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC,MAAwC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { lib as KeetaNetLib } from '@keetanetwork/keetanet-client';
2
+ export const Buffer = KeetaNetLib.Utils.Buffer.Buffer;
3
+ //# sourceMappingURL=buffer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"buffer.js","sourceRoot":"","sources":["../../../src/lib/utils/buffer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,IAAI,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAGnE,MAAM,CAAC,MAAM,MAAM,GAA2C,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC","sourcesContent":["import { lib as KeetaNetLib } from '@keetanetwork/keetanet-client';\n\nexport type Buffer = InstanceType<typeof KeetaNetLib.Utils.Buffer.Buffer>;\nexport const Buffer: typeof KeetaNetLib.Utils.Buffer.Buffer = KeetaNetLib.Utils.Buffer.Buffer;\n"]}
@@ -0,0 +1,4 @@
1
+ import { lib as KeetaNetLib } from '@keetanetwork/keetanet-client';
2
+ declare const crypto: typeof KeetaNetLib.Utils.Helper.crypto;
3
+ export default crypto;
4
+ //# sourceMappingURL=crypto.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crypto.d.ts","sourceRoot":"","sources":["../../../src/lib/utils/crypto.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,IAAI,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAEnE,QAAA,MAAM,MAAM,EAAE,OAAO,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC,MAAwC,CAAC;AACvF,eAAe,MAAM,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { lib as KeetaNetLib } from '@keetanetwork/keetanet-client';
2
+ const crypto = KeetaNetLib.Utils.Helper.crypto;
3
+ export default crypto;
4
+ //# sourceMappingURL=crypto.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crypto.js","sourceRoot":"","sources":["../../../src/lib/utils/crypto.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,IAAI,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAEnE,MAAM,MAAM,GAA2C,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC;AACvF,eAAe,MAAM,CAAC","sourcesContent":["import { lib as KeetaNetLib } from '@keetanetwork/keetanet-client';\n\nconst crypto: typeof KeetaNetLib.Utils.Helper.crypto = KeetaNetLib.Utils.Helper.crypto;\nexport default crypto;\n"]}
@@ -0,0 +1,5 @@
1
+ import * as JSON from './json.js';
2
+ import * as Array from './array.js';
3
+ import * as Never from './never.js';
4
+ export { JSON, Array, Never };
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,KAAK,MAAM,YAAY,CAAC;AACpC,OAAO,KAAK,KAAK,MAAM,YAAY,CAAC;AAEpC,OAAO,EACN,IAAI,EACJ,KAAK,EACL,KAAK,EACL,CAAC"}
@@ -0,0 +1,5 @@
1
+ import * as JSON from './json.js';
2
+ import * as Array from './array.js';
3
+ import * as Never from './never.js';
4
+ export { JSON, Array, Never };
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,KAAK,MAAM,YAAY,CAAC;AACpC,OAAO,KAAK,KAAK,MAAM,YAAY,CAAC;AAEpC,OAAO,EACN,IAAI,EACJ,KAAK,EACL,KAAK,EACL,CAAC","sourcesContent":["import * as JSON from './json.js';\nimport * as Array from './array.js';\nimport * as Never from './never.js';\n\nexport {\n\tJSON,\n\tArray,\n\tNever\n};\n"]}
@@ -0,0 +1,8 @@
1
+ import type { JSONSerializable } from '@keetanetwork/keetanet-client/lib/utils/conversion.js';
2
+ export type { JSONSerializable };
3
+ type ConvertToJSONOptions = {
4
+ searchable?: boolean;
5
+ };
6
+ declare function convertToJSONReplacer(this: any, key: string, jsonItem: unknown, options?: ConvertToJSONOptions): JSONSerializable;
7
+ export declare function convertToJSON(input: unknown, options?: Parameters<typeof convertToJSONReplacer>[2]): JSONSerializable;
8
+ //# sourceMappingURL=json.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json.d.ts","sourceRoot":"","sources":["../../../src/lib/utils/json.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uDAAuD,CAAC;AAC9F,YAAY,EAAE,gBAAgB,EAAE,CAAC;AAEjC,KAAK,oBAAoB,GAAG;IAC3B,UAAU,CAAC,EAAE,OAAO,CAAC;CACrB,CAAC;AAGF,iBAAS,qBAAqB,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,GAAE,oBAA4C,GAAG,gBAAgB,CAqKjJ;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,UAAU,CAAC,OAAO,qBAAqB,CAAC,CAAC,CAAC,CAAC,GAAG,gBAAgB,CAKrH"}
@@ -0,0 +1,164 @@
1
+ import { types as nodeUtilsTypes } from 'util';
2
+ import { Buffer } from './buffer.js';
3
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
4
+ function convertToJSONReplacer(key, jsonItem, options = { searchable: false }) {
5
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-unsafe-member-access
6
+ const item = this[key];
7
+ switch (typeof item) {
8
+ case 'string':
9
+ case 'boolean':
10
+ return (item);
11
+ case 'undefined':
12
+ return (String(item));
13
+ case 'symbol':
14
+ return (`[${item.toString()}]`);
15
+ case 'function':
16
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
17
+ if ('toString' in item && typeof item.toString === 'function') {
18
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-unsafe-member-access,@typescript-eslint/no-unsafe-call
19
+ const itemString = item.toString();
20
+ if (itemString.toString().startsWith('class ')) {
21
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
22
+ return (`[Class ${item.name}]`);
23
+ }
24
+ }
25
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
26
+ return (`[Function ${item.name}]`);
27
+ case 'bigint':
28
+ if (item < BigInt(Number.MAX_SAFE_INTEGER) && item > BigInt(Number.MIN_SAFE_INTEGER)) {
29
+ return (Number(item.toString()));
30
+ }
31
+ else {
32
+ if (item < 0n) {
33
+ const absItem = item * -1n;
34
+ if (options.searchable) {
35
+ return (`-0x${absItem.toString(16)}`);
36
+ }
37
+ else {
38
+ return (`-0x${absItem.toString(16)}[=>${item.toString(10)}]`);
39
+ }
40
+ }
41
+ else {
42
+ if (options.searchable) {
43
+ return (`0x${item.toString(16)}`);
44
+ }
45
+ else {
46
+ return (`0x${item.toString(16)}[=>${item.toString(10)}]`);
47
+ }
48
+ }
49
+ }
50
+ case 'number':
51
+ if (options.searchable) {
52
+ if (isNaN(item)) {
53
+ return ('#NaN');
54
+ }
55
+ if (item === -Infinity) {
56
+ return ('#-Inf');
57
+ }
58
+ if (item === Infinity) {
59
+ return ('#Inf');
60
+ }
61
+ return (item);
62
+ }
63
+ if (item === -Infinity) {
64
+ return ('-∞');
65
+ }
66
+ if (item === Infinity) {
67
+ return ('∞');
68
+ }
69
+ if (isNaN(item)) {
70
+ return ('#NaN');
71
+ }
72
+ return (item);
73
+ default:
74
+ /* We handle other cases outside of this switch */
75
+ break;
76
+ }
77
+ if (item === undefined) {
78
+ return (String(item));
79
+ }
80
+ if (item === null) {
81
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-return
82
+ return (item);
83
+ }
84
+ if (Array.isArray(item)) {
85
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-return
86
+ return (item);
87
+ }
88
+ if (nodeUtilsTypes.isDate(item)) {
89
+ if (options.searchable) {
90
+ return (item.toISOString());
91
+ }
92
+ return (`[Date ${item.toISOString()}]`);
93
+ }
94
+ if (Buffer.isBuffer(item)) {
95
+ return (item.toString('base64'));
96
+ }
97
+ if (nodeUtilsTypes.isArrayBuffer(item)) {
98
+ return (Buffer.from(item).toString('base64'));
99
+ }
100
+ if (item instanceof Promise) {
101
+ return ('[Promise]');
102
+ }
103
+ if (!(item instanceof Object)) {
104
+ throw (new Error(`internal error: Unknown type ${typeof item}`));
105
+ }
106
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access,@typescript-eslint/no-unsafe-member-access
107
+ if ('publicKeyString' in item && typeof item.publicKeyString === 'object' && item.publicKeyString !== null) {
108
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access,@typescript-eslint/no-unsafe-member-access
109
+ if ('get' in item.publicKeyString && item.publicKeyString.get !== undefined) {
110
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
111
+ if (typeof item.publicKeyString.get === 'function') {
112
+ // eslint-disable-next-line @typescript-eslint/no-inferrable-types
113
+ let addToString = 'UNKNOWN';
114
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
115
+ if ('hasPrivateKey' in item && typeof item.hasPrivateKey === 'boolean') {
116
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-unsafe-member-access
117
+ const hasPrivateKey = item.hasPrivateKey;
118
+ if (hasPrivateKey) {
119
+ addToString = 'PRIVATE';
120
+ }
121
+ else {
122
+ addToString = 'PUBLIC';
123
+ }
124
+ }
125
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access,@typescript-eslint/no-unsafe-call
126
+ return (`[Account ${item.publicKeyString.get()} ${addToString}]`);
127
+ }
128
+ }
129
+ }
130
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
131
+ if ('toJSON' in item && typeof item.toJSON === 'function') {
132
+ /*
133
+ * No need to call toJSON() if it's a function, as it will
134
+ * be called by the JSON.stringify() function and passed in
135
+ * as the second argument to this function (jsonItem).
136
+ */
137
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-return,@typescript-eslint/no-explicit-any,@typescript-eslint/consistent-type-assertions
138
+ return jsonItem;
139
+ }
140
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
141
+ if ('constructor' in item && typeof item.constructor === 'function') {
142
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access,@typescript-eslint/no-unsafe-member-access
143
+ if ('name' in item.constructor && typeof item.constructor.name === 'string') {
144
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-unsafe-member-access
145
+ const typeID = item.constructor.name;
146
+ if (typeID !== 'Object') {
147
+ return (`[Instance ${typeID}]`);
148
+ }
149
+ }
150
+ }
151
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-return
152
+ return (item);
153
+ }
154
+ export function convertToJSON(input, options) {
155
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-return,@typescript-eslint/no-explicit-any
156
+ return (JSON.parse(JSON.stringify(input, function (key, value) {
157
+ return (convertToJSONReplacer.call(this, key, value, options));
158
+ })));
159
+ }
160
+ /** @internal */
161
+ export const _Testing = {
162
+ convertToJSONReplacer
163
+ };
164
+ //# sourceMappingURL=json.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json.js","sourceRoot":"","sources":["../../../src/lib/utils/json.ts"],"names":[],"mappings":"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","sourcesContent":["import { types as nodeUtilsTypes } from 'util';\nimport { Buffer } from './buffer.js';\nimport type { JSONSerializable } from '@keetanetwork/keetanet-client/lib/utils/conversion.js';\nexport type { JSONSerializable };\n\ntype ConvertToJSONOptions = {\n\tsearchable?: boolean;\n};\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction convertToJSONReplacer(this: any, key: string, jsonItem: unknown, options: ConvertToJSONOptions = { searchable: false }): JSONSerializable {\n\t// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-unsafe-member-access\n\tconst item = this[key];\n\n\tswitch (typeof item) {\n\t\tcase 'string':\n\t\tcase 'boolean':\n\t\t\treturn(item);\n\t\tcase 'undefined':\n\t\t\treturn(String(item));\n\t\tcase 'symbol':\n\t\t\treturn(`[${item.toString()}]`);\n\t\tcase 'function':\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n\t\t\tif ('toString' in item && typeof item.toString === 'function') {\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-unsafe-member-access,@typescript-eslint/no-unsafe-call\n\t\t\t\tconst itemString: string = item.toString();\n\t\t\t\tif (itemString.toString().startsWith('class ')) {\n\t\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n\t\t\t\t\treturn(`[Class ${item.name}]`);\n\t\t\t\t}\n\t\t\t}\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n\t\t\treturn(`[Function ${item.name}]`);\n\t\tcase 'bigint':\n\t\t\tif (item < BigInt(Number.MAX_SAFE_INTEGER) && item > BigInt(Number.MIN_SAFE_INTEGER)) {\n\t\t\t\treturn(Number(item.toString()));\n\t\t\t} else {\n\t\t\t\tif (item < 0n) {\n\t\t\t\t\tconst absItem = item * -1n;\n\t\t\t\t\tif (options.searchable) {\n\t\t\t\t\t\treturn(`-0x${absItem.toString(16)}`);\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn(`-0x${absItem.toString(16)}[=>${item.toString(10)}]`);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tif (options.searchable) {\n\t\t\t\t\t\treturn(`0x${item.toString(16)}`);\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn(`0x${item.toString(16)}[=>${item.toString(10)}]`);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\tcase 'number':\n\t\t\tif (options.searchable) {\n\t\t\t\tif (isNaN(item)) {\n\t\t\t\t\treturn('#NaN');\n\t\t\t\t}\n\n\t\t\t\tif (item === -Infinity) {\n\t\t\t\t\treturn('#-Inf');\n\t\t\t\t}\n\n\t\t\t\tif (item === Infinity) {\n\t\t\t\t\treturn('#Inf');\n\t\t\t\t}\n\n\t\t\t\treturn(item);\n\t\t\t}\n\n\t\t\tif (item === -Infinity) {\n\t\t\t\treturn('-∞');\n\t\t\t}\n\t\t\tif (item === Infinity) {\n\t\t\t\treturn('∞');\n\t\t\t}\n\n\t\t\tif (isNaN(item)) {\n\t\t\t\treturn('#NaN');\n\t\t\t}\n\n\t\t\treturn(item);\n\t\tdefault:\n\t\t\t/* We handle other cases outside of this switch */\n\t\t\tbreak;\n\t}\n\n\tif (item === undefined) {\n\t\treturn(String(item));\n\t}\n\n\tif (item === null) {\n\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-return\n\t\treturn(item);\n\t}\n\n\tif (Array.isArray(item)) {\n\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-return\n\t\treturn(item);\n\t}\n\n\tif (nodeUtilsTypes.isDate(item)) {\n\t\tif (options.searchable) {\n\t\t\treturn(item.toISOString());\n\t\t}\n\n\t\treturn(`[Date ${item.toISOString()}]`);\n\t}\n\n\tif (Buffer.isBuffer(item)) {\n\t\treturn(item.toString('base64'));\n\t}\n\n\tif (nodeUtilsTypes.isArrayBuffer(item)) {\n\t\treturn(Buffer.from(item).toString('base64'));\n\t}\n\n\tif (item instanceof Promise) {\n\t\treturn('[Promise]');\n\t}\n\n\tif (!(item instanceof Object)) {\n\t\tthrow(new Error(`internal error: Unknown type ${typeof item}`));\n\t}\n\n\t// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access,@typescript-eslint/no-unsafe-member-access\n\tif ('publicKeyString' in item && typeof item.publicKeyString === 'object' && item.publicKeyString !== null) {\n\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access,@typescript-eslint/no-unsafe-member-access\n\t\tif ('get' in item.publicKeyString && item.publicKeyString.get !== undefined) {\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n\t\t\tif (typeof item.publicKeyString.get === 'function') {\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-inferrable-types\n\t\t\t\tlet addToString: string = 'UNKNOWN';\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n\t\t\t\tif ('hasPrivateKey' in item && typeof item.hasPrivateKey === 'boolean') {\n\t\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-unsafe-member-access\n\t\t\t\t\tconst hasPrivateKey = item.hasPrivateKey;\n\t\t\t\t\tif (hasPrivateKey) {\n\t\t\t\t\t\taddToString = 'PRIVATE';\n\t\t\t\t\t} else {\n\t\t\t\t\t\taddToString = 'PUBLIC';\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access,@typescript-eslint/no-unsafe-call\n\t\t\t\treturn(`[Account ${item.publicKeyString.get()} ${addToString}]`);\n\t\t\t}\n\t\t}\n\t}\n\n\t// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n\tif ('toJSON' in item && typeof item.toJSON === 'function') {\n\t\t/*\n\t\t * No need to call toJSON() if it's a function, as it will\n\t\t * be called by the JSON.stringify() function and passed in\n\t\t * as the second argument to this function (jsonItem).\n\t\t */\n\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-return,@typescript-eslint/no-explicit-any,@typescript-eslint/consistent-type-assertions\n\t\treturn(jsonItem as any);\n\t}\n\n\t// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n\tif ('constructor' in item && typeof item.constructor === 'function') {\n\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access,@typescript-eslint/no-unsafe-member-access\n\t\tif ('name' in item.constructor && typeof item.constructor.name === 'string') {\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-unsafe-member-access\n\t\t\tconst typeID = item.constructor.name;\n\t\t\tif (typeID !== 'Object') {\n\t\t\t\treturn(`[Instance ${typeID}]`);\n\t\t\t}\n\t\t}\n\t}\n\n\t// eslint-disable-next-line @typescript-eslint/no-unsafe-return\n\treturn(item);\n}\n\nexport function convertToJSON(input: unknown, options?: Parameters<typeof convertToJSONReplacer>[2]): JSONSerializable {\n\t// eslint-disable-next-line @typescript-eslint/no-unsafe-return,@typescript-eslint/no-explicit-any\n\treturn(JSON.parse(JSON.stringify(input, function(this: any, key: string, value: unknown) {\n\t\treturn(convertToJSONReplacer.call(this, key, value, options));\n\t})));\n}\n\n/** @internal */\nexport const _Testing = {\n\tconvertToJSONReplacer\n};\n"]}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Asserts that the provided value is never.
3
+ *
4
+ * This is useful for static type checking to ensure that all possible values
5
+ * are handled.
6
+ */
7
+ export declare function assertNever(value: never): never;
8
+ //# sourceMappingURL=never.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"never.d.ts","sourceRoot":"","sources":["../../../src/lib/utils/never.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,KAAK,GAAG,KAAK,CAO/C"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Asserts that the provided value is never.
3
+ *
4
+ * This is useful for static type checking to ensure that all possible values
5
+ * are handled.
6
+ */
7
+ export function assertNever(value) {
8
+ /**
9
+ * If we got to this point, it means that the value is not never and
10
+ * so can be logged
11
+ */
12
+ throw (new Error(`Unexpected value: ${value}`));
13
+ }
14
+ //# sourceMappingURL=never.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"never.js","sourceRoot":"","sources":["../../../src/lib/utils/never.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,UAAU,WAAW,CAAC,KAAY;IACvC;;;WAGU;IAEV,MAAK,CAAC,IAAI,KAAK,CAAC,qBAAqB,KAAK,EAAE,CAAC,CAAC,CAAC;AAChD,CAAC","sourcesContent":["/**\n * Asserts that the provided value is never.\n *\n * This is useful for static type checking to ensure that all possible values\n * are handled.\n */\nexport function assertNever(value: never): never {\n\t/**\n * If we got to this point, it means that the value is not never and\n * so can be logged\n */\n\n\tthrow(new Error(`Unexpected value: ${value}`));\n}\n"]}