opentool 0.18.0 → 0.19.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.
- package/dist/adapters/polymarket/index.d.ts +223 -11
- package/dist/adapters/polymarket/index.js +543 -44
- package/dist/adapters/polymarket/index.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +543 -44
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/templates/base/package.json +1 -1
- package/templates/polymarket-simple-trade/README.md +28 -0
- package/templates/polymarket-simple-trade/metadata.ts +12 -0
- package/templates/polymarket-simple-trade/package.json +23 -0
- package/templates/polymarket-simple-trade/tools/place-polymarket-order.ts +172 -0
- package/templates/polymarket-simple-trade/tsconfig.json +14 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/adapters/polymarket/base.ts","../../../src/adapters/polymarket/exchange.ts","../../../src/adapters/polymarket/info.ts"],"names":["requestJson"],"mappings":";;;;AA8EO,IAAM,kBAAA,GAAN,cAAiC,KAAA,CAAM;AAAA,EAC5C,WAAA,CACE,SACgB,QAAA,EAChB;AACA,IAAA,KAAA,CAAM,OAAO,CAAA;AAFG,IAAA,IAAA,CAAA,QAAA,GAAA,QAAA;AAGhB,IAAA,IAAA,CAAK,IAAA,GAAO,oBAAA;AAAA,EACd;AACF;AAEO,IAAM,mBAAA,GAAN,cAAkC,KAAA,CAAM;AAAA,EAC7C,YAAY,OAAA,EAAiB;AAC3B,IAAA,KAAA,CAAM,OAAO,CAAA;AACb,IAAA,IAAA,CAAK,IAAA,GAAO,qBAAA;AAAA,EACd;AACF;AAEO,IAAM,oBAAA,GAAuB;AAAA,EAClC,KAAA,EAAO;AAAA,IACL,OAAA,EAAS,kCAAA;AAAA,IACT,OAAA,EAAS;AAAA,GACX;AAAA,EACA,IAAA,EAAM;AAAA,IACJ,OAAA,EAAS,6BAAA;AAAA,IACT,OAAA,EAAS;AAAA,GACX;AAAA,EACA,IAAA,EAAM;AAAA,IACJ,OAAA,EAAS,iCAAA;AAAA,IACT,OAAA,EAAS;AAAA;AAEb;AAEO,IAAM,mBAAA,GAA6D;AAAA,EACxE,OAAA,EAAS,GAAA;AAAA,EACT,OAAA,EAAS;AACX;AAEO,IAAM,6BAAA,GAGT;AAAA,EACF,OAAA,EAAS;AAAA,IACP,GAAA,EAAK,4CAAA;AAAA,IACL,OAAA,EAAS;AAAA,GACX;AAAA,EACA,OAAA,EAAS;AAAA,IACP,GAAA,EAAK,4CAAA;AAAA,IACL,OAAA,EAAS;AAAA;AAEb;AAEO,IAAM,sBAAA,GAAyB;AAAA,EACpC,IAAA,EAAM,yBAAA;AAAA,EACN,OAAA,EAAS;AACX;AAEO,IAAM,2BAAA,GAA8B;AAAA,EACzC,IAAA,EAAM,gBAAA;AAAA,EACN,OAAA,EAAS;AACX;AAEO,IAAM,YAAA,GAAe,4CAAA;AAErB,SAAS,wBAAA,CACd,SACA,WAAA,EACQ;AACR,EAAA,OAAO,oBAAA,CAAqB,OAAO,CAAA,CAAE,WAAW,CAAA;AAClD;AAEO,SAAS,mBAAmB,MAAA,EAAuC;AACxE,EAAA,IAAI,CAAC,MAAA,EAAQ,OAAA,IAAW,CAAC,OAAO,YAAA,EAAc;AAC5C,IAAA,MAAM,IAAI,MAAM,yDAAyD,CAAA;AAAA,EAC3E;AACF;AAEO,SAAS,gBAAgB,KAAA,EAAyC;AACvE,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,EAAU,OAAO,KAAA;AACtC,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,EAAU,OAAO,MAAM,QAAA,EAAS;AACrD,EAAA,IAAI,CAAC,MAAA,CAAO,QAAA,CAAS,KAAK,CAAA,EAAG;AAC3B,IAAA,MAAM,IAAI,MAAM,gCAAgC,CAAA;AAAA,EAClD;AACA,EAAA,MAAM,QAAA,GAAW,MAAM,QAAA,EAAS;AAChC,EAAA,IAAI,IAAA,CAAK,IAAA,CAAK,QAAQ,CAAA,EAAG;AACvB,IAAA,MAAM,CAAC,QAAA,EAAU,YAAY,CAAA,GAAI,QAAA,CAAS,MAAM,IAAI,CAAA;AACpD,IAAA,MAAM,QAAA,GAAW,OAAO,YAAY,CAAA;AACpC,IAAA,MAAM,CAAC,WAAA,EAAa,cAAA,GAAiB,EAAE,CAAA,GAAI,QAAA,CAAS,MAAM,GAAG,CAAA;AAC7D,IAAA,IAAI,YAAY,CAAA,EAAG;AACjB,MAAA,OAAO,cAAc,cAAA,CAAe,MAAA,CAAO,QAAA,GAAW,cAAA,CAAe,QAAQ,GAAG,CAAA;AAAA,IAClF;AACA,IAAA,MAAM,QAAQ,GAAA,CAAI,MAAA,CAAO,KAAK,GAAA,CAAI,QAAQ,IAAI,CAAC,CAAA;AAC/C,IAAA,OAAO,CAAA,EAAA,EAAK,KAAK,CAAA,EAAG,WAAW,GAAG,cAAc,CAAA,CAAA,CAAG,OAAA,CAAQ,OAAA,EAAS,EAAE,CAAA;AAAA,EACxE;AACA,EAAA,OAAO,QAAA;AACT;AAEA,SAAS,kBAAkB,KAAA,EAA2B;AACpD,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG,OAAO,KAAA;AACjC,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,IAAA,MAAM,OAAA,GAAU,MAAM,IAAA,EAAK;AAC3B,IAAA,IAAI,CAAC,OAAA,EAAS,OAAO,EAAC;AACtB,IAAA,IAAI,OAAA,CAAQ,UAAA,CAAW,GAAG,CAAA,EAAG;AAC3B,MAAA,IAAI;AACF,QAAA,MAAM,MAAA,GAAS,IAAA,CAAK,KAAA,CAAM,OAAO,CAAA;AACjC,QAAA,OAAO,KAAA,CAAM,OAAA,CAAQ,MAAM,CAAA,GAAI,SAAS,EAAC;AAAA,MAC3C,CAAA,CAAA,MAAQ;AACN,QAAA,OAAO,EAAC;AAAA,MACV;AAAA,IACF;AACA,IAAA,OAAO,CAAC,OAAO,CAAA;AAAA,EACjB;AACA,EAAA,OAAO,EAAC;AACV;AAEO,SAAS,wBAAwB,KAAA,EAA0B;AAChE,EAAA,OAAO,iBAAA,CAAkB,KAAK,CAAA,CAC3B,GAAA,CAAI,CAAC,KAAA,KAAW,KAAA,IAAS,OAAO,EAAA,GAAK,MAAA,CAAO,KAAK,CAAA,CAAE,IAAA,EAAO,CAAA,CAC1D,MAAA,CAAO,CAAC,KAAA,KAAU,KAAA,CAAM,SAAS,CAAC,CAAA;AACvC;AAEO,SAAS,wBAAwB,KAAA,EAA0B;AAChE,EAAA,OAAO,iBAAA,CAAkB,KAAK,CAAA,CAC3B,GAAA,CAAI,CAAC,KAAA,KAAW,OAAO,KAAA,KAAU,QAAA,GAAW,KAAA,GAAQ,MAAA,CAAO,WAAW,MAAA,CAAO,KAAK,CAAC,CAAE,CAAA,CACrF,MAAA,CAAO,CAAC,KAAA,KAAU,MAAA,CAAO,QAAA,CAAS,KAAK,CAAC,CAAA;AAC7C;AAEO,SAAS,cAAc,KAAA,EAA0B;AACtD,EAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,SAAU,EAAC;AACnC,EAAA,MAAM,IAAA,GAAO,KAAA,CACV,GAAA,CAAI,CAAC,KAAA,KAAU;AACd,IAAA,IAAI,KAAA,IAAS,OAAO,KAAA,KAAU,QAAA,EAAU;AACtC,MAAA,MAAM,MAAA,GAAS,KAAA;AACf,MAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,KAAA,IAAS,MAAA,CAAO,MAAM,MAAA,CAAO,GAAA;AAClD,MAAA,OAAO,KAAA,GAAQ,MAAA,CAAO,KAAK,CAAA,CAAE,MAAK,GAAI,EAAA;AAAA,IACxC;AACA,IAAA,OAAO,MAAA,CAAO,KAAA,IAAS,EAAE,CAAA,CAAE,IAAA,EAAK;AAAA,EAClC,CAAC,CAAA,CACA,MAAA,CAAO,CAAC,KAAA,KAAU,KAAA,CAAM,SAAS,CAAC,CAAA;AACrC,EAAA,OAAO,KAAA,CAAM,IAAA,CAAK,IAAI,GAAA,CAAI,IAAI,CAAC,CAAA;AACjC;AAEO,SAAS,kBAAkB,KAAA,EAA+B;AAC/D,EAAA,IAAI,CAAC,OAAO,OAAO,IAAA;AACnB,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,IAAA,MAAM,OAAA,GAAU,MAAM,IAAA,EAAK;AAC3B,IAAA,OAAO,OAAA,CAAQ,MAAA,GAAS,CAAA,GAAI,OAAA,GAAU,IAAA;AAAA,EACxC;AACA,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,MAAA,CAAO,QAAA,CAAS,KAAK,CAAA,EAAG;AACvD,IAAA,MAAM,EAAA,GAAK,KAAA,GAAQ,IAAA,GAAoB,KAAA,GAAQ,KAAA,GAAQ,GAAA;AACvD,IAAA,MAAM,IAAA,GAAO,IAAI,IAAA,CAAK,EAAE,CAAA;AACxB,IAAA,OAAO,MAAA,CAAO,MAAM,IAAA,CAAK,OAAA,EAAS,CAAA,GAAI,IAAA,GAAO,KAAK,WAAA,EAAY;AAAA,EAChE;AACA,EAAA,OAAO,IAAA;AACT;AAEO,SAAS,mBAAmB,IAAA,EAMxB;AACT,EAAA,MAAM,SAAA,GAAY,IAAA,CAAK,SAAA,CAAU,QAAA,EAAS;AAC1C,EAAA,MAAM,MAAA,GAAS,IAAA,CAAK,MAAA,CAAO,WAAA,EAAY;AACvC,EAAA,MAAM,OAAO,IAAA,CAAK,IAAA;AAClB,EAAA,MAAM,IAAA,GACJ,IAAA,CAAK,IAAA,IAAQ,IAAA,GAAO,KAAK,OAAO,IAAA,CAAK,IAAA,KAAS,QAAA,GAAW,IAAA,CAAK,IAAA,GAAO,IAAA,CAAK,SAAA,CAAU,KAAK,IAAI,CAAA;AAC/F,EAAA,MAAM,OAAA,GAAU,GAAG,SAAS,CAAA,EAAG,MAAM,CAAA,EAAG,IAAI,GAAG,IAAI,CAAA,CAAA;AACnD,EAAA,MAAM,GAAA,GAAM,MAAA,CAAO,IAAA,CAAK,IAAA,CAAK,QAAQ,QAAQ,CAAA;AAC7C,EAAA,OAAO,UAAA,CAAW,UAAU,GAAG,CAAA,CAAE,OAAO,OAAO,CAAA,CAAE,OAAO,KAAK,CAAA;AAC/D;AAEO,SAAS,eAAe,IAAA,EAOJ;AACzB,EAAA,MAAM,SAAA,GAAY,KAAK,SAAA,IAAa,IAAA,CAAK,MAAM,IAAA,CAAK,GAAA,KAAQ,GAAI,CAAA;AAChE,EAAA,MAAM,YAAY,kBAAA,CAAmB;AAAA,IACnC,MAAA,EAAQ,KAAK,WAAA,CAAY,MAAA;AAAA,IACzB,SAAA;AAAA,IACA,QAAQ,IAAA,CAAK,MAAA;AAAA,IACb,MAAM,IAAA,CAAK,IAAA;AAAA,IACX,IAAA,EAAM,KAAK,IAAA,IAAQ;AAAA,GACpB,CAAA;AACD,EAAA,OAAO;AAAA,IACL,cAAc,IAAA,CAAK,OAAA;AAAA,IACnB,YAAA,EAAc,KAAK,WAAA,CAAY,MAAA;AAAA,IAC/B,eAAA,EAAiB,KAAK,WAAA,CAAY,UAAA;AAAA,IAClC,cAAA,EAAgB,UAAU,QAAA,EAAS;AAAA,IACnC,cAAA,EAAgB;AAAA,GAClB;AACF;AAEA,eAAsB,eAAe,IAAA,EAMD;AAClC,EAAA,kBAAA,CAAmB,KAAK,MAAM,CAAA;AAC9B,EAAA,MAAM,SAAA,GAAY,KAAK,SAAA,IAAa,IAAA,CAAK,MAAM,IAAA,CAAK,GAAA,KAAQ,GAAI,CAAA;AAChE,EAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,IAAS,IAAA,CAAK,GAAA,EAAI;AACrC,EAAA,MAAM,OAAA,GAAU,mBAAA,CAAoB,IAAA,CAAK,WAAA,IAAe,SAAS,CAAA;AACjE,EAAA,MAAM,OAAA,GAAU,KAAK,MAAA,CAAO,OAAA;AAC5B,EAAA,MAAM,OAAA,GAAU,KAAK,OAAA,IAAW,uCAAA;AAEhC,EAAA,MAAM,SAAA,GAAY,MAAM,IAAA,CAAK,MAAA,CAAO,aAAa,aAAA,CAAc;AAAA,IAC7D,OAAA,EAAS,KAAK,MAAA,CAAO,OAAA;AAAA,IACrB,MAAA,EAAQ;AAAA,MACN,GAAG,2BAAA;AAAA,MACH;AAAA,KACF;AAAA,IACA,KAAA,EAAO;AAAA,MACL,QAAA,EAAU;AAAA,QACR,EAAE,IAAA,EAAM,SAAA,EAAW,IAAA,EAAM,SAAA,EAAU;AAAA,QACnC,EAAE,IAAA,EAAM,WAAA,EAAa,IAAA,EAAM,QAAA,EAAS;AAAA,QACpC,EAAE,IAAA,EAAM,OAAA,EAAS,IAAA,EAAM,SAAA,EAAU;AAAA,QACjC,EAAE,IAAA,EAAM,SAAA,EAAW,IAAA,EAAM,QAAA;AAAS;AACpC,KACF;AAAA,IACA,WAAA,EAAa,UAAA;AAAA,IACb,OAAA,EAAS;AAAA,MACP,OAAA;AAAA,MACA,SAAA,EAAW,UAAU,QAAA,EAAS;AAAA,MAC9B,KAAA,EAAO,OAAO,KAAK,CAAA;AAAA,MACnB;AAAA;AACF,GACD,CAAA;AAED,EAAA,OAAO;AAAA,IACL,YAAA,EAAc,OAAA;AAAA,IACd,cAAA,EAAgB,UAAU,QAAA,EAAS;AAAA,IACnC,UAAA,EAAY,MAAM,QAAA,EAAS;AAAA,IAC3B,cAAA,EAAgB;AAAA,GAClB;AACF;AAEO,SAAS,uBAAuB,IAAA,EAIrB;AAChB,EAAA,IAAI,IAAA,CAAK,eAAA,EAAiB,OAAO,IAAA,CAAK,eAAA;AACtC,EAAA,MAAM,MAAM,IAAA,CAAK,WAAA;AACjB,EAAA,OAAO,IAAA,CAAK,UACR,6BAAA,CAA8B,GAAG,EAAE,OAAA,GACnC,6BAAA,CAA8B,GAAG,CAAA,CAAE,GAAA;AACzC;AAEA,SAAS,eAAA,CAAgB,OAAe,IAAA,EAAsB;AAC5D,EAAA,MAAM,OAAA,GAAU,MAAM,IAAA,EAAK;AAC3B,EAAA,IAAI,CAAC,OAAA,CAAQ,IAAA,CAAK,OAAO,CAAA,EAAG;AAC1B,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,EAAG,IAAI,CAAA,kCAAA,CAAoC,CAAA;AAAA,EAC7D;AACA,EAAA,OAAO,OAAO,OAAO,CAAA;AACvB;AAEO,SAAS,4BAA4B,IAAA,EAKK;AAC/C,EAAA,MAAM,QAAA,GAAW,eAAA,CAAgB,IAAA,CAAK,KAAK,CAAA;AAC3C,EAAA,MAAM,OAAA,GAAU,eAAA,CAAgB,IAAA,CAAK,IAAI,CAAA;AACzC,EAAA,IAAI,CAAC,QAAA,IAAY,CAAC,OAAA,EAAS;AACzB,IAAA,MAAM,IAAI,MAAM,oCAAoC,CAAA;AAAA,EACtD;AACA,EAAA,MAAM,UAAA,GAAa,OAAO,QAAQ,CAAA;AAClC,EAAA,IAAI,CAAC,OAAO,QAAA,CAAS,UAAU,KAAK,UAAA,IAAc,CAAA,IAAK,cAAc,CAAA,EAAG;AACtE,IAAA,MAAM,IAAI,MAAM,kDAAkD,CAAA;AAAA,EACpE;AACA,EAAA,MAAM,SAAA,GAAY,OAAO,OAAO,CAAA;AAChC,EAAA,IAAI,CAAC,MAAA,CAAO,QAAA,CAAS,SAAS,CAAA,IAAK,aAAa,CAAA,EAAG;AACjD,IAAA,MAAM,IAAI,MAAM,8BAA8B,CAAA;AAAA,EAChD;AAEA,EAAA,IAAI,UAAA,GAAa,UAAA,CAAW,QAAA,EAAU,CAAC,CAAA;AACvC,EAAA,IAAI,IAAA,CAAK,aAAa,MAAA,EAAW;AAC/B,IAAA,MAAM,YAAY,UAAA,CAAW,eAAA,CAAgB,IAAA,CAAK,QAAQ,GAAG,CAAC,CAAA;AAC9D,IAAA,IAAI,aAAa,EAAA,EAAI;AACnB,MAAA,MAAM,IAAI,MAAM,4BAA4B,CAAA;AAAA,IAC9C;AACA,IAAA,UAAA,GAAc,aAAa,SAAA,GAAa,SAAA;AAAA,EAC1C;AAEA,EAAA,MAAM,SAAA,GAAY,UAAA,CAAW,OAAA,EAAS,CAAC,CAAA;AACvC,EAAA,MAAM,UAAA,GAAc,aAAa,SAAA,GAAa,QAAA;AAE9C,EAAA,IAAI,IAAA,CAAK,SAAS,KAAA,EAAO;AACvB,IAAA,OAAO,EAAE,WAAA,EAAa,UAAA,EAAY,WAAA,EAAa,SAAA,EAAU;AAAA,EAC3D;AACA,EAAA,OAAO,EAAE,WAAA,EAAa,SAAA,EAAW,WAAA,EAAa,UAAA,EAAW;AAC3D;AAEA,eAAsB,wBAAwB,IAAA,EAiBJ;AACxC,EAAA,kBAAA,CAAmB,KAAK,MAAM,CAAA;AAC9B,EAAA,MAAM,WAAA,GAAc,KAAK,WAAA,IAAe,SAAA;AACxC,EAAA,MAAM,OAAA,GAAU,oBAAoB,WAAW,CAAA;AAC/C,EAAA,MAAM,kBAAkB,sBAAA,CAAuB;AAAA,IAC7C,WAAA;AAAA,IACA,GAAI,KAAK,OAAA,KAAY,MAAA,GAAY,EAAE,OAAA,EAAS,IAAA,CAAK,OAAA,EAAQ,GAAI,EAAC;AAAA,IAC9D,GAAI,KAAK,eAAA,GAAkB,EAAE,iBAAiB,IAAA,CAAK,eAAA,KAAoB;AAAC,GACzE,CAAA;AAED,EAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,IAAU,IAAA,CAAK,MAAA,CAAO,OAAA;AACzC,EAAA,MAAM,MAAA,GAAS,IAAA,CAAK,MAAA,IAAW,IAAA,CAAK,MAAA,CAAO,OAAA;AAC3C,EAAA,MAAM,KAAA,GAAQ,KAAK,KAAA,IAAS,YAAA;AAC5B,EAAA,MAAM,SAAA,GAAmB,IAAA,CAAK,IAAA,KAAS,KAAA,GAAQ,CAAA,GAAI,CAAA;AACnD,EAAA,MAAM,aAAA,GAAyC,KAAK,aAAA,IAAiB,CAAA;AAErE,EAAA,MAAM,YAAA,GAAe,IAAA,CAAK,OAAA,CAAQ,UAAA,CAAW,IAAI,CAAA,GAC7C,MAAA,CAAO,IAAA,CAAK,OAAO,CAAA,GACnB,eAAA,CAAgB,IAAA,CAAK,SAAS,SAAS,CAAA;AAE3C,EAAA,MAAM,EAAE,WAAA,EAAa,WAAA,EAAY,GAAI,2BAAA,CAA4B;AAAA,IAC/D,MAAM,IAAA,CAAK,IAAA;AAAA,IACX,OAAO,IAAA,CAAK,KAAA;AAAA,IACZ,MAAM,IAAA,CAAK,IAAA;AAAA,IACX,GAAI,KAAK,QAAA,KAAa,MAAA,GAAY,EAAE,QAAA,EAAU,IAAA,CAAK,QAAA,EAAS,GAAI;AAAC,GAClE,CAAA;AAED,EAAA,MAAM,IAAA,GAAO,OAAO,CAAA,EAAA,EAAK,WAAA,CAAY,EAAE,CAAA,CAAE,QAAA,CAAS,KAAK,CAAC,CAAA,CAAE,CAAA;AAC1D,EAAA,MAAM,UAAA,GAAa,MAAA,CAAO,IAAA,CAAK,UAAA,IAAc,CAAC,CAAA;AAC9C,EAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,IAAA,CAAK,KAAA,IAAS,CAAC,CAAA;AACpC,EAAA,MAAM,UAAA,GAAa,MAAA,CAAO,IAAA,CAAK,UAAA,IAAc,CAAC,CAAA;AAE9C,EAAA,MAAM,OAAA,GAAU;AAAA,IACd,IAAA;AAAA,IACA,KAAA;AAAA,IACA,MAAA;AAAA,IACA,KAAA;AAAA,IACA,OAAA,EAAS,YAAA;AAAA,IACT,WAAA;AAAA,IACA,WAAA;AAAA,IACA,UAAA;AAAA,IACA,KAAA;AAAA,IACA,UAAA;AAAA,IACA,IAAA,EAAM,SAAA;AAAA,IACN;AAAA,GACF;AAEA,EAAA,MAAM,SAAA,GAAY,MAAM,IAAA,CAAK,MAAA,CAAO,aAAa,aAAA,CAAc;AAAA,IAC7D,OAAA,EAAS,KAAK,MAAA,CAAO,OAAA;AAAA,IACrB,MAAA,EAAQ;AAAA,MACN,GAAG,sBAAA;AAAA,MACH,OAAA;AAAA,MACA,iBAAA,EAAmB;AAAA,KACrB;AAAA,IACA,KAAA,EAAO;AAAA,MACL,KAAA,EAAO;AAAA,QACL,EAAE,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAM,SAAA,EAAU;AAAA,QAChC,EAAE,IAAA,EAAM,OAAA,EAAS,IAAA,EAAM,SAAA,EAAU;AAAA,QACjC,EAAE,IAAA,EAAM,QAAA,EAAU,IAAA,EAAM,SAAA,EAAU;AAAA,QAClC,EAAE,IAAA,EAAM,OAAA,EAAS,IAAA,EAAM,SAAA,EAAU;AAAA,QACjC,EAAE,IAAA,EAAM,SAAA,EAAW,IAAA,EAAM,SAAA,EAAU;AAAA,QACnC,EAAE,IAAA,EAAM,aAAA,EAAe,IAAA,EAAM,SAAA,EAAU;AAAA,QACvC,EAAE,IAAA,EAAM,aAAA,EAAe,IAAA,EAAM,SAAA,EAAU;AAAA,QACvC,EAAE,IAAA,EAAM,YAAA,EAAc,IAAA,EAAM,SAAA,EAAU;AAAA,QACtC,EAAE,IAAA,EAAM,OAAA,EAAS,IAAA,EAAM,SAAA,EAAU;AAAA,QACjC,EAAE,IAAA,EAAM,YAAA,EAAc,IAAA,EAAM,SAAA,EAAU;AAAA,QACtC,EAAE,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAM,OAAA,EAAQ;AAAA,QAC9B,EAAE,IAAA,EAAM,eAAA,EAAiB,IAAA,EAAM,OAAA;AAAQ;AACzC,KACF;AAAA,IACA,WAAA,EAAa,OAAA;AAAA,IACb;AAAA,GACD,CAAA;AAED,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,OAAA,CAAQ,IAAA,CAAK,QAAA,EAAS;AAAA,IAC5B,KAAA;AAAA,IACA,MAAA;AAAA,IACA,KAAA;AAAA,IACA,OAAA,EAAS,aAAa,QAAA,EAAS;AAAA,IAC/B,WAAA,EAAa,OAAA,CAAQ,WAAA,CAAY,QAAA,EAAS;AAAA,IAC1C,WAAA,EAAa,OAAA,CAAQ,WAAA,CAAY,QAAA,EAAS;AAAA,IAC1C,UAAA,EAAY,OAAA,CAAQ,UAAA,CAAW,QAAA,EAAS;AAAA,IACxC,KAAA,EAAO,OAAA,CAAQ,KAAA,CAAM,QAAA,EAAS;AAAA,IAC9B,UAAA,EAAY,OAAA,CAAQ,UAAA,CAAW,QAAA,EAAS;AAAA,IACxC,IAAA,EAAM,SAAA;AAAA,IACN,aAAA;AAAA,IACA;AAAA,GACF;AACF;;;ACvbA,eAAe,mBAAmB,IAAA,EAK6C;AAC7E,EAAA,IAAI,KAAK,MAAA,EAAQ;AACf,IAAA,MAAM,WAAA,GACJ,IAAA,CAAK,WAAA,IACJ,MAAM,sBAAA,CAAuB;AAAA,MAC5B,QAAQ,IAAA,CAAK,MAAA;AAAA,MACb,GAAI,KAAK,WAAA,GAAc,EAAE,aAAa,IAAA,CAAK,WAAA,KAAgB;AAAC,KAC7D,CAAA;AACH,IAAA,OAAO;AAAA,MACL,WAAA;AAAA,MACA,OAAA,EAAS,KAAK,MAAA,CAAO;AAAA,KACvB;AAAA,EACF;AAEA,EAAA,IAAI,IAAA,CAAK,aAAA,IAAiB,IAAA,CAAK,WAAA,EAAa;AAC1C,IAAA,OAAO,EAAE,WAAA,EAAa,IAAA,CAAK,WAAA,EAAa,OAAA,EAAS,KAAK,aAAA,EAAc;AAAA,EACtE;AAEA,EAAA,MAAM,IAAI,mBAAA;AAAA,IACR;AAAA,GACF;AACF;AAEA,eAAe,WAAA,CAAY,KAAa,IAAA,EAAoB;AAC1D,EAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,GAAA,EAAK,IAAI,CAAA;AACtC,EAAA,MAAM,OAAO,MAAM,QAAA,CAAS,MAAK,CAAE,KAAA,CAAM,MAAM,EAAE,CAAA;AACjD,EAAA,IAAI,IAAA,GAAgB,IAAA;AACpB,EAAA,IAAI;AACF,IAAA,IAAA,GAAO,IAAA,GAAO,IAAA,CAAK,KAAA,CAAM,IAAI,CAAA,GAAI,IAAA;AAAA,EACnC,CAAA,CAAA,MAAQ;AACN,IAAA,IAAA,GAAO,IAAA;AAAA,EACT;AACA,EAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,IAAA,MAAM,IAAI,kBAAA;AAAA,MACR,CAAA,2BAAA,EAA8B,SAAS,MAAM,CAAA,EAAA,CAAA;AAAA,MAC7C,IAAA,IAAQ,EAAE,MAAA,EAAQ,QAAA,CAAS,MAAA;AAAO,KACpC;AAAA,EACF;AACA,EAAA,OAAO,IAAA;AACT;AAEA,SAAS,YAAY,GAAA,EAAqB;AACxC,EAAA,MAAM,MAAA,GAAS,IAAI,GAAA,CAAI,GAAG,CAAA;AAC1B,EAAA,OAAO,CAAA,EAAG,MAAA,CAAO,QAAQ,CAAA,EAAG,OAAO,MAAM,CAAA,CAAA;AAC3C;AAEA,eAAsB,uBAAuB,IAAA,EAMP;AACpC,EAAA,MAAM,WAAA,GAAc,KAAK,WAAA,IAAe,SAAA;AACxC,EAAA,MAAM,OAAA,GAAU,wBAAA,CAAyB,MAAA,EAAQ,WAAW,CAAA;AAC5D,EAAA,MAAM,GAAA,GAAM,GAAG,OAAO,CAAA,aAAA,CAAA;AACtB,EAAA,MAAM,OAAA,GAAU,MAAM,cAAA,CAAe;AAAA,IACnC,QAAQ,IAAA,CAAK,MAAA;AAAA,IACb,WAAA;AAAA,IACA,GAAI,KAAK,SAAA,KAAc,MAAA,GAAY,EAAE,SAAA,EAAW,IAAA,CAAK,SAAA,EAAU,GAAI,EAAC;AAAA,IACpE,GAAI,KAAK,KAAA,KAAU,MAAA,GAAY,EAAE,KAAA,EAAO,IAAA,CAAK,KAAA,EAAM,GAAI,EAAC;AAAA,IACxD,GAAI,KAAK,OAAA,KAAY,MAAA,GAAY,EAAE,OAAA,EAAS,IAAA,CAAK,OAAA,EAAQ,GAAI;AAAC,GAC/D,CAAA;AACD,EAAA,MAAM,IAAA,GAAQ,MAAM,WAAA,CAAY,GAAA,EAAK;AAAA,IACnC,MAAA,EAAQ,MAAA;AAAA,IACR,OAAA,EAAS;AAAA,MACP,cAAA,EAAgB,kBAAA;AAAA,MAChB,GAAG;AAAA,KACL;AAAA,IACA,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,EAAE;AAAA,GACxB,CAAA;AAED,EAAA,IAAI,CAAC,MAAM,MAAA,IAAU,CAAC,MAAM,MAAA,IAAU,CAAC,MAAM,UAAA,EAAY;AACvD,IAAA,MAAM,IAAI,oBAAoB,sCAAsC,CAAA;AAAA,EACtE;AAEA,EAAA,OAAO;AAAA,IACL,QAAQ,IAAA,CAAK,MAAA;AAAA,IACb,QAAQ,IAAA,CAAK,MAAA;AAAA,IACb,YAAY,IAAA,CAAK;AAAA,GACnB;AACF;AAEA,eAAsB,uBAAuB,IAAA,EAMP;AACpC,EAAA,MAAM,WAAA,GAAc,KAAK,WAAA,IAAe,SAAA;AACxC,EAAA,MAAM,OAAA,GAAU,wBAAA,CAAyB,MAAA,EAAQ,WAAW,CAAA;AAC5D,EAAA,MAAM,GAAA,GAAM,GAAG,OAAO,CAAA,oBAAA,CAAA;AACtB,EAAA,MAAM,OAAA,GAAU,MAAM,cAAA,CAAe;AAAA,IACnC,QAAQ,IAAA,CAAK,MAAA;AAAA,IACb,WAAA;AAAA,IACA,GAAI,KAAK,SAAA,KAAc,MAAA,GAAY,EAAE,SAAA,EAAW,IAAA,CAAK,SAAA,EAAU,GAAI,EAAC;AAAA,IACpE,GAAI,KAAK,KAAA,KAAU,MAAA,GAAY,EAAE,KAAA,EAAO,IAAA,CAAK,KAAA,EAAM,GAAI,EAAC;AAAA,IACxD,GAAI,KAAK,OAAA,KAAY,MAAA,GAAY,EAAE,OAAA,EAAS,IAAA,CAAK,OAAA,EAAQ,GAAI;AAAC,GAC/D,CAAA;AACD,EAAA,MAAM,IAAA,GAAQ,MAAM,WAAA,CAAY,GAAA,EAAK;AAAA,IACnC,MAAA,EAAQ,KAAA;AAAA,IACR,OAAA,EAAS;AAAA,MACP,cAAA,EAAgB,kBAAA;AAAA,MAChB,GAAG;AAAA;AACL,GACD,CAAA;AAED,EAAA,IAAI,CAAC,MAAM,MAAA,IAAU,CAAC,MAAM,MAAA,IAAU,CAAC,MAAM,UAAA,EAAY;AACvD,IAAA,MAAM,IAAI,oBAAoB,sCAAsC,CAAA;AAAA,EACtE;AAEA,EAAA,OAAO;AAAA,IACL,QAAQ,IAAA,CAAK,MAAA;AAAA,IACb,QAAQ,IAAA,CAAK,MAAA;AAAA,IACb,YAAY,IAAA,CAAK;AAAA,GACnB;AACF;AAEA,eAAsB,qBAAqB,IAAA,EAMD;AACxC,EAAA,MAAM,WAAA,GAAc,KAAK,WAAA,IAAe,SAAA;AACxC,EAAA,MAAM,OAAA,GAAU,wBAAA,CAAyB,MAAA,EAAQ,WAAW,CAAA;AAC5D,EAAA,MAAM,GAAA,GAAM,GAAG,OAAO,CAAA,MAAA,CAAA;AAEtB,EAAA,MAAM,WAAA,GAAc,MAAM,uBAAA,CAAwB;AAAA,IAChD,QAAQ,IAAA,CAAK,MAAA;AAAA,IACb,WAAA;AAAA,IACA,GAAG,IAAA,CAAK;AAAA,GACT,CAAA;AAED,EAAA,MAAM,IAAA,GAAO,MAAM,kBAAA,CAAmB;AAAA,IACpC,QAAQ,IAAA,CAAK,MAAA;AAAA,IACb,GAAI,KAAK,WAAA,GAAc,EAAE,aAAa,IAAA,CAAK,WAAA,KAAgB,EAAC;AAAA,IAC5D;AAAA,GACD,CAAA;AAED,EAAA,MAAM,IAAA,GAAO;AAAA,IACX,KAAA,EAAO,WAAA;AAAA,IACP,KAAA,EAAO,KAAK,WAAA,CAAY,MAAA;AAAA,IACxB,SAAA,EAAW,KAAK,SAAA,IAAa;AAAA,GAC/B;AAEA,EAAA,MAAM,UAAU,cAAA,CAAe;AAAA,IAC7B,aAAa,IAAA,CAAK,WAAA;AAAA,IAClB,SAAS,IAAA,CAAK,OAAA;AAAA,IACd,MAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAM,YAAY,GAAG,CAAA;AAAA,IACrB;AAAA,GACD,CAAA;AAED,EAAA,OAAQ,MAAM,YAAY,GAAA,EAAK;AAAA,IAC7B,MAAA,EAAQ,MAAA;AAAA,IACR,OAAA,EAAS;AAAA,MACP,cAAA,EAAgB,kBAAA;AAAA,MAChB,GAAG;AAAA,KACL;AAAA,IACA,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,IAAI;AAAA,GAC1B,CAAA;AACH;AAEA,eAAsB,sBAAsB,IAAA,EAMP;AACnC,EAAA,MAAM,WAAA,GAAc,KAAK,WAAA,IAAe,SAAA;AACxC,EAAA,MAAM,OAAA,GAAU,wBAAA,CAAyB,MAAA,EAAQ,WAAW,CAAA;AAC5D,EAAA,MAAM,GAAA,GAAM,GAAG,OAAO,CAAA,MAAA,CAAA;AACtB,EAAA,MAAM,IAAA,GAAO,EAAE,OAAA,EAAS,IAAA,CAAK,OAAA,EAAQ;AAErC,EAAA,MAAM,IAAA,GAAO,MAAM,kBAAA,CAAmB;AAAA,IACpC,GAAI,KAAK,MAAA,GAAS,EAAE,QAAQ,IAAA,CAAK,MAAA,KAAW,EAAC;AAAA,IAC7C,GAAI,KAAK,aAAA,GAAgB,EAAE,eAAe,IAAA,CAAK,aAAA,KAAkB,EAAC;AAAA,IAClE,GAAI,KAAK,WAAA,GAAc,EAAE,aAAa,IAAA,CAAK,WAAA,KAAgB,EAAC;AAAA,IAC5D;AAAA,GACD,CAAA;AAED,EAAA,MAAM,UAAU,cAAA,CAAe;AAAA,IAC7B,aAAa,IAAA,CAAK,WAAA;AAAA,IAClB,SAAS,IAAA,CAAK,OAAA;AAAA,IACd,MAAA,EAAQ,QAAA;AAAA,IACR,IAAA,EAAM,YAAY,GAAG,CAAA;AAAA,IACrB;AAAA,GACD,CAAA;AAED,EAAA,OAAQ,MAAM,YAAY,GAAA,EAAK;AAAA,IAC7B,MAAA,EAAQ,QAAA;AAAA,IACR,OAAA,EAAS;AAAA,MACP,cAAA,EAAgB,kBAAA;AAAA,MAChB,GAAG;AAAA,KACL;AAAA,IACA,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,IAAI;AAAA,GAC1B,CAAA;AACH;AAEA,eAAsB,uBAAuB,IAAA,EAMR;AACnC,EAAA,MAAM,WAAA,GAAc,KAAK,WAAA,IAAe,SAAA;AACxC,EAAA,MAAM,OAAA,GAAU,wBAAA,CAAyB,MAAA,EAAQ,WAAW,CAAA;AAC5D,EAAA,MAAM,GAAA,GAAM,GAAG,OAAO,CAAA,OAAA,CAAA;AACtB,EAAA,MAAM,IAAA,GAAO,EAAE,QAAA,EAAU,IAAA,CAAK,QAAA,EAAS;AAEvC,EAAA,MAAM,IAAA,GAAO,MAAM,kBAAA,CAAmB;AAAA,IACpC,GAAI,KAAK,MAAA,GAAS,EAAE,QAAQ,IAAA,CAAK,MAAA,KAAW,EAAC;AAAA,IAC7C,GAAI,KAAK,aAAA,GAAgB,EAAE,eAAe,IAAA,CAAK,aAAA,KAAkB,EAAC;AAAA,IAClE,GAAI,KAAK,WAAA,GAAc,EAAE,aAAa,IAAA,CAAK,WAAA,KAAgB,EAAC;AAAA,IAC5D;AAAA,GACD,CAAA;AAED,EAAA,MAAM,UAAU,cAAA,CAAe;AAAA,IAC7B,aAAa,IAAA,CAAK,WAAA;AAAA,IAClB,SAAS,IAAA,CAAK,OAAA;AAAA,IACd,MAAA,EAAQ,QAAA;AAAA,IACR,IAAA,EAAM,YAAY,GAAG,CAAA;AAAA,IACrB;AAAA,GACD,CAAA;AAED,EAAA,OAAQ,MAAM,YAAY,GAAA,EAAK;AAAA,IAC7B,MAAA,EAAQ,QAAA;AAAA,IACR,OAAA,EAAS;AAAA,MACP,cAAA,EAAgB,kBAAA;AAAA,MAChB,GAAG;AAAA,KACL;AAAA,IACA,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,IAAI;AAAA,GAC1B,CAAA;AACH;AAEA,eAAsB,0BAA0B,IAAA,EAKX;AACnC,EAAA,MAAM,WAAA,GAAc,KAAK,WAAA,IAAe,SAAA;AACxC,EAAA,MAAM,OAAA,GAAU,wBAAA,CAAyB,MAAA,EAAQ,WAAW,CAAA;AAC5D,EAAA,MAAM,GAAA,GAAM,GAAG,OAAO,CAAA,WAAA,CAAA;AACtB,EAAA,MAAM,IAAA,GAAO,MAAM,kBAAA,CAAmB;AAAA,IACpC,GAAI,KAAK,MAAA,GAAS,EAAE,QAAQ,IAAA,CAAK,MAAA,KAAW,EAAC;AAAA,IAC7C,GAAI,KAAK,aAAA,GAAgB,EAAE,eAAe,IAAA,CAAK,aAAA,KAAkB,EAAC;AAAA,IAClE,GAAI,KAAK,WAAA,GAAc,EAAE,aAAa,IAAA,CAAK,WAAA,KAAgB,EAAC;AAAA,IAC5D;AAAA,GACD,CAAA;AACD,EAAA,MAAM,UAAU,cAAA,CAAe;AAAA,IAC7B,aAAa,IAAA,CAAK,WAAA;AAAA,IAClB,SAAS,IAAA,CAAK,OAAA;AAAA,IACd,MAAA,EAAQ,QAAA;AAAA,IACR,IAAA,EAAM,YAAY,GAAG;AAAA,GACtB,CAAA;AAED,EAAA,OAAQ,MAAM,YAAY,GAAA,EAAK;AAAA,IAC7B,MAAA,EAAQ,QAAA;AAAA,IACR,OAAA,EAAS;AAAA,MACP,cAAA,EAAgB,kBAAA;AAAA,MAChB,GAAG;AAAA;AACL,GACD,CAAA;AACH;AAEA,eAAsB,6BAA6B,IAAA,EAMd;AACnC,EAAA,MAAM,WAAA,GAAc,KAAK,WAAA,IAAe,SAAA;AACxC,EAAA,MAAM,OAAA,GAAU,wBAAA,CAAyB,MAAA,EAAQ,WAAW,CAAA;AAC5D,EAAA,MAAM,GAAA,GAAM,GAAG,OAAO,CAAA,qBAAA,CAAA;AACtB,EAAA,MAAM,IAAA,GAAO,EAAE,MAAA,EAAQ,IAAA,CAAK,OAAA,EAAQ;AACpC,EAAA,MAAM,IAAA,GAAO,MAAM,kBAAA,CAAmB;AAAA,IACpC,GAAI,KAAK,MAAA,GAAS,EAAE,QAAQ,IAAA,CAAK,MAAA,KAAW,EAAC;AAAA,IAC7C,GAAI,KAAK,aAAA,GAAgB,EAAE,eAAe,IAAA,CAAK,aAAA,KAAkB,EAAC;AAAA,IAClE,GAAI,KAAK,WAAA,GAAc,EAAE,aAAa,IAAA,CAAK,WAAA,KAAgB,EAAC;AAAA,IAC5D;AAAA,GACD,CAAA;AACD,EAAA,MAAM,UAAU,cAAA,CAAe;AAAA,IAC7B,aAAa,IAAA,CAAK,WAAA;AAAA,IAClB,SAAS,IAAA,CAAK,OAAA;AAAA,IACd,MAAA,EAAQ,QAAA;AAAA,IACR,IAAA,EAAM,YAAY,GAAG,CAAA;AAAA,IACrB;AAAA,GACD,CAAA;AAED,EAAA,OAAQ,MAAM,YAAY,GAAA,EAAK;AAAA,IAC7B,MAAA,EAAQ,QAAA;AAAA,IACR,OAAA,EAAS;AAAA,MACP,cAAA,EAAgB,kBAAA;AAAA,MAChB,GAAG;AAAA,KACL;AAAA,IACA,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,IAAI;AAAA,GAC1B,CAAA;AACH;AAEO,IAAM,2BAAN,MAA+B;AAAA,EAMpC,YAAY,IAAA,EAIT;AACD,IAAA,IAAA,CAAK,SAAS,IAAA,CAAK,MAAA;AACnB,IAAA,IAAA,CAAK,cAAc,IAAA,CAAK,WAAA;AACxB,IAAA,IAAA,CAAK,WAAA,GAAc,KAAK,WAAA,IAAe,SAAA;AAAA,EACzC;AAAA,EAEA,MAAc,cAAA,GAAiB;AAC7B,IAAA,IAAI,IAAA,CAAK,iBAAA,EAAmB,OAAO,IAAA,CAAK,iBAAA;AACxC,IAAA,MAAM,QAAA,GAAW,MAAM,kBAAA,CAAmB;AAAA,MACxC,QAAQ,IAAA,CAAK,MAAA;AAAA,MACb,GAAI,KAAK,WAAA,GAAc,EAAE,aAAa,IAAA,CAAK,WAAA,KAAgB,EAAC;AAAA,MAC5D,aAAa,IAAA,CAAK;AAAA,KACnB,CAAA;AACD,IAAA,IAAA,CAAK,oBAAoB,QAAA,CAAS,WAAA;AAClC,IAAA,OAAO,QAAA,CAAS,WAAA;AAAA,EAClB;AAAA,EAEA,MAAM,UAAA,CAAW,KAAA,EAA8B,SAAA,EAAiC;AAC9E,IAAA,MAAM,WAAA,GAAc,MAAM,IAAA,CAAK,cAAA,EAAe;AAC9C,IAAA,OAAO,oBAAA,CAAqB;AAAA,MAC1B,QAAQ,IAAA,CAAK,MAAA;AAAA,MACb,WAAA;AAAA,MACA,aAAa,IAAA,CAAK,WAAA;AAAA,MAClB,KAAA;AAAA,MACA,GAAI,SAAA,KAAc,MAAA,GAAY,EAAE,SAAA,KAAc;AAAC,KAChD,CAAA;AAAA,EACH;AAAA,EAEA,MAAM,YAAY,OAAA,EAAiB;AACjC,IAAA,MAAM,WAAA,GAAc,MAAM,IAAA,CAAK,cAAA,EAAe;AAC9C,IAAA,OAAO,qBAAA,CAAsB;AAAA,MAC3B,OAAA;AAAA,MACA,QAAQ,IAAA,CAAK,MAAA;AAAA,MACb,WAAA;AAAA,MACA,aAAa,IAAA,CAAK;AAAA,KACnB,CAAA;AAAA,EACH;AAAA,EAEA,MAAM,aAAa,QAAA,EAAoB;AACrC,IAAA,MAAM,WAAA,GAAc,MAAM,IAAA,CAAK,cAAA,EAAe;AAC9C,IAAA,OAAO,sBAAA,CAAuB;AAAA,MAC5B,QAAA;AAAA,MACA,QAAQ,IAAA,CAAK,MAAA;AAAA,MACb,WAAA;AAAA,MACA,aAAa,IAAA,CAAK;AAAA,KACnB,CAAA;AAAA,EACH;AAAA,EAEA,MAAM,SAAA,GAAY;AAChB,IAAA,MAAM,WAAA,GAAc,MAAM,IAAA,CAAK,cAAA,EAAe;AAC9C,IAAA,OAAO,yBAAA,CAA0B;AAAA,MAC/B,QAAQ,IAAA,CAAK,MAAA;AAAA,MACb,WAAA;AAAA,MACA,aAAa,IAAA,CAAK;AAAA,KACnB,CAAA;AAAA,EACH;AAAA,EAEA,MAAM,aAAa,OAAA,EAAiB;AAClC,IAAA,MAAM,WAAA,GAAc,MAAM,IAAA,CAAK,cAAA,EAAe;AAC9C,IAAA,OAAO,4BAAA,CAA6B;AAAA,MAClC,OAAA;AAAA,MACA,QAAQ,IAAA,CAAK,MAAA;AAAA,MACb,WAAA;AAAA,MACA,aAAa,IAAA,CAAK;AAAA,KACnB,CAAA;AAAA,EACH;AACF;;;AChZA,IAAM,mBAAA,GAAsB,EAAA;AAE5B,eAAeA,YAAAA,CAAY,KAAa,IAAA,EAAoB;AAC1D,EAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,GAAA,EAAK,IAAI,CAAA;AACtC,EAAA,MAAM,OAAO,MAAM,QAAA,CAAS,MAAK,CAAE,KAAA,CAAM,MAAM,EAAE,CAAA;AACjD,EAAA,IAAI,IAAA,GAAgB,IAAA;AACpB,EAAA,IAAI;AACF,IAAA,IAAA,GAAO,IAAA,GAAO,IAAA,CAAK,KAAA,CAAM,IAAI,CAAA,GAAI,IAAA;AAAA,EACnC,CAAA,CAAA,MAAQ;AACN,IAAA,IAAA,GAAO,IAAA;AAAA,EACT;AACA,EAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,IAAA,MAAM,IAAI,kBAAA;AAAA,MACR,CAAA,2BAAA,EAA8B,SAAS,MAAM,CAAA,EAAA,CAAA;AAAA,MAC7C,IAAA,IAAQ,EAAE,MAAA,EAAQ,QAAA,CAAS,MAAA;AAAO,KACpC;AAAA,EACF;AACA,EAAA,OAAO,IAAA;AACT;AAEA,SAAS,UAAU,KAAA,EAA+B;AAChD,EAAA,IAAI,KAAA,IAAS,MAAM,OAAO,IAAA;AAC1B,EAAA,MAAM,GAAA,GAAM,MAAA,CAAO,KAAK,CAAA,CAAE,IAAA,EAAK;AAC/B,EAAA,OAAO,GAAA,CAAI,SAAS,GAAA,GAAM,IAAA;AAC5B;AAEA,SAAS,yBAAyB,GAAA,EAA0C;AAC1E,EAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,GAAG,CAAA,SAAU,EAAC;AACjC,EAAA,OAAO,GAAA,CACJ,GAAA,CAAI,CAAC,KAAA,KAAU;AACd,IAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACxB,MAAA,MAAM,CAAC,KAAA,EAAO,IAAI,CAAA,GAAI,KAAA;AACtB,MAAA,MAAM,CAAA,GAAI,OAAO,KAAK,CAAA;AACtB,MAAA,MAAM,CAAA,GAAI,OAAO,IAAI,CAAA;AACrB,MAAA,IAAI,CAAC,MAAA,CAAO,QAAA,CAAS,CAAC,CAAA,IAAK,CAAC,MAAA,CAAO,QAAA,CAAS,CAAC,CAAA,EAAG,OAAO,IAAA;AACvD,MAAA,OAAO,EAAE,KAAA,EAAO,CAAA,EAAG,IAAA,EAAM,CAAA,EAAE;AAAA,IAC7B;AACA,IAAA,IAAI,KAAA,IAAS,OAAO,KAAA,KAAU,QAAA,EAAU;AACtC,MAAA,MAAM,MAAA,GAAS,KAAA;AACf,MAAA,MAAM,CAAA,GAAI,MAAA,CAAO,MAAA,CAAO,KAAA,IAAS,OAAO,CAAC,CAAA;AACzC,MAAA,MAAM,IAAI,MAAA,CAAO,MAAA,CAAO,QAAQ,MAAA,CAAO,CAAA,IAAK,OAAO,QAAQ,CAAA;AAC3D,MAAA,IAAI,CAAC,MAAA,CAAO,QAAA,CAAS,CAAC,CAAA,IAAK,CAAC,MAAA,CAAO,QAAA,CAAS,CAAC,CAAA,EAAG,OAAO,IAAA;AACvD,MAAA,OAAO,EAAE,KAAA,EAAO,CAAA,EAAG,IAAA,EAAM,CAAA,EAAE;AAAA,IAC7B;AACA,IAAA,OAAO,IAAA;AAAA,EACT,CAAC,CAAA,CACA,MAAA,CAAO,CAAC,KAAA,KAA6C,OAAA,CAAQ,KAAK,CAAC,CAAA;AACxE;AAEA,SAAS,oBAAA,CAAqB,QAAqB,KAAA,EAAsC;AACvF,EAAA,MAAM,SAAA,GAAY,aAAA,CAAc,KAAA,EAAO,IAAI,CAAA;AAC3C,EAAA,MAAM,UAAA,GAAa,aAAA,CAAc,MAAA,CAAO,IAAI,CAAA;AAC5C,EAAA,MAAM,UAAA,GAAa,KAAA,CAAM,IAAA,iBAAK,IAAI,GAAA,CAAI,CAAC,GAAG,UAAA,EAAY,GAAG,SAAS,CAAC,CAAC,CAAA;AAEpE,EAAA,MAAM,QAAA,GACJ,SAAA,CAAU,MAAA,CAAO,QAAQ,CAAA,IAAK,SAAA,CAAU,KAAA,EAAO,QAAQ,CAAA,IAAK,SAAA,CAAU,KAAA,EAAO,KAAK,CAAA,IAAK,IAAA;AAEzF,EAAA,MAAM,UAAA,GAA+B;AAAA,IACnC,EAAA,EAAI,SAAA,CAAU,MAAA,CAAO,EAAE,CAAA,IAAK,EAAA;AAAA,IAC5B,IAAA,EAAM,SAAA,CAAU,MAAA,CAAO,IAAI,CAAA;AAAA,IAC3B,QAAA,EAAU,SAAA,CAAU,MAAA,CAAO,QAAQ,CAAA;AAAA,IACnC,WAAA,EAAa,SAAA,CAAU,MAAA,CAAO,WAAW,CAAA;AAAA,IACzC,OAAA,EAAS,SAAA,CAAU,MAAA,CAAO,OAAA,IAAW,OAAO,EAAE,CAAA;AAAA,IAC9C,SAAA,EAAW,SAAA,CAAU,KAAA,EAAO,IAAI,CAAA;AAAA,IAChC,WAAA,EAAa,SAAA,CAAU,MAAA,CAAO,WAAW,CAAA;AAAA,IACzC,kBAAA,EAAoB,SAAA,CAAU,MAAA,CAAO,kBAAkB,CAAA;AAAA,IACvD,QAAA;AAAA,IACA,SAAA,EACE,iBAAA,CAAkB,MAAA,CAAO,SAAS,CAAA,IAClC,iBAAA,CAAkB,KAAA,EAAO,SAAS,CAAA,IAClC,iBAAA,CAAkB,KAAA,EAAO,cAAc,CAAA;AAAA,IACzC,OAAA,EACE,iBAAA,CAAkB,MAAA,CAAO,OAAO,CAAA,IAChC,iBAAA,CAAkB,KAAA,EAAO,OAAO,CAAA,IAChC,iBAAA,CAAkB,KAAA,EAAO,YAAY,CAAA;AAAA,IACvC,SAAA,EACE,iBAAA,CAAkB,MAAA,CAAO,SAAS,CAAA,IAClC,iBAAA,CAAkB,KAAA,EAAO,SAAS,CAAA,IAClC,iBAAA,CAAkB,KAAA,EAAO,YAAY,CAAA;AAAA,IACvC,WAAW,iBAAA,CAAkB,MAAA,CAAO,SAAS,CAAA,IAAK,iBAAA,CAAkB,OAAO,SAAS,CAAA;AAAA,IACpF,YAAY,iBAAA,CAAkB,MAAA,CAAO,UAAU,CAAA,IAAK,iBAAA,CAAkB,OAAO,UAAU,CAAA;AAAA,IACvF,MAAA,EAAQ,SAAA,CAAU,MAAA,CAAO,MAAM,CAAA;AAAA,IAC/B,SAAA,EAAW,SAAA,CAAU,MAAA,CAAO,SAAS,CAAA;AAAA,IACrC,YAAA,EAAc,SAAA,CAAU,MAAA,CAAO,YAAY,CAAA;AAAA,IAC3C,QAAA,EAAU,uBAAA,CAAwB,MAAA,CAAO,QAAQ,CAAA;AAAA,IACjD,aAAA,EAAe,uBAAA,CAAwB,MAAA,CAAO,aAAa,CAAA;AAAA,IAC3D,YAAA,EAAc,uBAAA,CAAwB,MAAA,CAAO,YAAY,CAAA;AAAA,IACzD,IAAA,EAAM,SAAA,CAAU,MAAA,CAAO,IAAI,CAAA;AAAA,IAC3B,KAAA,EAAO,SAAA,CAAU,MAAA,CAAO,KAAK;AAAA,GAC/B;AAEA,EAAA,IAAI,WAAW,MAAA,EAAQ;AACrB,IAAA,UAAA,CAAW,IAAA,GAAO,UAAA;AAAA,EACpB;AACA,EAAA,IAAI,OAAO,MAAA,CAAO,MAAA,KAAW,SAAA,EAAW;AACtC,IAAA,UAAA,CAAW,SAAS,MAAA,CAAO,MAAA;AAAA,EAC7B;AACA,EAAA,IAAI,OAAO,MAAA,CAAO,MAAA,KAAW,SAAA,EAAW;AACtC,IAAA,UAAA,CAAW,SAAS,MAAA,CAAO,MAAA;AAAA,EAC7B;AACA,EAAA,IAAI,OAAO,MAAA,CAAO,QAAA,KAAa,SAAA,EAAW;AACxC,IAAA,UAAA,CAAW,WAAW,MAAA,CAAO,QAAA;AAAA,EAC/B;AAEA,EAAA,OAAO,UAAA;AACT;AAEO,IAAM,uBAAN,MAA2B;AAAA,EAGhC,WAAA,CAAY,cAAqC,SAAA,EAAW;AAC1D,IAAA,IAAA,CAAK,WAAA,GAAc,WAAA;AAAA,EACrB;AAAA,EAEA,OAAA,CAAQ,MAAA,GAAsB,EAAC,EAAG;AAChC,IAAA,OAAO,uBAAuB,EAAE,GAAG,QAAQ,WAAA,EAAa,IAAA,CAAK,aAAa,CAAA;AAAA,EAC5E;AAAA,EAEA,OAAO,MAAA,EAA8D;AACnE,IAAA,OAAO,sBAAsB,EAAE,GAAG,QAAQ,WAAA,EAAa,IAAA,CAAK,aAAa,CAAA;AAAA,EAC3E;AAAA,EAEA,UAAU,OAAA,EAAiB;AACzB,IAAA,OAAO,yBAAyB,EAAE,OAAA,EAAS,WAAA,EAAa,IAAA,CAAK,aAAa,CAAA;AAAA,EAC5E;AAAA,EAEA,KAAA,CAAM,SAAiB,IAAA,EAAsB;AAC3C,IAAA,OAAO,qBAAqB,EAAE,OAAA,EAAS,MAAM,WAAA,EAAa,IAAA,CAAK,aAAa,CAAA;AAAA,EAC9E;AAAA,EAEA,SAAS,OAAA,EAAiB;AACxB,IAAA,OAAO,wBAAwB,EAAE,OAAA,EAAS,WAAA,EAAa,IAAA,CAAK,aAAa,CAAA;AAAA,EAC3E;AAAA,EAEA,aAAa,MAAA,EAMV;AACD,IAAA,OAAO,4BAA4B,EAAE,GAAG,QAAQ,WAAA,EAAa,IAAA,CAAK,aAAa,CAAA;AAAA,EACjF;AACF;AAEA,eAAsB,sBAAA,CACpB,MAAA,GAAsB,EAAC,EACM;AAC7B,EAAA,IAAI,MAAA,CAAO,MAAA,KAAW,MAAA,IAAa,MAAA,CAAO,WAAW,IAAA,EAAM;AACzD,IAAA,MAAM,IAAI,MAAM,8CAA8C,CAAA;AAAA,EAChE;AACA,EAAA,IAAI,MAAA,CAAO,MAAA,KAAW,MAAA,IAAa,MAAA,CAAO,WAAW,KAAA,EAAO;AAC1D,IAAA,MAAM,IAAI,MAAM,+CAA+C,CAAA;AAAA,EACjE;AAEA,EAAA,MAAM,WAAA,GAAc,OAAO,WAAA,IAAe,SAAA;AAC1C,EAAA,MAAM,OAAA,GAAU,wBAAA,CAAyB,OAAA,EAAS,WAAW,CAAA;AAC7D,EAAA,MAAM,GAAA,GAAM,IAAI,GAAA,CAAI,SAAA,EAAW,OAAO,CAAA;AACtC,EAAA,MAAM,KAAA,GAAQ,OAAO,KAAA,IAAS,mBAAA;AAC9B,EAAA,MAAM,MAAA,GAAS,OAAO,MAAA,IAAU,CAAA;AAEhC,EAAA,GAAA,CAAI,YAAA,CAAa,GAAA,CAAI,OAAA,EAAS,MAAA,CAAO,KAAK,CAAC,CAAA;AAC3C,EAAA,GAAA,CAAI,YAAA,CAAa,GAAA,CAAI,QAAA,EAAU,MAAA,CAAO,MAAM,CAAC,CAAA;AAC7C,EAAA,GAAA,CAAI,YAAA,CAAa,GAAA,CAAI,QAAA,EAAU,MAAM,CAAA;AACrC,EAAA,GAAA,CAAI,YAAA,CAAa,GAAA,CAAI,QAAA,EAAU,OAAO,CAAA;AACtC,EAAA,GAAA,CAAI,YAAA,CAAa,GAAA,CAAI,OAAA,EAAS,MAAA,CAAO,SAAS,IAAI,CAAA;AAClD,EAAA,GAAA,CAAI,aAAa,GAAA,CAAI,WAAA,EAAa,MAAA,CAAO,SAAA,GAAY,SAAS,OAAO,CAAA;AAErE,EAAA,IAAI,OAAO,KAAA,EAAO,GAAA,CAAI,aAAa,GAAA,CAAI,QAAA,EAAU,OAAO,KAAK,CAAA;AAC7D,EAAA,IAAI,OAAO,WAAA,EAAa,GAAA,CAAI,YAAA,CAAa,GAAA,CAAI,gBAAgB,MAAM,CAAA;AACnE,EAAA,IAAI,OAAO,YAAA,EAAc,GAAA,CAAI,aAAa,GAAA,CAAI,gBAAA,EAAkB,OAAO,YAAY,CAAA;AACnF,EAAA,IAAI,OAAO,IAAA,EAAM,GAAA,CAAI,aAAa,GAAA,CAAI,MAAA,EAAQ,OAAO,IAAI,CAAA;AAEzD,EAAA,MAAM,IAAA,GAAQ,MAAMA,YAAAA,CAAY,GAAA,CAAI,UAAU,CAAA;AAC9C,EAAA,MAAM,UAAU,IAAA,CAAK,OAAA;AAAA,IAAQ,CAAC,KAAA,KAC5B,KAAA,CAAM,OAAA,CAAQ,KAAA,EAAO,OAAO,CAAA,GACvB,KAAA,CAAM,OAAA,CAA0B,GAAA,CAAI,CAAC,MAAA,KAAW,oBAAA,CAAqB,QAAQ,KAAK,CAAC,IACpF;AAAC,GACP;AAEA,EAAA,MAAM,QAAA,GAAW,MAAA,CAAO,QAAA,GACpB,OAAA,CAAQ,MAAA;AAAA,IAAO,CAAC,MAAA,KAAA,CACb,MAAA,CAAO,QAAA,IAAY,EAAA,EAAI,WAAA,EAAY,CAAE,QAAA,CAAS,MAAA,CAAO,QAAA,CAAU,WAAA,EAAa;AAAA,GAC/E,GACA,OAAA;AAEJ,EAAA,OAAO,OAAO,OAAO,KAAA,KAAU,QAAA,GAAW,SAAS,KAAA,CAAM,CAAA,EAAG,MAAA,CAAO,KAAK,CAAA,GAAI,QAAA;AAC9E;AAEA,eAAsB,sBAAsB,MAAA,EAKP;AACnC,EAAA,MAAM,WAAA,GAAc,OAAO,WAAA,IAAe,SAAA;AAC1C,EAAA,MAAM,OAAA,GAAU,wBAAA,CAAyB,OAAA,EAAS,WAAW,CAAA;AAE7D,EAAA,IAAI,OAAO,IAAA,EAAM;AACf,IAAA,MAAM,MAAM,IAAI,GAAA,CAAI,iBAAiB,MAAA,CAAO,IAAI,IAAI,OAAO,CAAA;AAC3D,IAAA,MAAM,IAAA,GAAQ,MAAMA,YAAAA,CAAY,GAAA,CAAI,UAAU,CAAA;AAC9C,IAAA,IAAI,CAAC,MAAM,OAAO,IAAA;AAClB,IAAA,OAAO,qBAAqB,IAAI,CAAA;AAAA,EAClC;AAEA,EAAA,IAAI,OAAO,EAAA,EAAI;AACb,IAAA,MAAM,MAAM,IAAI,GAAA,CAAI,YAAY,MAAA,CAAO,EAAE,IAAI,OAAO,CAAA;AACpD,IAAA,MAAM,IAAA,GAAQ,MAAMA,YAAAA,CAAY,GAAA,CAAI,UAAU,CAAA;AAC9C,IAAA,IAAI,CAAC,MAAM,OAAO,IAAA;AAClB,IAAA,OAAO,qBAAqB,IAAI,CAAA;AAAA,EAClC;AAEA,EAAA,IAAI,OAAO,WAAA,EAAa;AACtB,IAAA,MAAM,GAAA,GAAM,IAAI,GAAA,CAAI,CAAA,QAAA,CAAA,EAAY,OAAO,CAAA;AACvC,IAAA,GAAA,CAAI,YAAA,CAAa,GAAA,CAAI,cAAA,EAAgB,MAAA,CAAO,WAAW,CAAA;AACvD,IAAA,MAAM,IAAA,GAAQ,MAAMA,YAAAA,CAAY,GAAA,CAAI,UAAU,CAAA;AAC9C,IAAA,IAAI,CAAC,MAAM,OAAO,IAAA;AAClB,IAAA,MAAM,SAAS,KAAA,CAAM,OAAA,CAAQ,IAAI,CAAA,GAAI,IAAA,CAAK,CAAC,CAAA,GAAI,IAAA;AAC/C,IAAA,OAAO,MAAA,GAAS,oBAAA,CAAqB,MAAM,CAAA,GAAI,IAAA;AAAA,EACjD;AAEA,EAAA,MAAM,IAAI,MAAM,uCAAuC,CAAA;AACzD;AAEA,eAAsB,yBAAyB,MAAA,EAGd;AAC/B,EAAA,MAAM,WAAA,GAAc,OAAO,WAAA,IAAe,SAAA;AAC1C,EAAA,MAAM,OAAA,GAAU,wBAAA,CAAyB,MAAA,EAAQ,WAAW,CAAA;AAC5D,EAAA,MAAM,GAAA,GAAM,IAAI,GAAA,CAAI,OAAA,EAAS,OAAO,CAAA;AACpC,EAAA,GAAA,CAAI,YAAA,CAAa,GAAA,CAAI,UAAA,EAAY,MAAA,CAAO,OAAO,CAAA;AAC/C,EAAA,MAAM,IAAA,GAAQ,MAAMA,YAAAA,CAAY,GAAA,CAAI,UAAU,CAAA;AAE9C,EAAA,OAAO;AAAA,IACL,QAAQ,MAAA,CAAO,OAAA;AAAA,IACf,IAAA,EAAM,wBAAA,CAAyB,IAAA,CAAK,IAAI,CAAA;AAAA,IACxC,IAAA,EAAM,wBAAA,CAAyB,IAAA,CAAK,IAAI,CAAA;AAAA,IACxC,SAAA,EAAW,SAAA,CAAU,IAAA,CAAK,SAAS;AAAA,GACrC;AACF;AAEA,eAAsB,qBAAqB,MAAA,EAIhB;AACzB,EAAA,MAAM,WAAA,GAAc,OAAO,WAAA,IAAe,SAAA;AAC1C,EAAA,MAAM,OAAA,GAAU,wBAAA,CAAyB,MAAA,EAAQ,WAAW,CAAA;AAC5D,EAAA,MAAM,GAAA,GAAM,IAAI,GAAA,CAAI,QAAA,EAAU,OAAO,CAAA;AACrC,EAAA,GAAA,CAAI,YAAA,CAAa,GAAA,CAAI,UAAA,EAAY,MAAA,CAAO,OAAO,CAAA;AAC/C,EAAA,GAAA,CAAI,YAAA,CAAa,GAAA,CAAI,MAAA,EAAQ,MAAA,CAAO,IAAI,CAAA;AACxC,EAAA,MAAM,IAAA,GAAQ,MAAMA,YAAAA,CAAY,GAAA,CAAI,UAAU,CAAA;AAC9C,EAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,IAAA,CAAK,KAAA,IAAS,MAAM,CAAC,CAAA;AAC1C,EAAA,OAAO,MAAA,CAAO,QAAA,CAAS,KAAK,CAAA,GAAI,KAAA,GAAQ,IAAA;AAC1C;AAEA,eAAsB,wBAAwB,MAAA,EAGnB;AACzB,EAAA,MAAM,QAAA,GAAW;AAAA,IACf,SAAS,MAAA,CAAO,OAAA;AAAA,IAChB,GAAI,OAAO,WAAA,GAAc,EAAE,aAAa,MAAA,CAAO,WAAA,KAAgB;AAAC,GAClE;AACA,EAAA,MAAM,GAAA,GAAM,MAAM,oBAAA,CAAqB,EAAE,GAAG,QAAA,EAAU,IAAA,EAAM,OAAO,CAAA;AACnE,EAAA,MAAM,IAAA,GAAO,MAAM,oBAAA,CAAqB,EAAE,GAAG,QAAA,EAAU,IAAA,EAAM,QAAQ,CAAA;AACrE,EAAA,IAAI,GAAA,IAAO,IAAA,IAAQ,IAAA,IAAQ,IAAA,EAAM,OAAO,IAAA;AACxC,EAAA,OAAA,CAAQ,MAAM,IAAA,IAAQ,CAAA;AACxB;AAEA,eAAsB,4BAA4B,MAAA,EAOP;AACzC,EAAA,MAAM,WAAA,GAAc,OAAO,WAAA,IAAe,SAAA;AAC1C,EAAA,MAAM,OAAA,GAAU,wBAAA,CAAyB,MAAA,EAAQ,WAAW,CAAA;AAC5D,EAAA,MAAM,GAAA,GAAM,IAAI,GAAA,CAAI,iBAAA,EAAmB,OAAO,CAAA;AAC9C,EAAA,GAAA,CAAI,YAAA,CAAa,GAAA,CAAI,QAAA,EAAU,MAAA,CAAO,OAAO,CAAA;AAC7C,EAAA,IAAI,MAAA,CAAO,SAAS,GAAA,CAAI,YAAA,CAAa,IAAI,SAAA,EAAW,MAAA,CAAO,OAAA,CAAQ,QAAA,EAAU,CAAA;AAC7E,EAAA,IAAI,MAAA,CAAO,OAAO,GAAA,CAAI,YAAA,CAAa,IAAI,OAAA,EAAS,MAAA,CAAO,KAAA,CAAM,QAAA,EAAU,CAAA;AACvE,EAAA,IAAI,OAAO,QAAA,EAAU,GAAA,CAAI,aAAa,GAAA,CAAI,UAAA,EAAY,OAAO,QAAQ,CAAA;AACrE,EAAA,IAAI,MAAA,CAAO,UAAU,GAAA,CAAI,YAAA,CAAa,IAAI,UAAA,EAAY,MAAA,CAAO,QAAA,CAAS,QAAA,EAAU,CAAA;AAEhF,EAAA,MAAM,IAAA,GAAQ,MAAMA,YAAAA,CAAY,GAAA,CAAI,UAAU,CAAA;AAI9C,EAAA,MAAM,MAAA,GAAS,MAAM,OAAA,CAAQ,IAAI,IAAI,IAAA,GAAQ,IAAA,EAAM,WAAW,EAAC;AAC/D,EAAA,OAAO,MAAA,CACJ,GAAA,CAAI,CAAC,KAAA,MAAW;AAAA,IACf,CAAA,EAAG,MAAA,CAAO,KAAA,CAAM,CAAC,CAAA;AAAA,IACjB,CAAA,EAAG,MAAA,CAAO,KAAA,CAAM,CAAC;AAAA,GACnB,CAAE,CAAA,CACD,MAAA,CAAO,CAAC,UAAU,MAAA,CAAO,QAAA,CAAS,KAAA,CAAM,CAAC,CAAA,IAAK,MAAA,CAAO,QAAA,CAAS,KAAA,CAAM,CAAC,CAAC,CAAA;AAC3E","file":"index.js","sourcesContent":["import { createHmac, randomBytes } from \"node:crypto\";\nimport { parseUnits } from \"viem\";\nimport type { WalletFullContext } from \"../../wallet/types\";\n\nexport type PolymarketEnvironment = \"mainnet\" | \"testnet\";\n\nexport type PolymarketSide = \"BUY\" | \"SELL\";\nexport type PolymarketOrderType = \"GTC\" | \"FOK\" | \"FAK\" | \"GTD\";\nexport type PolymarketSignatureType = 0 | 1 | 2;\n\nexport interface PolymarketApiCredentials {\n apiKey: string;\n secret: string;\n passphrase: string;\n}\n\nexport interface PolymarketMarket {\n id: string;\n slug?: string | null;\n question?: string | null;\n description?: string | null;\n eventId?: string | null;\n eventSlug?: string | null;\n conditionId?: string | null;\n marketMakerAddress?: string | null;\n category?: string | null;\n tags?: string[];\n active?: boolean;\n closed?: boolean;\n resolved?: boolean;\n startDate?: string | null;\n endDate?: string | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n closedTime?: string | null;\n volume?: string | null;\n liquidity?: string | null;\n openInterest?: string | null;\n outcomes?: string[];\n outcomePrices?: number[];\n clobTokenIds?: string[];\n icon?: string | null;\n image?: string | null;\n}\n\nexport interface PolymarketOrderbookLevel {\n price: number;\n size: number;\n}\n\nexport interface PolymarketOrderbook {\n market: string;\n bids: PolymarketOrderbookLevel[];\n asks: PolymarketOrderbookLevel[];\n timestamp?: string | null;\n}\n\nexport interface PolymarketPriceHistoryPoint {\n t: number;\n p: number;\n}\n\nexport interface PolymarketSignedOrderPayload {\n salt: string;\n maker: `0x${string}`;\n signer: `0x${string}`;\n taker: `0x${string}`;\n tokenId: string;\n makerAmount: string;\n takerAmount: string;\n expiration: string;\n nonce: string;\n feeRateBps: string;\n side: 0 | 1;\n signatureType: PolymarketSignatureType;\n signature: `0x${string}`;\n}\n\nexport class PolymarketApiError extends Error {\n constructor(\n message: string,\n public readonly response: unknown,\n ) {\n super(message);\n this.name = \"PolymarketApiError\";\n }\n}\n\nexport class PolymarketAuthError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"PolymarketAuthError\";\n }\n}\n\nexport const POLYMARKET_ENDPOINTS = {\n gamma: {\n mainnet: \"https://gamma-api.polymarket.com\",\n testnet: \"https://gamma-api.polymarket.com\",\n },\n clob: {\n mainnet: \"https://clob.polymarket.com\",\n testnet: \"https://clob.polymarket.com\",\n },\n data: {\n mainnet: \"https://data-api.polymarket.com\",\n testnet: \"https://data-api.polymarket.com\",\n },\n} as const satisfies Record<\"gamma\" | \"clob\" | \"data\", Record<PolymarketEnvironment, string>>;\n\nexport const POLYMARKET_CHAIN_ID: Record<PolymarketEnvironment, number> = {\n mainnet: 137,\n testnet: 80002,\n};\n\nexport const POLYMARKET_EXCHANGE_ADDRESSES: Record<\n PolymarketEnvironment,\n { ctf: `0x${string}`; negRisk: `0x${string}` }\n> = {\n mainnet: {\n ctf: \"0x4bfb41d5b3570defd03c39a9a4d8de6bd8b8982e\",\n negRisk: \"0xc5d563a36ae78145c45a50134d48a1215220f80a\",\n },\n testnet: {\n ctf: \"0xdfe02eb6733538f8ea35d585af8de5958ad99e40\",\n negRisk: \"0xdfe02eb6733538f8ea35d585af8de5958ad99e40\",\n },\n};\n\nexport const POLYMARKET_CLOB_DOMAIN = {\n name: \"Polymarket CTF Exchange\",\n version: \"1\",\n};\n\nexport const POLYMARKET_CLOB_AUTH_DOMAIN = {\n name: \"ClobAuthDomain\",\n version: \"1\",\n};\n\nexport const ZERO_ADDRESS = \"0x0000000000000000000000000000000000000000\" as const;\n\nexport function resolvePolymarketBaseUrl(\n service: keyof typeof POLYMARKET_ENDPOINTS,\n environment: PolymarketEnvironment,\n): string {\n return POLYMARKET_ENDPOINTS[service][environment];\n}\n\nexport function assertWalletSigner(wallet: WalletFullContext | undefined) {\n if (!wallet?.account || !wallet.walletClient) {\n throw new Error(\"Polymarket requires a wallet with signing capabilities.\");\n }\n}\n\nexport function toDecimalString(value: string | number | bigint): string {\n if (typeof value === \"string\") return value;\n if (typeof value === \"bigint\") return value.toString();\n if (!Number.isFinite(value)) {\n throw new Error(\"Numeric values must be finite.\");\n }\n const asString = value.toString();\n if (/e/i.test(asString)) {\n const [mantissa, exponentPart] = asString.split(/e/i);\n const exponent = Number(exponentPart);\n const [integerPart, fractionalPart = \"\"] = mantissa.split(\".\");\n if (exponent >= 0) {\n return integerPart + fractionalPart.padEnd(exponent + fractionalPart.length, \"0\");\n }\n const zeros = \"0\".repeat(Math.abs(exponent) - 1);\n return `0.${zeros}${integerPart}${fractionalPart}`.replace(/\\.0+$/, \"\");\n }\n return asString;\n}\n\nfunction normalizeArrayish(value: unknown): unknown[] {\n if (Array.isArray(value)) return value;\n if (typeof value === \"string\") {\n const trimmed = value.trim();\n if (!trimmed) return [];\n if (trimmed.startsWith(\"[\")) {\n try {\n const parsed = JSON.parse(trimmed);\n return Array.isArray(parsed) ? parsed : [];\n } catch {\n return [];\n }\n }\n return [trimmed];\n }\n return [];\n}\n\nexport function normalizeStringArrayish(value: unknown): string[] {\n return normalizeArrayish(value)\n .map((entry) => (entry == null ? \"\" : String(entry).trim()))\n .filter((entry) => entry.length > 0);\n}\n\nexport function normalizeNumberArrayish(value: unknown): number[] {\n return normalizeArrayish(value)\n .map((entry) => (typeof entry === \"number\" ? entry : Number.parseFloat(String(entry))))\n .filter((entry) => Number.isFinite(entry));\n}\n\nexport function normalizeTags(value: unknown): string[] {\n if (!Array.isArray(value)) return [];\n const tags = value\n .map((entry) => {\n if (entry && typeof entry === \"object\") {\n const record = entry as Record<string, unknown>;\n const label = record.label ?? record.id ?? record.tag;\n return label ? String(label).trim() : \"\";\n }\n return String(entry ?? \"\").trim();\n })\n .filter((entry) => entry.length > 0);\n return Array.from(new Set(tags));\n}\n\nexport function parseOptionalDate(value: unknown): string | null {\n if (!value) return null;\n if (typeof value === \"string\") {\n const trimmed = value.trim();\n return trimmed.length > 0 ? trimmed : null;\n }\n if (typeof value === \"number\" && Number.isFinite(value)) {\n const ts = value > 1_000_000_000_000 ? value : value * 1000;\n const date = new Date(ts);\n return Number.isNaN(date.getTime()) ? null : date.toISOString();\n }\n return null;\n}\n\nexport function buildHmacSignature(args: {\n secret: string;\n timestamp: number | string;\n method: string;\n path: string;\n body?: string | Record<string, unknown> | null;\n}): string {\n const timestamp = args.timestamp.toString();\n const method = args.method.toUpperCase();\n const path = args.path;\n const body =\n args.body == null ? \"\" : typeof args.body === \"string\" ? args.body : JSON.stringify(args.body);\n const payload = `${timestamp}${method}${path}${body}`;\n const key = Buffer.from(args.secret, \"base64\");\n return createHmac(\"sha256\", key).update(payload).digest(\"hex\");\n}\n\nexport function buildL2Headers(args: {\n credentials: PolymarketApiCredentials;\n address: `0x${string}`;\n timestamp?: number;\n method: string;\n path: string;\n body?: Record<string, unknown> | string | null;\n}): Record<string, string> {\n const timestamp = args.timestamp ?? Math.floor(Date.now() / 1000);\n const signature = buildHmacSignature({\n secret: args.credentials.secret,\n timestamp,\n method: args.method,\n path: args.path,\n body: args.body ?? null,\n });\n return {\n POLY_ADDRESS: args.address,\n POLY_API_KEY: args.credentials.apiKey,\n POLY_PASSPHRASE: args.credentials.passphrase,\n POLY_TIMESTAMP: timestamp.toString(),\n POLY_SIGNATURE: signature,\n };\n}\n\nexport async function buildL1Headers(args: {\n wallet: WalletFullContext;\n timestamp?: number;\n nonce?: number;\n environment?: PolymarketEnvironment;\n message?: string;\n}): Promise<Record<string, string>> {\n assertWalletSigner(args.wallet);\n const timestamp = args.timestamp ?? Math.floor(Date.now() / 1000);\n const nonce = args.nonce ?? Date.now();\n const chainId = POLYMARKET_CHAIN_ID[args.environment ?? \"mainnet\"];\n const address = args.wallet.address as `0x${string}`;\n const message = args.message ?? \"Create or derive a Polymarket API key\";\n\n const signature = await args.wallet.walletClient.signTypedData({\n account: args.wallet.account,\n domain: {\n ...POLYMARKET_CLOB_AUTH_DOMAIN,\n chainId,\n },\n types: {\n ClobAuth: [\n { name: \"address\", type: \"address\" },\n { name: \"timestamp\", type: \"string\" },\n { name: \"nonce\", type: \"uint256\" },\n { name: \"message\", type: \"string\" },\n ],\n },\n primaryType: \"ClobAuth\",\n message: {\n address,\n timestamp: timestamp.toString(),\n nonce: BigInt(nonce),\n message,\n },\n });\n\n return {\n POLY_ADDRESS: address,\n POLY_TIMESTAMP: timestamp.toString(),\n POLY_NONCE: nonce.toString(),\n POLY_SIGNATURE: signature,\n };\n}\n\nexport function resolveExchangeAddress(args: {\n environment: PolymarketEnvironment;\n negRisk?: boolean;\n exchangeAddress?: `0x${string}`;\n}): `0x${string}` {\n if (args.exchangeAddress) return args.exchangeAddress;\n const env = args.environment;\n return args.negRisk\n ? POLYMARKET_EXCHANGE_ADDRESSES[env].negRisk\n : POLYMARKET_EXCHANGE_ADDRESSES[env].ctf;\n}\n\nfunction parseUintString(value: string, name: string): bigint {\n const trimmed = value.trim();\n if (!/^\\d+$/.test(trimmed)) {\n throw new Error(`${name} must be a base-10 integer string.`);\n }\n return BigInt(trimmed);\n}\n\nexport function buildPolymarketOrderAmounts(args: {\n side: PolymarketSide;\n price: string | number | bigint;\n size: string | number | bigint;\n tickSize?: string | number | bigint;\n}): { makerAmount: bigint; takerAmount: bigint } {\n const priceStr = toDecimalString(args.price);\n const sizeStr = toDecimalString(args.size);\n if (!priceStr || !sizeStr) {\n throw new Error(\"Order price and size are required.\");\n }\n const priceFloat = Number(priceStr);\n if (!Number.isFinite(priceFloat) || priceFloat <= 0 || priceFloat >= 1) {\n throw new Error(\"Order price must be between 0 and 1 (exclusive).\");\n }\n const sizeFloat = Number(sizeStr);\n if (!Number.isFinite(sizeFloat) || sizeFloat <= 0) {\n throw new Error(\"Order size must be positive.\");\n }\n\n let priceUnits = parseUnits(priceStr, 6);\n if (args.tickSize !== undefined) {\n const tickUnits = parseUnits(toDecimalString(args.tickSize), 6);\n if (tickUnits <= 0n) {\n throw new Error(\"tickSize must be positive.\");\n }\n priceUnits = (priceUnits / tickUnits) * tickUnits;\n }\n\n const sizeUnits = parseUnits(sizeStr, 6);\n const quoteUnits = (priceUnits * sizeUnits) / 1_000_000n;\n\n if (args.side === \"BUY\") {\n return { makerAmount: quoteUnits, takerAmount: sizeUnits };\n }\n return { makerAmount: sizeUnits, takerAmount: quoteUnits };\n}\n\nexport async function buildSignedOrderPayload(args: {\n wallet: WalletFullContext;\n environment?: PolymarketEnvironment;\n tokenId: string;\n side: PolymarketSide;\n price: string | number | bigint;\n size: string | number | bigint;\n expiration?: number;\n nonce?: number;\n feeRateBps?: number;\n tickSize?: string | number | bigint;\n maker?: `0x${string}`;\n signer?: `0x${string}`;\n taker?: `0x${string}`;\n signatureType?: PolymarketSignatureType;\n negRisk?: boolean;\n exchangeAddress?: `0x${string}`;\n}): Promise<PolymarketSignedOrderPayload> {\n assertWalletSigner(args.wallet);\n const environment = args.environment ?? \"mainnet\";\n const chainId = POLYMARKET_CHAIN_ID[environment];\n const exchangeAddress = resolveExchangeAddress({\n environment,\n ...(args.negRisk !== undefined ? { negRisk: args.negRisk } : {}),\n ...(args.exchangeAddress ? { exchangeAddress: args.exchangeAddress } : {}),\n });\n\n const maker = args.maker ?? (args.wallet.address as `0x${string}`);\n const signer = args.signer ?? (args.wallet.address as `0x${string}`);\n const taker = args.taker ?? ZERO_ADDRESS;\n const sideValue: 0 | 1 = args.side === \"BUY\" ? 0 : 1;\n const signatureType: PolymarketSignatureType = args.signatureType ?? 0;\n\n const tokenIdValue = args.tokenId.startsWith(\"0x\")\n ? BigInt(args.tokenId)\n : parseUintString(args.tokenId, \"tokenId\");\n\n const { makerAmount, takerAmount } = buildPolymarketOrderAmounts({\n side: args.side,\n price: args.price,\n size: args.size,\n ...(args.tickSize !== undefined ? { tickSize: args.tickSize } : {}),\n });\n\n const salt = BigInt(`0x${randomBytes(16).toString(\"hex\")}`);\n const expiration = BigInt(args.expiration ?? 0);\n const nonce = BigInt(args.nonce ?? 0);\n const feeRateBps = BigInt(args.feeRateBps ?? 0);\n\n const message = {\n salt,\n maker,\n signer,\n taker,\n tokenId: tokenIdValue,\n makerAmount,\n takerAmount,\n expiration,\n nonce,\n feeRateBps,\n side: sideValue,\n signatureType,\n };\n\n const signature = await args.wallet.walletClient.signTypedData({\n account: args.wallet.account,\n domain: {\n ...POLYMARKET_CLOB_DOMAIN,\n chainId,\n verifyingContract: exchangeAddress,\n },\n types: {\n Order: [\n { name: \"salt\", type: \"uint256\" },\n { name: \"maker\", type: \"address\" },\n { name: \"signer\", type: \"address\" },\n { name: \"taker\", type: \"address\" },\n { name: \"tokenId\", type: \"uint256\" },\n { name: \"makerAmount\", type: \"uint256\" },\n { name: \"takerAmount\", type: \"uint256\" },\n { name: \"expiration\", type: \"uint256\" },\n { name: \"nonce\", type: \"uint256\" },\n { name: \"feeRateBps\", type: \"uint256\" },\n { name: \"side\", type: \"uint8\" },\n { name: \"signatureType\", type: \"uint8\" },\n ],\n },\n primaryType: \"Order\",\n message,\n });\n\n return {\n salt: message.salt.toString(),\n maker,\n signer,\n taker,\n tokenId: tokenIdValue.toString(),\n makerAmount: message.makerAmount.toString(),\n takerAmount: message.takerAmount.toString(),\n expiration: message.expiration.toString(),\n nonce: message.nonce.toString(),\n feeRateBps: message.feeRateBps.toString(),\n side: sideValue,\n signatureType,\n signature: signature as `0x${string}`,\n };\n}\n","import type { WalletFullContext } from \"../../wallet/types\";\nimport {\n PolymarketApiCredentials,\n PolymarketApiError,\n PolymarketAuthError,\n PolymarketEnvironment,\n PolymarketOrderType,\n PolymarketSide,\n PolymarketSignatureType,\n buildL1Headers,\n buildL2Headers,\n buildSignedOrderPayload,\n resolvePolymarketBaseUrl,\n} from \"./base\";\n\nexport interface PolymarketApiKeyResponse {\n apiKey: string;\n secret: string;\n passphrase: string;\n}\n\nexport interface PolymarketOrderIntent {\n tokenId: string;\n side: PolymarketSide;\n price: string | number | bigint;\n size: string | number | bigint;\n expiration?: number;\n nonce?: number;\n feeRateBps?: number;\n tickSize?: string | number | bigint;\n maker?: `0x${string}`;\n signer?: `0x${string}`;\n taker?: `0x${string}`;\n signatureType?: PolymarketSignatureType;\n negRisk?: boolean;\n exchangeAddress?: `0x${string}`;\n}\n\nexport interface PolymarketPlaceOrderResponse {\n orderId?: string;\n status?: string;\n message?: string;\n [key: string]: unknown;\n}\n\nasync function resolveAuthContext(args: {\n wallet?: WalletFullContext;\n walletAddress?: `0x${string}`;\n credentials?: PolymarketApiCredentials;\n environment?: PolymarketEnvironment;\n}): Promise<{ credentials: PolymarketApiCredentials; address: `0x${string}` }> {\n if (args.wallet) {\n const credentials =\n args.credentials ??\n (await createPolymarketApiKey({\n wallet: args.wallet,\n ...(args.environment ? { environment: args.environment } : {}),\n }));\n return {\n credentials,\n address: args.wallet.address as `0x${string}`,\n };\n }\n\n if (args.walletAddress && args.credentials) {\n return { credentials: args.credentials, address: args.walletAddress };\n }\n\n throw new PolymarketAuthError(\n \"Polymarket auth requires a wallet (preferred) or credentials + walletAddress.\",\n );\n}\n\nasync function requestJson(url: string, init?: RequestInit) {\n const response = await fetch(url, init);\n const text = await response.text().catch(() => \"\");\n let data: unknown = null;\n try {\n data = text ? JSON.parse(text) : null;\n } catch {\n data = text;\n }\n if (!response.ok) {\n throw new PolymarketApiError(\n `Polymarket request failed (${response.status}).`,\n data ?? { status: response.status },\n );\n }\n return data;\n}\n\nfunction resolvePath(url: string): string {\n const parsed = new URL(url);\n return `${parsed.pathname}${parsed.search}`;\n}\n\nexport async function createPolymarketApiKey(args: {\n wallet: WalletFullContext;\n environment?: PolymarketEnvironment;\n timestamp?: number;\n nonce?: number;\n message?: string;\n}): Promise<PolymarketApiKeyResponse> {\n const environment = args.environment ?? \"mainnet\";\n const baseUrl = resolvePolymarketBaseUrl(\"clob\", environment);\n const url = `${baseUrl}/auth/api-key`;\n const headers = await buildL1Headers({\n wallet: args.wallet,\n environment,\n ...(args.timestamp !== undefined ? { timestamp: args.timestamp } : {}),\n ...(args.nonce !== undefined ? { nonce: args.nonce } : {}),\n ...(args.message !== undefined ? { message: args.message } : {}),\n });\n const data = (await requestJson(url, {\n method: \"POST\",\n headers: {\n \"content-type\": \"application/json\",\n ...headers,\n },\n body: JSON.stringify({}),\n })) as Partial<PolymarketApiKeyResponse>;\n\n if (!data?.apiKey || !data?.secret || !data?.passphrase) {\n throw new PolymarketAuthError(\"Failed to create Polymarket API key.\");\n }\n\n return {\n apiKey: data.apiKey,\n secret: data.secret,\n passphrase: data.passphrase,\n };\n}\n\nexport async function derivePolymarketApiKey(args: {\n wallet: WalletFullContext;\n environment?: PolymarketEnvironment;\n timestamp?: number;\n nonce?: number;\n message?: string;\n}): Promise<PolymarketApiKeyResponse> {\n const environment = args.environment ?? \"mainnet\";\n const baseUrl = resolvePolymarketBaseUrl(\"clob\", environment);\n const url = `${baseUrl}/auth/derive-api-key`;\n const headers = await buildL1Headers({\n wallet: args.wallet,\n environment,\n ...(args.timestamp !== undefined ? { timestamp: args.timestamp } : {}),\n ...(args.nonce !== undefined ? { nonce: args.nonce } : {}),\n ...(args.message !== undefined ? { message: args.message } : {}),\n });\n const data = (await requestJson(url, {\n method: \"GET\",\n headers: {\n \"content-type\": \"application/json\",\n ...headers,\n },\n })) as Partial<PolymarketApiKeyResponse>;\n\n if (!data?.apiKey || !data?.secret || !data?.passphrase) {\n throw new PolymarketAuthError(\"Failed to derive Polymarket API key.\");\n }\n\n return {\n apiKey: data.apiKey,\n secret: data.secret,\n passphrase: data.passphrase,\n };\n}\n\nexport async function placePolymarketOrder(args: {\n wallet: WalletFullContext;\n credentials?: PolymarketApiCredentials;\n order: PolymarketOrderIntent;\n orderType?: PolymarketOrderType;\n environment?: PolymarketEnvironment;\n}): Promise<PolymarketPlaceOrderResponse> {\n const environment = args.environment ?? \"mainnet\";\n const baseUrl = resolvePolymarketBaseUrl(\"clob\", environment);\n const url = `${baseUrl}/order`;\n\n const signedOrder = await buildSignedOrderPayload({\n wallet: args.wallet,\n environment,\n ...args.order,\n });\n\n const auth = await resolveAuthContext({\n wallet: args.wallet,\n ...(args.credentials ? { credentials: args.credentials } : {}),\n environment,\n });\n\n const body = {\n order: signedOrder,\n owner: auth.credentials.apiKey,\n orderType: args.orderType ?? \"GTC\",\n };\n\n const headers = buildL2Headers({\n credentials: auth.credentials,\n address: auth.address,\n method: \"POST\",\n path: resolvePath(url),\n body,\n });\n\n return (await requestJson(url, {\n method: \"POST\",\n headers: {\n \"content-type\": \"application/json\",\n ...headers,\n },\n body: JSON.stringify(body),\n })) as PolymarketPlaceOrderResponse;\n}\n\nexport async function cancelPolymarketOrder(args: {\n orderId: string;\n wallet?: WalletFullContext;\n walletAddress?: `0x${string}`;\n credentials?: PolymarketApiCredentials;\n environment?: PolymarketEnvironment;\n}): Promise<Record<string, unknown>> {\n const environment = args.environment ?? \"mainnet\";\n const baseUrl = resolvePolymarketBaseUrl(\"clob\", environment);\n const url = `${baseUrl}/order`;\n const body = { orderID: args.orderId };\n\n const auth = await resolveAuthContext({\n ...(args.wallet ? { wallet: args.wallet } : {}),\n ...(args.walletAddress ? { walletAddress: args.walletAddress } : {}),\n ...(args.credentials ? { credentials: args.credentials } : {}),\n environment,\n });\n\n const headers = buildL2Headers({\n credentials: auth.credentials,\n address: auth.address,\n method: \"DELETE\",\n path: resolvePath(url),\n body,\n });\n\n return (await requestJson(url, {\n method: \"DELETE\",\n headers: {\n \"content-type\": \"application/json\",\n ...headers,\n },\n body: JSON.stringify(body),\n })) as Record<string, unknown>;\n}\n\nexport async function cancelPolymarketOrders(args: {\n orderIds: string[];\n wallet?: WalletFullContext;\n walletAddress?: `0x${string}`;\n credentials?: PolymarketApiCredentials;\n environment?: PolymarketEnvironment;\n}): Promise<Record<string, unknown>> {\n const environment = args.environment ?? \"mainnet\";\n const baseUrl = resolvePolymarketBaseUrl(\"clob\", environment);\n const url = `${baseUrl}/orders`;\n const body = { orderIDs: args.orderIds };\n\n const auth = await resolveAuthContext({\n ...(args.wallet ? { wallet: args.wallet } : {}),\n ...(args.walletAddress ? { walletAddress: args.walletAddress } : {}),\n ...(args.credentials ? { credentials: args.credentials } : {}),\n environment,\n });\n\n const headers = buildL2Headers({\n credentials: auth.credentials,\n address: auth.address,\n method: \"DELETE\",\n path: resolvePath(url),\n body,\n });\n\n return (await requestJson(url, {\n method: \"DELETE\",\n headers: {\n \"content-type\": \"application/json\",\n ...headers,\n },\n body: JSON.stringify(body),\n })) as Record<string, unknown>;\n}\n\nexport async function cancelAllPolymarketOrders(args: {\n wallet?: WalletFullContext;\n walletAddress?: `0x${string}`;\n credentials?: PolymarketApiCredentials;\n environment?: PolymarketEnvironment;\n}): Promise<Record<string, unknown>> {\n const environment = args.environment ?? \"mainnet\";\n const baseUrl = resolvePolymarketBaseUrl(\"clob\", environment);\n const url = `${baseUrl}/cancel-all`;\n const auth = await resolveAuthContext({\n ...(args.wallet ? { wallet: args.wallet } : {}),\n ...(args.walletAddress ? { walletAddress: args.walletAddress } : {}),\n ...(args.credentials ? { credentials: args.credentials } : {}),\n environment,\n });\n const headers = buildL2Headers({\n credentials: auth.credentials,\n address: auth.address,\n method: \"DELETE\",\n path: resolvePath(url),\n });\n\n return (await requestJson(url, {\n method: \"DELETE\",\n headers: {\n \"content-type\": \"application/json\",\n ...headers,\n },\n })) as Record<string, unknown>;\n}\n\nexport async function cancelMarketPolymarketOrders(args: {\n tokenId: string;\n wallet?: WalletFullContext;\n walletAddress?: `0x${string}`;\n credentials?: PolymarketApiCredentials;\n environment?: PolymarketEnvironment;\n}): Promise<Record<string, unknown>> {\n const environment = args.environment ?? \"mainnet\";\n const baseUrl = resolvePolymarketBaseUrl(\"clob\", environment);\n const url = `${baseUrl}/cancel-market-orders`;\n const body = { market: args.tokenId };\n const auth = await resolveAuthContext({\n ...(args.wallet ? { wallet: args.wallet } : {}),\n ...(args.walletAddress ? { walletAddress: args.walletAddress } : {}),\n ...(args.credentials ? { credentials: args.credentials } : {}),\n environment,\n });\n const headers = buildL2Headers({\n credentials: auth.credentials,\n address: auth.address,\n method: \"DELETE\",\n path: resolvePath(url),\n body,\n });\n\n return (await requestJson(url, {\n method: \"DELETE\",\n headers: {\n \"content-type\": \"application/json\",\n ...headers,\n },\n body: JSON.stringify(body),\n })) as Record<string, unknown>;\n}\n\nexport class PolymarketExchangeClient {\n private readonly wallet: WalletFullContext;\n private readonly credentials: PolymarketApiCredentials | undefined;\n private readonly environment: PolymarketEnvironment;\n private cachedCredentials: PolymarketApiCredentials | undefined;\n\n constructor(args: {\n wallet: WalletFullContext;\n credentials?: PolymarketApiCredentials;\n environment?: PolymarketEnvironment;\n }) {\n this.wallet = args.wallet;\n this.credentials = args.credentials;\n this.environment = args.environment ?? \"mainnet\";\n }\n\n private async getCredentials() {\n if (this.cachedCredentials) return this.cachedCredentials;\n const resolved = await resolveAuthContext({\n wallet: this.wallet,\n ...(this.credentials ? { credentials: this.credentials } : {}),\n environment: this.environment,\n });\n this.cachedCredentials = resolved.credentials;\n return resolved.credentials;\n }\n\n async placeOrder(order: PolymarketOrderIntent, orderType?: PolymarketOrderType) {\n const credentials = await this.getCredentials();\n return placePolymarketOrder({\n wallet: this.wallet,\n credentials,\n environment: this.environment,\n order,\n ...(orderType !== undefined ? { orderType } : {}),\n });\n }\n\n async cancelOrder(orderId: string) {\n const credentials = await this.getCredentials();\n return cancelPolymarketOrder({\n orderId,\n wallet: this.wallet,\n credentials,\n environment: this.environment,\n });\n }\n\n async cancelOrders(orderIds: string[]) {\n const credentials = await this.getCredentials();\n return cancelPolymarketOrders({\n orderIds,\n wallet: this.wallet,\n credentials,\n environment: this.environment,\n });\n }\n\n async cancelAll() {\n const credentials = await this.getCredentials();\n return cancelAllPolymarketOrders({\n wallet: this.wallet,\n credentials,\n environment: this.environment,\n });\n }\n\n async cancelMarket(tokenId: string) {\n const credentials = await this.getCredentials();\n return cancelMarketPolymarketOrders({\n tokenId,\n wallet: this.wallet,\n credentials,\n environment: this.environment,\n });\n }\n}\n","import {\n PolymarketApiError,\n PolymarketEnvironment,\n PolymarketMarket,\n PolymarketOrderbook,\n PolymarketOrderbookLevel,\n PolymarketPriceHistoryPoint,\n normalizeNumberArrayish,\n normalizeStringArrayish,\n normalizeTags,\n parseOptionalDate,\n resolvePolymarketBaseUrl,\n} from \"./base\";\n\ntype GammaEvent = Record<string, unknown>;\ntype GammaMarket = Record<string, unknown>;\n\ntype FetchParams = {\n environment?: PolymarketEnvironment;\n limit?: number;\n offset?: number;\n order?: string;\n ascending?: boolean;\n tagId?: string;\n relatedTags?: boolean;\n excludeTagId?: string;\n category?: string;\n slug?: string;\n active?: boolean;\n closed?: boolean;\n};\n\nconst DEFAULT_EVENT_LIMIT = 50;\n\nasync function requestJson(url: string, init?: RequestInit) {\n const response = await fetch(url, init);\n const text = await response.text().catch(() => \"\");\n let data: unknown = null;\n try {\n data = text ? JSON.parse(text) : null;\n } catch {\n data = text;\n }\n if (!response.ok) {\n throw new PolymarketApiError(\n `Polymarket request failed (${response.status}).`,\n data ?? { status: response.status },\n );\n }\n return data;\n}\n\nfunction getString(value: unknown): string | null {\n if (value == null) return null;\n const str = String(value).trim();\n return str.length ? str : null;\n}\n\nfunction normalizeOrderbookLevels(raw: unknown): PolymarketOrderbookLevel[] {\n if (!Array.isArray(raw)) return [];\n return raw\n .map((entry) => {\n if (Array.isArray(entry)) {\n const [price, size] = entry;\n const p = Number(price);\n const s = Number(size);\n if (!Number.isFinite(p) || !Number.isFinite(s)) return null;\n return { price: p, size: s };\n }\n if (entry && typeof entry === \"object\") {\n const record = entry as Record<string, unknown>;\n const p = Number(record.price ?? record.p);\n const s = Number(record.size ?? record.s ?? record.quantity);\n if (!Number.isFinite(p) || !Number.isFinite(s)) return null;\n return { price: p, size: s };\n }\n return null;\n })\n .filter((entry): entry is PolymarketOrderbookLevel => Boolean(entry));\n}\n\nfunction normalizeGammaMarket(market: GammaMarket, event?: GammaEvent): PolymarketMarket {\n const eventTags = normalizeTags(event?.tags);\n const marketTags = normalizeTags(market.tags);\n const mergedTags = Array.from(new Set([...marketTags, ...eventTags]));\n\n const category =\n getString(market.category) ?? getString(event?.category) ?? getString(event?.title) ?? null;\n\n const normalized: PolymarketMarket = {\n id: getString(market.id) ?? \"\",\n slug: getString(market.slug),\n question: getString(market.question),\n description: getString(market.description),\n eventId: getString(market.eventId ?? event?.id),\n eventSlug: getString(event?.slug),\n conditionId: getString(market.conditionId),\n marketMakerAddress: getString(market.marketMakerAddress),\n category,\n startDate:\n parseOptionalDate(market.startDate) ??\n parseOptionalDate(event?.startDate) ??\n parseOptionalDate(event?.eventStartTime),\n endDate:\n parseOptionalDate(market.endDate) ??\n parseOptionalDate(event?.endDate) ??\n parseOptionalDate(event?.eventEndTime),\n createdAt:\n parseOptionalDate(market.createdAt) ??\n parseOptionalDate(event?.createdAt) ??\n parseOptionalDate(event?.creationDate),\n updatedAt: parseOptionalDate(market.updatedAt) ?? parseOptionalDate(event?.updatedAt),\n closedTime: parseOptionalDate(market.closedTime) ?? parseOptionalDate(event?.closedTime),\n volume: getString(market.volume),\n liquidity: getString(market.liquidity),\n openInterest: getString(market.openInterest),\n outcomes: normalizeStringArrayish(market.outcomes),\n outcomePrices: normalizeNumberArrayish(market.outcomePrices),\n clobTokenIds: normalizeStringArrayish(market.clobTokenIds),\n icon: getString(market.icon),\n image: getString(market.image),\n };\n\n if (mergedTags.length) {\n normalized.tags = mergedTags;\n }\n if (typeof market.active === \"boolean\") {\n normalized.active = market.active;\n }\n if (typeof market.closed === \"boolean\") {\n normalized.closed = market.closed;\n }\n if (typeof market.resolved === \"boolean\") {\n normalized.resolved = market.resolved;\n }\n\n return normalized;\n}\n\nexport class PolymarketInfoClient {\n private readonly environment: PolymarketEnvironment;\n\n constructor(environment: PolymarketEnvironment = \"mainnet\") {\n this.environment = environment;\n }\n\n markets(params: FetchParams = {}) {\n return fetchPolymarketMarkets({ ...params, environment: this.environment });\n }\n\n market(params: { id?: string; slug?: string; conditionId?: string }) {\n return fetchPolymarketMarket({ ...params, environment: this.environment });\n }\n\n orderbook(tokenId: string) {\n return fetchPolymarketOrderbook({ tokenId, environment: this.environment });\n }\n\n price(tokenId: string, side: \"BUY\" | \"SELL\") {\n return fetchPolymarketPrice({ tokenId, side, environment: this.environment });\n }\n\n midpoint(tokenId: string) {\n return fetchPolymarketMidpoint({ tokenId, environment: this.environment });\n }\n\n priceHistory(params: {\n tokenId: string;\n startTs?: number;\n endTs?: number;\n interval?: string;\n fidelity?: number;\n }) {\n return fetchPolymarketPriceHistory({ ...params, environment: this.environment });\n }\n}\n\nexport async function fetchPolymarketMarkets(\n params: FetchParams = {},\n): Promise<PolymarketMarket[]> {\n if (params.active !== undefined && params.active !== true) {\n throw new Error(\"Polymarket market list requires active=true.\");\n }\n if (params.closed !== undefined && params.closed !== false) {\n throw new Error(\"Polymarket market list requires closed=false.\");\n }\n\n const environment = params.environment ?? \"mainnet\";\n const baseUrl = resolvePolymarketBaseUrl(\"gamma\", environment);\n const url = new URL(\"/events\", baseUrl);\n const limit = params.limit ?? DEFAULT_EVENT_LIMIT;\n const offset = params.offset ?? 0;\n\n url.searchParams.set(\"limit\", String(limit));\n url.searchParams.set(\"offset\", String(offset));\n url.searchParams.set(\"active\", \"true\");\n url.searchParams.set(\"closed\", \"false\");\n url.searchParams.set(\"order\", params.order ?? \"id\");\n url.searchParams.set(\"ascending\", params.ascending ? \"true\" : \"false\");\n\n if (params.tagId) url.searchParams.set(\"tag_id\", params.tagId);\n if (params.relatedTags) url.searchParams.set(\"related_tags\", \"true\");\n if (params.excludeTagId) url.searchParams.set(\"exclude_tag_id\", params.excludeTagId);\n if (params.slug) url.searchParams.set(\"slug\", params.slug);\n\n const data = (await requestJson(url.toString())) as GammaEvent[];\n const markets = data.flatMap((event) =>\n Array.isArray(event?.markets)\n ? (event.markets as GammaMarket[]).map((market) => normalizeGammaMarket(market, event))\n : [],\n );\n\n const filtered = params.category\n ? markets.filter((market) =>\n (market.category ?? \"\").toLowerCase().includes(params.category!.toLowerCase()),\n )\n : markets;\n\n return typeof params.limit === \"number\" ? filtered.slice(0, params.limit) : filtered;\n}\n\nexport async function fetchPolymarketMarket(params: {\n id?: string;\n slug?: string;\n conditionId?: string;\n environment?: PolymarketEnvironment;\n}): Promise<PolymarketMarket | null> {\n const environment = params.environment ?? \"mainnet\";\n const baseUrl = resolvePolymarketBaseUrl(\"gamma\", environment);\n\n if (params.slug) {\n const url = new URL(`/markets/slug/${params.slug}`, baseUrl);\n const data = (await requestJson(url.toString())) as GammaMarket | null;\n if (!data) return null;\n return normalizeGammaMarket(data);\n }\n\n if (params.id) {\n const url = new URL(`/markets/${params.id}`, baseUrl);\n const data = (await requestJson(url.toString())) as GammaMarket | null;\n if (!data) return null;\n return normalizeGammaMarket(data);\n }\n\n if (params.conditionId) {\n const url = new URL(`/markets`, baseUrl);\n url.searchParams.set(\"condition_id\", params.conditionId);\n const data = (await requestJson(url.toString())) as GammaMarket[] | GammaMarket | null;\n if (!data) return null;\n const market = Array.isArray(data) ? data[0] : data;\n return market ? normalizeGammaMarket(market) : null;\n }\n\n throw new Error(\"id, slug, or conditionId is required.\");\n}\n\nexport async function fetchPolymarketOrderbook(params: {\n tokenId: string;\n environment?: PolymarketEnvironment;\n}): Promise<PolymarketOrderbook> {\n const environment = params.environment ?? \"mainnet\";\n const baseUrl = resolvePolymarketBaseUrl(\"clob\", environment);\n const url = new URL(\"/book\", baseUrl);\n url.searchParams.set(\"token_id\", params.tokenId);\n const data = (await requestJson(url.toString())) as Record<string, unknown>;\n\n return {\n market: params.tokenId,\n bids: normalizeOrderbookLevels(data.bids),\n asks: normalizeOrderbookLevels(data.asks),\n timestamp: getString(data.timestamp),\n };\n}\n\nexport async function fetchPolymarketPrice(params: {\n tokenId: string;\n side: \"BUY\" | \"SELL\";\n environment?: PolymarketEnvironment;\n}): Promise<number | null> {\n const environment = params.environment ?? \"mainnet\";\n const baseUrl = resolvePolymarketBaseUrl(\"clob\", environment);\n const url = new URL(\"/price\", baseUrl);\n url.searchParams.set(\"token_id\", params.tokenId);\n url.searchParams.set(\"side\", params.side);\n const data = (await requestJson(url.toString())) as Record<string, unknown>;\n const price = Number(data.price ?? data?.p);\n return Number.isFinite(price) ? price : null;\n}\n\nexport async function fetchPolymarketMidpoint(params: {\n tokenId: string;\n environment?: PolymarketEnvironment;\n}): Promise<number | null> {\n const baseArgs = {\n tokenId: params.tokenId,\n ...(params.environment ? { environment: params.environment } : {}),\n };\n const buy = await fetchPolymarketPrice({ ...baseArgs, side: \"BUY\" });\n const sell = await fetchPolymarketPrice({ ...baseArgs, side: \"SELL\" });\n if (buy == null || sell == null) return null;\n return (buy + sell) / 2;\n}\n\nexport async function fetchPolymarketPriceHistory(params: {\n tokenId: string;\n startTs?: number;\n endTs?: number;\n interval?: string;\n fidelity?: number;\n environment?: PolymarketEnvironment;\n}): Promise<PolymarketPriceHistoryPoint[]> {\n const environment = params.environment ?? \"mainnet\";\n const baseUrl = resolvePolymarketBaseUrl(\"clob\", environment);\n const url = new URL(\"/prices-history\", baseUrl);\n url.searchParams.set(\"market\", params.tokenId);\n if (params.startTs) url.searchParams.set(\"startTs\", params.startTs.toString());\n if (params.endTs) url.searchParams.set(\"endTs\", params.endTs.toString());\n if (params.interval) url.searchParams.set(\"interval\", params.interval);\n if (params.fidelity) url.searchParams.set(\"fidelity\", params.fidelity.toString());\n\n const data = (await requestJson(url.toString())) as\n | { history?: Array<{ t: number; p: number }> }\n | Array<{ t: number; p: number }>;\n\n const points = Array.isArray(data) ? data : (data?.history ?? []);\n return points\n .map((point) => ({\n t: Number(point.t),\n p: Number(point.p),\n }))\n .filter((point) => Number.isFinite(point.t) && Number.isFinite(point.p));\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../../src/adapters/polymarket/base.ts","../../../src/adapters/polymarket/exchange.ts","../../../src/adapters/polymarket/info.ts","../../../src/adapters/polymarket/bootstrap.ts"],"names":["requestJson"],"mappings":"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","file":"index.js","sourcesContent":["import { createHmac, randomBytes } from \"node:crypto\";\nimport { parseUnits } from \"viem\";\nimport type { WalletFullContext } from \"../../wallet/types\";\n\nexport type PolymarketEnvironment = \"mainnet\" | \"testnet\";\n\nexport type PolymarketSide = \"BUY\" | \"SELL\";\nexport type PolymarketOrderType = \"GTC\" | \"FOK\" | \"FAK\" | \"GTD\";\nexport type PolymarketSignatureType = 0 | 1 | 2;\n\nexport interface PolymarketApiCredentials {\n apiKey: string;\n secret: string;\n passphrase: string;\n}\n\nexport interface PolymarketMarket {\n id: string;\n slug?: string | null;\n question?: string | null;\n description?: string | null;\n eventId?: string | null;\n eventSlug?: string | null;\n conditionId?: string | null;\n marketMakerAddress?: string | null;\n category?: string | null;\n tags?: string[];\n active?: boolean;\n closed?: boolean;\n resolved?: boolean;\n startDate?: string | null;\n endDate?: string | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n closedTime?: string | null;\n volume?: string | null;\n liquidity?: string | null;\n openInterest?: string | null;\n outcomes?: string[];\n outcomePrices?: number[];\n clobTokenIds?: string[];\n icon?: string | null;\n image?: string | null;\n}\n\nexport interface PolymarketOrderbookLevel {\n price: number;\n size: number;\n}\n\nexport interface PolymarketOrderbook {\n market: string;\n bids: PolymarketOrderbookLevel[];\n asks: PolymarketOrderbookLevel[];\n timestamp?: string | null;\n}\n\nexport interface PolymarketPriceHistoryPoint {\n t: number;\n p: number;\n}\n\nexport interface PolymarketSignedOrderPayload {\n salt: string;\n maker: `0x${string}`;\n signer: `0x${string}`;\n taker: `0x${string}`;\n tokenId: string;\n makerAmount: string;\n takerAmount: string;\n expiration: string;\n nonce: string;\n feeRateBps: string;\n side: 0 | 1;\n signatureType: PolymarketSignatureType;\n signature: `0x${string}`;\n}\n\nexport class PolymarketApiError extends Error {\n constructor(\n message: string,\n public readonly response: unknown,\n ) {\n super(message);\n this.name = \"PolymarketApiError\";\n }\n}\n\nexport class PolymarketAuthError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"PolymarketAuthError\";\n }\n}\n\nexport const POLYMARKET_ENDPOINTS = {\n gamma: {\n mainnet: \"https://gamma-api.polymarket.com\",\n testnet: \"https://gamma-api.polymarket.com\",\n },\n clob: {\n mainnet: \"https://clob.polymarket.com\",\n testnet: \"https://clob.polymarket.com\",\n },\n data: {\n mainnet: \"https://data-api.polymarket.com\",\n testnet: \"https://data-api.polymarket.com\",\n },\n} as const satisfies Record<\"gamma\" | \"clob\" | \"data\", Record<PolymarketEnvironment, string>>;\n\nexport const POLYMARKET_CHAIN_ID: Record<PolymarketEnvironment, number> = {\n mainnet: 137,\n testnet: 80002,\n};\n\nexport const POLYMARKET_EXCHANGE_ADDRESSES: Record<\n PolymarketEnvironment,\n { ctf: `0x${string}`; negRisk: `0x${string}` }\n> = {\n mainnet: {\n ctf: \"0x4bfb41d5b3570defd03c39a9a4d8de6bd8b8982e\",\n negRisk: \"0xc5d563a36ae78145c45a50134d48a1215220f80a\",\n },\n testnet: {\n ctf: \"0xdfe02eb6733538f8ea35d585af8de5958ad99e40\",\n negRisk: \"0xdfe02eb6733538f8ea35d585af8de5958ad99e40\",\n },\n};\n\nexport const POLYMARKET_CLOB_DOMAIN = {\n name: \"Polymarket CTF Exchange\",\n version: \"1\",\n};\n\nexport const POLYMARKET_CLOB_AUTH_DOMAIN = {\n name: \"ClobAuthDomain\",\n version: \"1\",\n};\n\nexport const ZERO_ADDRESS = \"0x0000000000000000000000000000000000000000\" as const;\n\nexport function resolvePolymarketBaseUrl(\n service: keyof typeof POLYMARKET_ENDPOINTS,\n environment: PolymarketEnvironment,\n): string {\n return POLYMARKET_ENDPOINTS[service][environment];\n}\n\nexport function assertWalletSigner(wallet: WalletFullContext | undefined) {\n if (!wallet?.account || !wallet.walletClient) {\n throw new Error(\"Polymarket requires a wallet with signing capabilities.\");\n }\n}\n\nexport function toDecimalString(value: string | number | bigint): string {\n if (typeof value === \"string\") return value;\n if (typeof value === \"bigint\") return value.toString();\n if (!Number.isFinite(value)) {\n throw new Error(\"Numeric values must be finite.\");\n }\n const asString = value.toString();\n if (/e/i.test(asString)) {\n const [mantissa, exponentPart] = asString.split(/e/i);\n const exponent = Number(exponentPart);\n const [integerPart, fractionalPart = \"\"] = mantissa.split(\".\");\n if (exponent >= 0) {\n return integerPart + fractionalPart.padEnd(exponent + fractionalPart.length, \"0\");\n }\n const zeros = \"0\".repeat(Math.abs(exponent) - 1);\n return `0.${zeros}${integerPart}${fractionalPart}`.replace(/\\.0+$/, \"\");\n }\n return asString;\n}\n\nfunction normalizeArrayish(value: unknown): unknown[] {\n if (Array.isArray(value)) return value;\n if (typeof value === \"string\") {\n const trimmed = value.trim();\n if (!trimmed) return [];\n if (trimmed.startsWith(\"[\")) {\n try {\n const parsed = JSON.parse(trimmed);\n return Array.isArray(parsed) ? parsed : [];\n } catch {\n return [];\n }\n }\n return [trimmed];\n }\n return [];\n}\n\nexport function normalizeStringArrayish(value: unknown): string[] {\n return normalizeArrayish(value)\n .map((entry) => (entry == null ? \"\" : String(entry).trim()))\n .filter((entry) => entry.length > 0);\n}\n\nexport function normalizeNumberArrayish(value: unknown): number[] {\n return normalizeArrayish(value)\n .map((entry) => (typeof entry === \"number\" ? entry : Number.parseFloat(String(entry))))\n .filter((entry) => Number.isFinite(entry));\n}\n\nexport function normalizeTags(value: unknown): string[] {\n if (!Array.isArray(value)) return [];\n const tags = value\n .map((entry) => {\n if (entry && typeof entry === \"object\") {\n const record = entry as Record<string, unknown>;\n const label = record.label ?? record.id ?? record.tag;\n return label ? String(label).trim() : \"\";\n }\n return String(entry ?? \"\").trim();\n })\n .filter((entry) => entry.length > 0);\n return Array.from(new Set(tags));\n}\n\nexport function parseOptionalDate(value: unknown): string | null {\n if (!value) return null;\n if (typeof value === \"string\") {\n const trimmed = value.trim();\n return trimmed.length > 0 ? trimmed : null;\n }\n if (typeof value === \"number\" && Number.isFinite(value)) {\n const ts = value > 1_000_000_000_000 ? value : value * 1000;\n const date = new Date(ts);\n return Number.isNaN(date.getTime()) ? null : date.toISOString();\n }\n return null;\n}\n\nexport function buildHmacSignature(args: {\n secret: string;\n timestamp: number | string;\n method: string;\n path: string;\n body?: string | Record<string, unknown> | null;\n}): string {\n const timestamp = args.timestamp.toString();\n const method = args.method.toUpperCase();\n const path = args.path;\n const body =\n args.body == null ? \"\" : typeof args.body === \"string\" ? args.body : JSON.stringify(args.body);\n const payload = `${timestamp}${method}${path}${body}`;\n const key = Buffer.from(args.secret, \"base64\");\n return createHmac(\"sha256\", key).update(payload).digest(\"hex\");\n}\n\nexport function buildL2Headers(args: {\n credentials: PolymarketApiCredentials;\n address: `0x${string}`;\n timestamp?: number;\n method: string;\n path: string;\n body?: Record<string, unknown> | string | null;\n}): Record<string, string> {\n const timestamp = args.timestamp ?? Math.floor(Date.now() / 1000);\n const signature = buildHmacSignature({\n secret: args.credentials.secret,\n timestamp,\n method: args.method,\n path: args.path,\n body: args.body ?? null,\n });\n return {\n POLY_ADDRESS: args.address,\n POLY_API_KEY: args.credentials.apiKey,\n POLY_PASSPHRASE: args.credentials.passphrase,\n POLY_TIMESTAMP: timestamp.toString(),\n POLY_SIGNATURE: signature,\n };\n}\n\nexport async function buildL1Headers(args: {\n wallet: WalletFullContext;\n timestamp?: number;\n nonce?: number;\n environment?: PolymarketEnvironment;\n message?: string;\n}): Promise<Record<string, string>> {\n assertWalletSigner(args.wallet);\n const timestamp = args.timestamp ?? Math.floor(Date.now() / 1000);\n const nonce = args.nonce ?? Date.now();\n const chainId = POLYMARKET_CHAIN_ID[args.environment ?? \"mainnet\"];\n const address = args.wallet.address as `0x${string}`;\n const message =\n args.message ?? \"This message attests that I control the given wallet\";\n\n const signature = await args.wallet.walletClient.signTypedData({\n account: args.wallet.account,\n domain: {\n ...POLYMARKET_CLOB_AUTH_DOMAIN,\n chainId,\n },\n types: {\n ClobAuth: [\n { name: \"address\", type: \"address\" },\n { name: \"timestamp\", type: \"string\" },\n { name: \"nonce\", type: \"uint256\" },\n { name: \"message\", type: \"string\" },\n ],\n },\n primaryType: \"ClobAuth\",\n message: {\n address,\n timestamp: timestamp.toString(),\n nonce: BigInt(nonce),\n message,\n },\n });\n\n return {\n POLY_ADDRESS: address,\n POLY_TIMESTAMP: timestamp.toString(),\n POLY_NONCE: nonce.toString(),\n POLY_SIGNATURE: signature,\n };\n}\n\nexport function resolveExchangeAddress(args: {\n environment: PolymarketEnvironment;\n negRisk?: boolean;\n exchangeAddress?: `0x${string}`;\n}): `0x${string}` {\n if (args.exchangeAddress) return args.exchangeAddress;\n const env = args.environment;\n return args.negRisk\n ? POLYMARKET_EXCHANGE_ADDRESSES[env].negRisk\n : POLYMARKET_EXCHANGE_ADDRESSES[env].ctf;\n}\n\nfunction parseUintString(value: string, name: string): bigint {\n const trimmed = value.trim();\n if (!/^\\d+$/.test(trimmed)) {\n throw new Error(`${name} must be a base-10 integer string.`);\n }\n return BigInt(trimmed);\n}\n\nexport function buildPolymarketOrderAmounts(args: {\n side: PolymarketSide;\n price: string | number | bigint;\n size: string | number | bigint;\n tickSize?: string | number | bigint;\n}): { makerAmount: bigint; takerAmount: bigint } {\n const priceStr = toDecimalString(args.price);\n const sizeStr = toDecimalString(args.size);\n if (!priceStr || !sizeStr) {\n throw new Error(\"Order price and size are required.\");\n }\n const priceFloat = Number(priceStr);\n if (!Number.isFinite(priceFloat) || priceFloat <= 0 || priceFloat >= 1) {\n throw new Error(\"Order price must be between 0 and 1 (exclusive).\");\n }\n const sizeFloat = Number(sizeStr);\n if (!Number.isFinite(sizeFloat) || sizeFloat <= 0) {\n throw new Error(\"Order size must be positive.\");\n }\n\n let priceUnits = parseUnits(priceStr, 6);\n if (args.tickSize !== undefined) {\n const tickUnits = parseUnits(toDecimalString(args.tickSize), 6);\n if (tickUnits <= 0n) {\n throw new Error(\"tickSize must be positive.\");\n }\n priceUnits = (priceUnits / tickUnits) * tickUnits;\n }\n\n const sizeUnits = parseUnits(sizeStr, 6);\n const quoteUnits = (priceUnits * sizeUnits) / 1_000_000n;\n\n if (args.side === \"BUY\") {\n return { makerAmount: quoteUnits, takerAmount: sizeUnits };\n }\n return { makerAmount: sizeUnits, takerAmount: quoteUnits };\n}\n\nexport async function buildSignedOrderPayload(args: {\n wallet: WalletFullContext;\n environment?: PolymarketEnvironment;\n tokenId: string;\n side: PolymarketSide;\n price: string | number | bigint;\n size: string | number | bigint;\n expiration?: number;\n nonce?: number;\n feeRateBps?: number;\n tickSize?: string | number | bigint;\n maker?: `0x${string}`;\n signer?: `0x${string}`;\n taker?: `0x${string}`;\n signatureType?: PolymarketSignatureType;\n negRisk?: boolean;\n exchangeAddress?: `0x${string}`;\n}): Promise<PolymarketSignedOrderPayload> {\n assertWalletSigner(args.wallet);\n const environment = args.environment ?? \"mainnet\";\n const chainId = POLYMARKET_CHAIN_ID[environment];\n const exchangeAddress = resolveExchangeAddress({\n environment,\n ...(args.negRisk !== undefined ? { negRisk: args.negRisk } : {}),\n ...(args.exchangeAddress ? { exchangeAddress: args.exchangeAddress } : {}),\n });\n\n const maker = args.maker ?? (args.wallet.address as `0x${string}`);\n const signer = args.signer ?? (args.wallet.address as `0x${string}`);\n const taker = args.taker ?? ZERO_ADDRESS;\n const sideValue: 0 | 1 = args.side === \"BUY\" ? 0 : 1;\n const signatureType: PolymarketSignatureType = args.signatureType ?? 0;\n\n const tokenIdValue = args.tokenId.startsWith(\"0x\")\n ? BigInt(args.tokenId)\n : parseUintString(args.tokenId, \"tokenId\");\n\n const { makerAmount, takerAmount } = buildPolymarketOrderAmounts({\n side: args.side,\n price: args.price,\n size: args.size,\n ...(args.tickSize !== undefined ? { tickSize: args.tickSize } : {}),\n });\n\n const salt = BigInt(`0x${randomBytes(16).toString(\"hex\")}`);\n const expiration = BigInt(args.expiration ?? 0);\n const nonce = BigInt(args.nonce ?? 0);\n const feeRateBps = BigInt(args.feeRateBps ?? 0);\n\n const message = {\n salt,\n maker,\n signer,\n taker,\n tokenId: tokenIdValue,\n makerAmount,\n takerAmount,\n expiration,\n nonce,\n feeRateBps,\n side: sideValue,\n signatureType,\n };\n\n const signature = await args.wallet.walletClient.signTypedData({\n account: args.wallet.account,\n domain: {\n ...POLYMARKET_CLOB_DOMAIN,\n chainId,\n verifyingContract: exchangeAddress,\n },\n types: {\n Order: [\n { name: \"salt\", type: \"uint256\" },\n { name: \"maker\", type: \"address\" },\n { name: \"signer\", type: \"address\" },\n { name: \"taker\", type: \"address\" },\n { name: \"tokenId\", type: \"uint256\" },\n { name: \"makerAmount\", type: \"uint256\" },\n { name: \"takerAmount\", type: \"uint256\" },\n { name: \"expiration\", type: \"uint256\" },\n { name: \"nonce\", type: \"uint256\" },\n { name: \"feeRateBps\", type: \"uint256\" },\n { name: \"side\", type: \"uint8\" },\n { name: \"signatureType\", type: \"uint8\" },\n ],\n },\n primaryType: \"Order\",\n message,\n });\n\n return {\n salt: message.salt.toString(),\n maker,\n signer,\n taker,\n tokenId: tokenIdValue.toString(),\n makerAmount: message.makerAmount.toString(),\n takerAmount: message.takerAmount.toString(),\n expiration: message.expiration.toString(),\n nonce: message.nonce.toString(),\n feeRateBps: message.feeRateBps.toString(),\n side: sideValue,\n signatureType,\n signature: signature as `0x${string}`,\n };\n}\n","import type { WalletFullContext } from \"../../wallet/types\";\nimport {\n PolymarketApiCredentials,\n PolymarketApiError,\n PolymarketAuthError,\n PolymarketEnvironment,\n PolymarketOrderType,\n PolymarketSide,\n PolymarketSignatureType,\n buildL1Headers,\n buildL2Headers,\n buildSignedOrderPayload,\n resolvePolymarketBaseUrl,\n} from \"./base\";\n\nexport interface PolymarketApiKeyResponse {\n apiKey: string;\n secret: string;\n passphrase: string;\n}\n\nexport interface PolymarketOrderIntent {\n tokenId: string;\n side: PolymarketSide;\n price: string | number | bigint;\n size: string | number | bigint;\n expiration?: number;\n nonce?: number;\n feeRateBps?: number;\n tickSize?: string | number | bigint;\n maker?: `0x${string}`;\n signer?: `0x${string}`;\n taker?: `0x${string}`;\n signatureType?: PolymarketSignatureType;\n negRisk?: boolean;\n exchangeAddress?: `0x${string}`;\n}\n\nexport interface PolymarketPlaceOrderResponse {\n orderId?: string;\n status?: string;\n message?: string;\n [key: string]: unknown;\n}\n\ninterface PolymarketApiKeyRequestArgs {\n wallet: WalletFullContext;\n environment?: PolymarketEnvironment;\n timestamp?: number;\n nonce?: number;\n message?: string;\n}\n\nfunction requireApiKeyNonce(\n nonce: number | undefined,\n message = \"Polymarket API key operations require an explicit nonce.\",\n): number {\n if (!Number.isSafeInteger(nonce) || nonce == null || nonce < 0) {\n throw new PolymarketAuthError(message);\n }\n return nonce;\n}\n\nasync function resolveAuthContext(args: {\n wallet?: WalletFullContext;\n walletAddress?: `0x${string}`;\n credentials?: PolymarketApiCredentials;\n environment?: PolymarketEnvironment;\n apiKeyNonce?: number;\n}): Promise<{ credentials: PolymarketApiCredentials; address: `0x${string}` }> {\n if (args.wallet) {\n const credentials = args.credentials;\n if (credentials) {\n return {\n credentials,\n address: args.wallet.address as `0x${string}`,\n };\n }\n\n const apiKeyNonce = requireApiKeyNonce(\n args.apiKeyNonce,\n \"Polymarket auto-auth requires apiKeyNonce when credentials are not provided.\",\n );\n\n const derivedCredentials = await derivePolymarketApiKey({\n wallet: args.wallet,\n ...(args.environment ? { environment: args.environment } : {}),\n nonce: apiKeyNonce,\n });\n\n return {\n credentials: derivedCredentials,\n address: args.wallet.address as `0x${string}`,\n };\n }\n\n if (args.walletAddress && args.credentials) {\n return { credentials: args.credentials, address: args.walletAddress };\n }\n\n throw new PolymarketAuthError(\n \"Polymarket auth requires a wallet (preferred) or credentials + walletAddress.\",\n );\n}\n\nasync function requestJson(url: string, init?: RequestInit) {\n const response = await fetch(url, init);\n const text = await response.text().catch(() => \"\");\n let data: unknown = null;\n try {\n data = text ? JSON.parse(text) : null;\n } catch {\n data = text;\n }\n if (!response.ok) {\n throw new PolymarketApiError(\n `Polymarket request failed (${response.status}).`,\n data ?? { status: response.status },\n );\n }\n return data;\n}\n\nfunction resolvePath(url: string): string {\n const parsed = new URL(url);\n return `${parsed.pathname}${parsed.search}`;\n}\n\nfunction normalizeApiKeyResponse(\n data: Partial<PolymarketApiKeyResponse> | null | undefined,\n): PolymarketApiKeyResponse | null {\n if (!data?.apiKey || !data?.secret || !data?.passphrase) {\n return null;\n }\n return {\n apiKey: data.apiKey,\n secret: data.secret,\n passphrase: data.passphrase,\n };\n}\n\nasync function requestPolymarketApiKey(\n args: PolymarketApiKeyRequestArgs & { mode: \"create\" | \"derive\" },\n): Promise<Partial<PolymarketApiKeyResponse> | null> {\n const environment = args.environment ?? \"mainnet\";\n const baseUrl = resolvePolymarketBaseUrl(\"clob\", environment);\n const url =\n args.mode === \"create\"\n ? `${baseUrl}/auth/api-key`\n : `${baseUrl}/auth/derive-api-key`;\n const nonce = requireApiKeyNonce(args.nonce);\n const headers = await buildL1Headers({\n wallet: args.wallet,\n environment,\n ...(args.timestamp !== undefined ? { timestamp: args.timestamp } : {}),\n nonce,\n ...(args.message !== undefined ? { message: args.message } : {}),\n });\n\n return (await requestJson(url, {\n method: args.mode === \"create\" ? \"POST\" : \"GET\",\n headers: {\n \"content-type\": \"application/json\",\n ...headers,\n },\n ...(args.mode === \"create\" ? { body: JSON.stringify({}) } : {}),\n })) as Partial<PolymarketApiKeyResponse> | null;\n}\n\nexport async function createPolymarketApiKey(\n args: PolymarketApiKeyRequestArgs,\n): Promise<PolymarketApiKeyResponse> {\n const normalized = normalizeApiKeyResponse(\n await requestPolymarketApiKey({ ...args, mode: \"create\" }),\n );\n if (!normalized) {\n throw new PolymarketAuthError(\"Failed to create Polymarket API key.\");\n }\n return normalized;\n}\n\nexport async function derivePolymarketApiKey(\n args: PolymarketApiKeyRequestArgs,\n): Promise<PolymarketApiKeyResponse> {\n const normalized = normalizeApiKeyResponse(\n await requestPolymarketApiKey({ ...args, mode: \"derive\" }),\n );\n if (!normalized) {\n throw new PolymarketAuthError(\"Failed to derive Polymarket API key.\");\n }\n return normalized;\n}\n\nexport async function createOrDerivePolymarketApiKey(\n args: PolymarketApiKeyRequestArgs,\n): Promise<PolymarketApiKeyResponse> {\n let deriveError: unknown;\n\n try {\n const derived = normalizeApiKeyResponse(\n await requestPolymarketApiKey({ ...args, mode: \"derive\" }),\n );\n if (derived) {\n return derived;\n }\n } catch (error) {\n deriveError = error;\n }\n\n const created = normalizeApiKeyResponse(\n await requestPolymarketApiKey({ ...args, mode: \"create\" }),\n );\n if (created) {\n return created;\n }\n\n if (deriveError) {\n throw deriveError;\n }\n\n throw new PolymarketAuthError(\n \"Failed to derive or create Polymarket API key.\",\n );\n}\n\nexport async function placePolymarketOrder(args: {\n wallet: WalletFullContext;\n credentials?: PolymarketApiCredentials;\n apiKeyNonce?: number;\n order: PolymarketOrderIntent;\n orderType?: PolymarketOrderType;\n environment?: PolymarketEnvironment;\n}): Promise<PolymarketPlaceOrderResponse> {\n const environment = args.environment ?? \"mainnet\";\n const baseUrl = resolvePolymarketBaseUrl(\"clob\", environment);\n const url = `${baseUrl}/order`;\n\n const signedOrder = await buildSignedOrderPayload({\n wallet: args.wallet,\n environment,\n ...args.order,\n });\n\n const auth = await resolveAuthContext({\n wallet: args.wallet,\n ...(args.credentials ? { credentials: args.credentials } : {}),\n environment,\n ...(args.apiKeyNonce !== undefined\n ? { apiKeyNonce: args.apiKeyNonce }\n : {}),\n });\n\n const body = {\n order: signedOrder,\n owner: auth.credentials.apiKey,\n orderType: args.orderType ?? \"GTC\",\n };\n\n const headers = buildL2Headers({\n credentials: auth.credentials,\n address: auth.address,\n method: \"POST\",\n path: resolvePath(url),\n body,\n });\n\n return (await requestJson(url, {\n method: \"POST\",\n headers: {\n \"content-type\": \"application/json\",\n ...headers,\n },\n body: JSON.stringify(body),\n })) as PolymarketPlaceOrderResponse;\n}\n\nexport async function cancelPolymarketOrder(args: {\n orderId: string;\n wallet?: WalletFullContext;\n walletAddress?: `0x${string}`;\n credentials?: PolymarketApiCredentials;\n apiKeyNonce?: number;\n environment?: PolymarketEnvironment;\n}): Promise<Record<string, unknown>> {\n const environment = args.environment ?? \"mainnet\";\n const baseUrl = resolvePolymarketBaseUrl(\"clob\", environment);\n const url = `${baseUrl}/order`;\n const body = { orderID: args.orderId };\n\n const auth = await resolveAuthContext({\n ...(args.wallet ? { wallet: args.wallet } : {}),\n ...(args.walletAddress ? { walletAddress: args.walletAddress } : {}),\n ...(args.credentials ? { credentials: args.credentials } : {}),\n environment,\n ...(args.apiKeyNonce !== undefined\n ? { apiKeyNonce: args.apiKeyNonce }\n : {}),\n });\n\n const headers = buildL2Headers({\n credentials: auth.credentials,\n address: auth.address,\n method: \"DELETE\",\n path: resolvePath(url),\n body,\n });\n\n return (await requestJson(url, {\n method: \"DELETE\",\n headers: {\n \"content-type\": \"application/json\",\n ...headers,\n },\n body: JSON.stringify(body),\n })) as Record<string, unknown>;\n}\n\nexport async function cancelPolymarketOrders(args: {\n orderIds: string[];\n wallet?: WalletFullContext;\n walletAddress?: `0x${string}`;\n credentials?: PolymarketApiCredentials;\n apiKeyNonce?: number;\n environment?: PolymarketEnvironment;\n}): Promise<Record<string, unknown>> {\n const environment = args.environment ?? \"mainnet\";\n const baseUrl = resolvePolymarketBaseUrl(\"clob\", environment);\n const url = `${baseUrl}/orders`;\n const body = { orderIDs: args.orderIds };\n\n const auth = await resolveAuthContext({\n ...(args.wallet ? { wallet: args.wallet } : {}),\n ...(args.walletAddress ? { walletAddress: args.walletAddress } : {}),\n ...(args.credentials ? { credentials: args.credentials } : {}),\n environment,\n ...(args.apiKeyNonce !== undefined\n ? { apiKeyNonce: args.apiKeyNonce }\n : {}),\n });\n\n const headers = buildL2Headers({\n credentials: auth.credentials,\n address: auth.address,\n method: \"DELETE\",\n path: resolvePath(url),\n body,\n });\n\n return (await requestJson(url, {\n method: \"DELETE\",\n headers: {\n \"content-type\": \"application/json\",\n ...headers,\n },\n body: JSON.stringify(body),\n })) as Record<string, unknown>;\n}\n\nexport async function cancelAllPolymarketOrders(args: {\n wallet?: WalletFullContext;\n walletAddress?: `0x${string}`;\n credentials?: PolymarketApiCredentials;\n apiKeyNonce?: number;\n environment?: PolymarketEnvironment;\n}): Promise<Record<string, unknown>> {\n const environment = args.environment ?? \"mainnet\";\n const baseUrl = resolvePolymarketBaseUrl(\"clob\", environment);\n const url = `${baseUrl}/cancel-all`;\n const auth = await resolveAuthContext({\n ...(args.wallet ? { wallet: args.wallet } : {}),\n ...(args.walletAddress ? { walletAddress: args.walletAddress } : {}),\n ...(args.credentials ? { credentials: args.credentials } : {}),\n environment,\n ...(args.apiKeyNonce !== undefined\n ? { apiKeyNonce: args.apiKeyNonce }\n : {}),\n });\n const headers = buildL2Headers({\n credentials: auth.credentials,\n address: auth.address,\n method: \"DELETE\",\n path: resolvePath(url),\n });\n\n return (await requestJson(url, {\n method: \"DELETE\",\n headers: {\n \"content-type\": \"application/json\",\n ...headers,\n },\n })) as Record<string, unknown>;\n}\n\nexport async function cancelMarketPolymarketOrders(args: {\n tokenId: string;\n wallet?: WalletFullContext;\n walletAddress?: `0x${string}`;\n credentials?: PolymarketApiCredentials;\n apiKeyNonce?: number;\n environment?: PolymarketEnvironment;\n}): Promise<Record<string, unknown>> {\n const environment = args.environment ?? \"mainnet\";\n const baseUrl = resolvePolymarketBaseUrl(\"clob\", environment);\n const url = `${baseUrl}/cancel-market-orders`;\n const body = { market: args.tokenId };\n const auth = await resolveAuthContext({\n ...(args.wallet ? { wallet: args.wallet } : {}),\n ...(args.walletAddress ? { walletAddress: args.walletAddress } : {}),\n ...(args.credentials ? { credentials: args.credentials } : {}),\n environment,\n ...(args.apiKeyNonce !== undefined\n ? { apiKeyNonce: args.apiKeyNonce }\n : {}),\n });\n const headers = buildL2Headers({\n credentials: auth.credentials,\n address: auth.address,\n method: \"DELETE\",\n path: resolvePath(url),\n body,\n });\n\n return (await requestJson(url, {\n method: \"DELETE\",\n headers: {\n \"content-type\": \"application/json\",\n ...headers,\n },\n body: JSON.stringify(body),\n })) as Record<string, unknown>;\n}\n\nexport class PolymarketExchangeClient {\n private readonly wallet: WalletFullContext;\n private readonly credentials: PolymarketApiCredentials | undefined;\n private readonly apiKeyNonce: number | undefined;\n private readonly environment: PolymarketEnvironment;\n private cachedCredentials: PolymarketApiCredentials | undefined;\n\n constructor(args: {\n wallet: WalletFullContext;\n credentials?: PolymarketApiCredentials;\n apiKeyNonce?: number;\n environment?: PolymarketEnvironment;\n }) {\n this.wallet = args.wallet;\n this.credentials = args.credentials;\n this.apiKeyNonce = args.apiKeyNonce;\n this.environment = args.environment ?? \"mainnet\";\n }\n\n private async getCredentials() {\n if (this.cachedCredentials) return this.cachedCredentials;\n const resolved = await resolveAuthContext({\n wallet: this.wallet,\n ...(this.credentials ? { credentials: this.credentials } : {}),\n environment: this.environment,\n ...(this.apiKeyNonce !== undefined\n ? { apiKeyNonce: this.apiKeyNonce }\n : {}),\n });\n this.cachedCredentials = resolved.credentials;\n return resolved.credentials;\n }\n\n async placeOrder(\n order: PolymarketOrderIntent,\n orderType?: PolymarketOrderType,\n ) {\n const credentials = await this.getCredentials();\n return placePolymarketOrder({\n wallet: this.wallet,\n credentials,\n environment: this.environment,\n order,\n ...(orderType !== undefined ? { orderType } : {}),\n });\n }\n\n async cancelOrder(orderId: string) {\n const credentials = await this.getCredentials();\n return cancelPolymarketOrder({\n orderId,\n wallet: this.wallet,\n credentials,\n environment: this.environment,\n });\n }\n\n async cancelOrders(orderIds: string[]) {\n const credentials = await this.getCredentials();\n return cancelPolymarketOrders({\n orderIds,\n wallet: this.wallet,\n credentials,\n environment: this.environment,\n });\n }\n\n async cancelAll() {\n const credentials = await this.getCredentials();\n return cancelAllPolymarketOrders({\n wallet: this.wallet,\n credentials,\n environment: this.environment,\n });\n }\n\n async cancelMarket(tokenId: string) {\n const credentials = await this.getCredentials();\n return cancelMarketPolymarketOrders({\n tokenId,\n wallet: this.wallet,\n credentials,\n environment: this.environment,\n });\n }\n}\n","import {\n PolymarketApiError,\n PolymarketEnvironment,\n PolymarketMarket,\n PolymarketOrderbook,\n PolymarketOrderbookLevel,\n PolymarketPriceHistoryPoint,\n normalizeNumberArrayish,\n normalizeStringArrayish,\n normalizeTags,\n parseOptionalDate,\n resolvePolymarketBaseUrl,\n} from \"./base\";\n\ntype GammaEvent = Record<string, unknown>;\ntype GammaMarket = Record<string, unknown>;\ntype CsvStringInput = string | string[];\ntype CsvNumberInput = number | number[];\n\ntype FetchParams = {\n environment?: PolymarketEnvironment;\n limit?: number;\n offset?: number;\n order?: string;\n ascending?: boolean;\n tagId?: string;\n relatedTags?: boolean;\n excludeTagId?: string;\n category?: string;\n slug?: string;\n active?: boolean;\n closed?: boolean;\n};\n\nexport interface PolymarketUserPosition {\n proxyWallet?: string | null;\n asset?: string | null;\n conditionId?: string | null;\n size?: number | null;\n avgPrice?: number | null;\n initialValue?: number | null;\n currentValue?: number | null;\n cashPnl?: number | null;\n percentPnl?: number | null;\n totalBought?: number | null;\n realizedPnl?: number | null;\n percentRealizedPnl?: number | null;\n curPrice?: number | null;\n redeemable?: boolean;\n mergeable?: boolean;\n title?: string | null;\n slug?: string | null;\n icon?: string | null;\n eventSlug?: string | null;\n outcome?: string | null;\n outcomeIndex?: number | null;\n oppositeOutcome?: string | null;\n oppositeAsset?: string | null;\n endDate?: string | null;\n negativeRisk?: boolean;\n}\n\nexport interface PolymarketClosedPosition {\n proxyWallet?: string | null;\n asset?: string | null;\n conditionId?: string | null;\n avgPrice?: number | null;\n totalBought?: number | null;\n realizedPnl?: number | null;\n curPrice?: number | null;\n timestamp?: number | null;\n title?: string | null;\n slug?: string | null;\n icon?: string | null;\n eventSlug?: string | null;\n outcome?: string | null;\n outcomeIndex?: number | null;\n oppositeOutcome?: string | null;\n oppositeAsset?: string | null;\n endDate?: string | null;\n}\n\nexport type PolymarketActivityType =\n | \"TRADE\"\n | \"SPLIT\"\n | \"MERGE\"\n | \"REDEEM\"\n | \"REWARD\"\n | \"CONVERSION\"\n | \"MAKER_REBATE\";\n\nexport interface PolymarketUserActivity {\n proxyWallet?: string | null;\n timestamp?: number | null;\n conditionId?: string | null;\n type?: PolymarketActivityType | null;\n size?: number | null;\n usdcSize?: number | null;\n transactionHash?: string | null;\n price?: number | null;\n asset?: string | null;\n side?: \"BUY\" | \"SELL\" | null;\n outcomeIndex?: number | null;\n title?: string | null;\n slug?: string | null;\n icon?: string | null;\n eventSlug?: string | null;\n outcome?: string | null;\n name?: string | null;\n pseudonym?: string | null;\n bio?: string | null;\n profileImage?: string | null;\n profileImageOptimized?: string | null;\n}\n\nexport interface PolymarketPositionValue {\n user?: string | null;\n value?: number | null;\n}\n\nexport interface PolymarketPublicProfileUser {\n id?: string | null;\n creator?: boolean;\n mod?: boolean;\n}\n\nexport interface PolymarketPublicProfile {\n createdAt?: string | null;\n proxyWallet?: string | null;\n profileImage?: string | null;\n displayUsernamePublic?: boolean | null;\n bio?: string | null;\n pseudonym?: string | null;\n name?: string | null;\n users?: PolymarketPublicProfileUser[] | null;\n xUsername?: string | null;\n verifiedBadge?: boolean | null;\n}\n\ninterface PolymarketUserQueryBase {\n user: string;\n environment?: PolymarketEnvironment;\n market?: CsvStringInput;\n eventId?: CsvNumberInput;\n}\n\nexport interface PolymarketUserPositionParams extends PolymarketUserQueryBase {\n sizeThreshold?: number;\n redeemable?: boolean;\n mergeable?: boolean;\n limit?: number;\n offset?: number;\n sortBy?:\n | \"CURRENT\"\n | \"INITIAL\"\n | \"TOKENS\"\n | \"CASHPNL\"\n | \"PERCENTPNL\"\n | \"TITLE\"\n | \"RESOLVING\"\n | \"PRICE\"\n | \"AVGPRICE\";\n sortDirection?: \"ASC\" | \"DESC\";\n title?: string;\n}\n\nexport interface PolymarketClosedPositionParams extends PolymarketUserQueryBase {\n limit?: number;\n offset?: number;\n sortBy?: \"REALIZEDPNL\" | \"TITLE\" | \"PRICE\" | \"AVGPRICE\" | \"TIMESTAMP\";\n sortDirection?: \"ASC\" | \"DESC\";\n title?: string;\n}\n\nexport interface PolymarketUserActivityParams extends PolymarketUserQueryBase {\n limit?: number;\n offset?: number;\n type?: PolymarketActivityType | PolymarketActivityType[];\n start?: number;\n end?: number;\n sortBy?: \"TIMESTAMP\" | \"TOKENS\" | \"CASH\";\n sortDirection?: \"ASC\" | \"DESC\";\n side?: \"BUY\" | \"SELL\";\n}\n\nexport interface PolymarketPositionValueParams {\n user: string;\n environment?: PolymarketEnvironment;\n market?: CsvStringInput;\n}\n\nconst DEFAULT_EVENT_LIMIT = 50;\n\nasync function requestJson(url: string, init?: RequestInit) {\n const response = await fetch(url, init);\n const text = await response.text().catch(() => \"\");\n let data: unknown = null;\n try {\n data = text ? JSON.parse(text) : null;\n } catch {\n data = text;\n }\n if (!response.ok) {\n throw new PolymarketApiError(\n `Polymarket request failed (${response.status}).`,\n data ?? { status: response.status },\n );\n }\n return data;\n}\n\nfunction getString(value: unknown): string | null {\n if (value == null) return null;\n const str = String(value).trim();\n return str.length ? str : null;\n}\n\nfunction getNumber(value: unknown): number | null {\n const numeric = Number(value);\n return Number.isFinite(numeric) ? numeric : null;\n}\n\nfunction getInteger(value: unknown): number | null {\n const numeric = getNumber(value);\n return numeric == null ? null : Math.trunc(numeric);\n}\n\nfunction getBoolean(value: unknown): boolean | null {\n if (typeof value === \"boolean\") return value;\n if (typeof value === \"string\") {\n const normalized = value.trim().toLowerCase();\n if (normalized === \"true\") return true;\n if (normalized === \"false\") return false;\n }\n return null;\n}\n\nfunction normalizeCsvStringInput(value: CsvStringInput | undefined): string[] {\n if (Array.isArray(value)) {\n return value\n .flatMap((entry) => String(entry).split(\",\"))\n .map((entry) => entry.trim())\n .filter((entry) => entry.length > 0);\n }\n if (typeof value === \"string\") {\n return value\n .split(\",\")\n .map((entry) => entry.trim())\n .filter((entry) => entry.length > 0);\n }\n return [];\n}\n\nfunction normalizeCsvNumberInput(value: CsvNumberInput | undefined): number[] {\n if (Array.isArray(value)) {\n return value.filter((entry) => Number.isFinite(entry));\n }\n if (typeof value === \"number\" && Number.isFinite(value)) {\n return [value];\n }\n return [];\n}\n\nfunction appendCsvParam(url: URL, key: string, values: string[]) {\n if (values.length > 0) {\n url.searchParams.set(key, values.join(\",\"));\n }\n}\n\nfunction appendNumberParam(url: URL, key: string, value: number | undefined) {\n if (typeof value === \"number\" && Number.isFinite(value)) {\n url.searchParams.set(key, String(value));\n }\n}\n\nfunction appendBooleanParam(url: URL, key: string, value: boolean | undefined) {\n if (typeof value === \"boolean\") {\n url.searchParams.set(key, value ? \"true\" : \"false\");\n }\n}\n\nfunction assertMutuallyExclusiveMarketScope(market: string[], eventIds: number[]) {\n if (market.length > 0 && eventIds.length > 0) {\n throw new Error(\"market and eventId are mutually exclusive.\");\n }\n}\n\nfunction normalizeOrderbookLevels(raw: unknown): PolymarketOrderbookLevel[] {\n if (!Array.isArray(raw)) return [];\n return raw\n .map((entry) => {\n if (Array.isArray(entry)) {\n const [price, size] = entry;\n const p = Number(price);\n const s = Number(size);\n if (!Number.isFinite(p) || !Number.isFinite(s)) return null;\n return { price: p, size: s };\n }\n if (entry && typeof entry === \"object\") {\n const record = entry as Record<string, unknown>;\n const p = Number(record.price ?? record.p);\n const s = Number(record.size ?? record.s ?? record.quantity);\n if (!Number.isFinite(p) || !Number.isFinite(s)) return null;\n return { price: p, size: s };\n }\n return null;\n })\n .filter((entry): entry is PolymarketOrderbookLevel => Boolean(entry));\n}\n\nfunction normalizeGammaMarket(market: GammaMarket, event?: GammaEvent): PolymarketMarket {\n const eventTags = normalizeTags(event?.tags);\n const marketTags = normalizeTags(market.tags);\n const mergedTags = Array.from(new Set([...marketTags, ...eventTags]));\n\n const category =\n getString(market.category) ?? getString(event?.category) ?? getString(event?.title) ?? null;\n\n const normalized: PolymarketMarket = {\n id: getString(market.id) ?? \"\",\n slug: getString(market.slug),\n question: getString(market.question),\n description: getString(market.description),\n eventId: getString(market.eventId ?? event?.id),\n eventSlug: getString(event?.slug),\n conditionId: getString(market.conditionId),\n marketMakerAddress: getString(market.marketMakerAddress),\n category,\n startDate:\n parseOptionalDate(market.startDate) ??\n parseOptionalDate(event?.startDate) ??\n parseOptionalDate(event?.eventStartTime),\n endDate:\n parseOptionalDate(market.endDate) ??\n parseOptionalDate(event?.endDate) ??\n parseOptionalDate(event?.eventEndTime),\n createdAt:\n parseOptionalDate(market.createdAt) ??\n parseOptionalDate(event?.createdAt) ??\n parseOptionalDate(event?.creationDate),\n updatedAt: parseOptionalDate(market.updatedAt) ?? parseOptionalDate(event?.updatedAt),\n closedTime: parseOptionalDate(market.closedTime) ?? parseOptionalDate(event?.closedTime),\n volume: getString(market.volume),\n liquidity: getString(market.liquidity),\n openInterest: getString(market.openInterest),\n outcomes: normalizeStringArrayish(market.outcomes),\n outcomePrices: normalizeNumberArrayish(market.outcomePrices),\n clobTokenIds: normalizeStringArrayish(market.clobTokenIds),\n icon: getString(market.icon),\n image: getString(market.image),\n };\n\n if (mergedTags.length) {\n normalized.tags = mergedTags;\n }\n if (typeof market.active === \"boolean\") {\n normalized.active = market.active;\n }\n if (typeof market.closed === \"boolean\") {\n normalized.closed = market.closed;\n }\n if (typeof market.resolved === \"boolean\") {\n normalized.resolved = market.resolved;\n }\n\n return normalized;\n}\n\nfunction normalizeUserPosition(raw: unknown): PolymarketUserPosition {\n const record = raw && typeof raw === \"object\" ? (raw as Record<string, unknown>) : {};\n const normalized: PolymarketUserPosition = {\n proxyWallet: getString(record.proxyWallet),\n asset: getString(record.asset),\n conditionId: getString(record.conditionId),\n size: getNumber(record.size),\n avgPrice: getNumber(record.avgPrice),\n initialValue: getNumber(record.initialValue),\n currentValue: getNumber(record.currentValue),\n cashPnl: getNumber(record.cashPnl),\n percentPnl: getNumber(record.percentPnl),\n totalBought: getNumber(record.totalBought),\n realizedPnl: getNumber(record.realizedPnl),\n percentRealizedPnl: getNumber(record.percentRealizedPnl),\n curPrice: getNumber(record.curPrice),\n title: getString(record.title),\n slug: getString(record.slug),\n icon: getString(record.icon),\n eventSlug: getString(record.eventSlug),\n outcome: getString(record.outcome),\n outcomeIndex: getInteger(record.outcomeIndex),\n oppositeOutcome: getString(record.oppositeOutcome),\n oppositeAsset: getString(record.oppositeAsset),\n endDate: parseOptionalDate(record.endDate),\n };\n const redeemable = getBoolean(record.redeemable);\n if (redeemable != null) normalized.redeemable = redeemable;\n const mergeable = getBoolean(record.mergeable);\n if (mergeable != null) normalized.mergeable = mergeable;\n const negativeRisk = getBoolean(record.negativeRisk);\n if (negativeRisk != null) normalized.negativeRisk = negativeRisk;\n return normalized;\n}\n\nfunction normalizeClosedPosition(raw: unknown): PolymarketClosedPosition {\n const record = raw && typeof raw === \"object\" ? (raw as Record<string, unknown>) : {};\n return {\n proxyWallet: getString(record.proxyWallet),\n asset: getString(record.asset),\n conditionId: getString(record.conditionId),\n avgPrice: getNumber(record.avgPrice),\n totalBought: getNumber(record.totalBought),\n realizedPnl: getNumber(record.realizedPnl),\n curPrice: getNumber(record.curPrice),\n timestamp: getInteger(record.timestamp),\n title: getString(record.title),\n slug: getString(record.slug),\n icon: getString(record.icon),\n eventSlug: getString(record.eventSlug),\n outcome: getString(record.outcome),\n outcomeIndex: getInteger(record.outcomeIndex),\n oppositeOutcome: getString(record.oppositeOutcome),\n oppositeAsset: getString(record.oppositeAsset),\n endDate: parseOptionalDate(record.endDate),\n };\n}\n\nfunction normalizeUserActivity(raw: unknown): PolymarketUserActivity {\n const record = raw && typeof raw === \"object\" ? (raw as Record<string, unknown>) : {};\n return {\n proxyWallet: getString(record.proxyWallet),\n timestamp: getInteger(record.timestamp),\n conditionId: getString(record.conditionId),\n type: getString(record.type) as PolymarketActivityType | null,\n size: getNumber(record.size),\n usdcSize: getNumber(record.usdcSize),\n transactionHash: getString(record.transactionHash),\n price: getNumber(record.price),\n asset: getString(record.asset),\n side: getString(record.side) as \"BUY\" | \"SELL\" | null,\n outcomeIndex: getInteger(record.outcomeIndex),\n title: getString(record.title),\n slug: getString(record.slug),\n icon: getString(record.icon),\n eventSlug: getString(record.eventSlug),\n outcome: getString(record.outcome),\n name: getString(record.name),\n pseudonym: getString(record.pseudonym),\n bio: getString(record.bio),\n profileImage: getString(record.profileImage),\n profileImageOptimized: getString(record.profileImageOptimized),\n };\n}\n\nfunction normalizePositionValue(raw: unknown): PolymarketPositionValue {\n const record = raw && typeof raw === \"object\" ? (raw as Record<string, unknown>) : {};\n return {\n user: getString(record.user),\n value: getNumber(record.value),\n };\n}\n\nfunction normalizeProfileUsers(raw: unknown): PolymarketPublicProfileUser[] | null {\n if (!Array.isArray(raw)) return null;\n return raw.map((entry) => {\n const record = entry && typeof entry === \"object\" ? (entry as Record<string, unknown>) : {};\n const normalized: PolymarketPublicProfileUser = {\n id: getString(record.id),\n };\n const creator = getBoolean(record.creator);\n if (creator != null) normalized.creator = creator;\n const mod = getBoolean(record.mod);\n if (mod != null) normalized.mod = mod;\n return normalized;\n });\n}\n\nfunction normalizePublicProfile(raw: unknown): PolymarketPublicProfile | null {\n if (!raw || typeof raw !== \"object\") return null;\n const record = raw as Record<string, unknown>;\n const normalized: PolymarketPublicProfile = {\n createdAt: parseOptionalDate(record.createdAt),\n proxyWallet: getString(record.proxyWallet),\n profileImage: getString(record.profileImage),\n bio: getString(record.bio),\n pseudonym: getString(record.pseudonym),\n name: getString(record.name),\n users: normalizeProfileUsers(record.users),\n xUsername: getString(record.xUsername),\n };\n const displayUsernamePublic = getBoolean(record.displayUsernamePublic);\n if (displayUsernamePublic != null) {\n normalized.displayUsernamePublic = displayUsernamePublic;\n }\n const verifiedBadge = getBoolean(record.verifiedBadge);\n if (verifiedBadge != null) {\n normalized.verifiedBadge = verifiedBadge;\n }\n return normalized;\n}\n\nexport class PolymarketInfoClient {\n private readonly environment: PolymarketEnvironment;\n\n constructor(environment: PolymarketEnvironment = \"mainnet\") {\n this.environment = environment;\n }\n\n markets(params: FetchParams = {}) {\n return fetchPolymarketMarkets({ ...params, environment: this.environment });\n }\n\n market(params: { id?: string; slug?: string; conditionId?: string }) {\n return fetchPolymarketMarket({ ...params, environment: this.environment });\n }\n\n orderbook(tokenId: string) {\n return fetchPolymarketOrderbook({ tokenId, environment: this.environment });\n }\n\n price(tokenId: string, side: \"BUY\" | \"SELL\") {\n return fetchPolymarketPrice({ tokenId, side, environment: this.environment });\n }\n\n midpoint(tokenId: string) {\n return fetchPolymarketMidpoint({ tokenId, environment: this.environment });\n }\n\n priceHistory(params: {\n tokenId: string;\n startTs?: number;\n endTs?: number;\n interval?: string;\n fidelity?: number;\n }) {\n return fetchPolymarketPriceHistory({ ...params, environment: this.environment });\n }\n\n positions(params: Omit<PolymarketUserPositionParams, \"environment\">) {\n return fetchPolymarketPositions({ ...params, environment: this.environment });\n }\n\n closedPositions(params: Omit<PolymarketClosedPositionParams, \"environment\">) {\n return fetchPolymarketClosedPositions({ ...params, environment: this.environment });\n }\n\n activity(params: Omit<PolymarketUserActivityParams, \"environment\">) {\n return fetchPolymarketActivity({ ...params, environment: this.environment });\n }\n\n positionValue(params: Omit<PolymarketPositionValueParams, \"environment\">) {\n return fetchPolymarketPositionValue({ ...params, environment: this.environment });\n }\n\n publicProfile(address: string) {\n return fetchPolymarketPublicProfile({ address, environment: this.environment });\n }\n}\n\nexport async function fetchPolymarketMarkets(\n params: FetchParams = {},\n): Promise<PolymarketMarket[]> {\n if (params.active !== undefined && params.active !== true) {\n throw new Error(\"Polymarket market list requires active=true.\");\n }\n if (params.closed !== undefined && params.closed !== false) {\n throw new Error(\"Polymarket market list requires closed=false.\");\n }\n\n const environment = params.environment ?? \"mainnet\";\n const baseUrl = resolvePolymarketBaseUrl(\"gamma\", environment);\n const url = new URL(\"/events\", baseUrl);\n const limit = params.limit ?? DEFAULT_EVENT_LIMIT;\n const offset = params.offset ?? 0;\n\n url.searchParams.set(\"limit\", String(limit));\n url.searchParams.set(\"offset\", String(offset));\n url.searchParams.set(\"active\", \"true\");\n url.searchParams.set(\"closed\", \"false\");\n url.searchParams.set(\"order\", params.order ?? \"id\");\n url.searchParams.set(\"ascending\", params.ascending ? \"true\" : \"false\");\n\n if (params.tagId) url.searchParams.set(\"tag_id\", params.tagId);\n if (params.relatedTags) url.searchParams.set(\"related_tags\", \"true\");\n if (params.excludeTagId) url.searchParams.set(\"exclude_tag_id\", params.excludeTagId);\n if (params.slug) url.searchParams.set(\"slug\", params.slug);\n\n const data = (await requestJson(url.toString())) as GammaEvent[];\n const markets = data.flatMap((event) =>\n Array.isArray(event?.markets)\n ? (event.markets as GammaMarket[]).map((market) => normalizeGammaMarket(market, event))\n : [],\n );\n\n const filtered = params.category\n ? markets.filter((market) =>\n (market.category ?? \"\").toLowerCase().includes(params.category!.toLowerCase()),\n )\n : markets;\n\n return typeof params.limit === \"number\" ? filtered.slice(0, params.limit) : filtered;\n}\n\nexport async function fetchPolymarketMarket(params: {\n id?: string;\n slug?: string;\n conditionId?: string;\n environment?: PolymarketEnvironment;\n}): Promise<PolymarketMarket | null> {\n const environment = params.environment ?? \"mainnet\";\n const baseUrl = resolvePolymarketBaseUrl(\"gamma\", environment);\n\n if (params.slug) {\n const url = new URL(`/markets/slug/${params.slug}`, baseUrl);\n const data = (await requestJson(url.toString())) as GammaMarket | null;\n if (!data) return null;\n return normalizeGammaMarket(data);\n }\n\n if (params.id) {\n const url = new URL(`/markets/${params.id}`, baseUrl);\n const data = (await requestJson(url.toString())) as GammaMarket | null;\n if (!data) return null;\n return normalizeGammaMarket(data);\n }\n\n if (params.conditionId) {\n const url = new URL(`/markets`, baseUrl);\n url.searchParams.set(\"condition_id\", params.conditionId);\n const data = (await requestJson(url.toString())) as GammaMarket[] | GammaMarket | null;\n if (!data) return null;\n const market = Array.isArray(data) ? data[0] : data;\n return market ? normalizeGammaMarket(market) : null;\n }\n\n throw new Error(\"id, slug, or conditionId is required.\");\n}\n\nexport async function fetchPolymarketOrderbook(params: {\n tokenId: string;\n environment?: PolymarketEnvironment;\n}): Promise<PolymarketOrderbook> {\n const environment = params.environment ?? \"mainnet\";\n const baseUrl = resolvePolymarketBaseUrl(\"clob\", environment);\n const url = new URL(\"/book\", baseUrl);\n url.searchParams.set(\"token_id\", params.tokenId);\n const data = (await requestJson(url.toString())) as Record<string, unknown>;\n\n return {\n market: params.tokenId,\n bids: normalizeOrderbookLevels(data.bids),\n asks: normalizeOrderbookLevels(data.asks),\n timestamp: getString(data.timestamp),\n };\n}\n\nexport async function fetchPolymarketPrice(params: {\n tokenId: string;\n side: \"BUY\" | \"SELL\";\n environment?: PolymarketEnvironment;\n}): Promise<number | null> {\n const environment = params.environment ?? \"mainnet\";\n const baseUrl = resolvePolymarketBaseUrl(\"clob\", environment);\n const url = new URL(\"/price\", baseUrl);\n url.searchParams.set(\"token_id\", params.tokenId);\n url.searchParams.set(\"side\", params.side);\n const data = (await requestJson(url.toString())) as Record<string, unknown>;\n const price = Number(data.price ?? data?.p);\n return Number.isFinite(price) ? price : null;\n}\n\nexport async function fetchPolymarketMidpoint(params: {\n tokenId: string;\n environment?: PolymarketEnvironment;\n}): Promise<number | null> {\n const baseArgs = {\n tokenId: params.tokenId,\n ...(params.environment ? { environment: params.environment } : {}),\n };\n const buy = await fetchPolymarketPrice({ ...baseArgs, side: \"BUY\" });\n const sell = await fetchPolymarketPrice({ ...baseArgs, side: \"SELL\" });\n if (buy == null || sell == null) return null;\n return (buy + sell) / 2;\n}\n\nexport async function fetchPolymarketPriceHistory(params: {\n tokenId: string;\n startTs?: number;\n endTs?: number;\n interval?: string;\n fidelity?: number;\n environment?: PolymarketEnvironment;\n}): Promise<PolymarketPriceHistoryPoint[]> {\n const environment = params.environment ?? \"mainnet\";\n const baseUrl = resolvePolymarketBaseUrl(\"clob\", environment);\n const url = new URL(\"/prices-history\", baseUrl);\n url.searchParams.set(\"market\", params.tokenId);\n if (params.startTs) url.searchParams.set(\"startTs\", params.startTs.toString());\n if (params.endTs) url.searchParams.set(\"endTs\", params.endTs.toString());\n if (params.interval) url.searchParams.set(\"interval\", params.interval);\n if (params.fidelity) url.searchParams.set(\"fidelity\", params.fidelity.toString());\n\n const data = (await requestJson(url.toString())) as\n | { history?: Array<{ t: number; p: number }> }\n | Array<{ t: number; p: number }>;\n\n const points = Array.isArray(data) ? data : (data?.history ?? []);\n return points\n .map((point) => ({\n t: Number(point.t),\n p: Number(point.p),\n }))\n .filter((point) => Number.isFinite(point.t) && Number.isFinite(point.p));\n}\n\nexport async function fetchPolymarketPositions(\n params: PolymarketUserPositionParams,\n): Promise<PolymarketUserPosition[]> {\n const environment = params.environment ?? \"mainnet\";\n const market = normalizeCsvStringInput(params.market);\n const eventIds = normalizeCsvNumberInput(params.eventId);\n assertMutuallyExclusiveMarketScope(market, eventIds);\n\n const baseUrl = resolvePolymarketBaseUrl(\"data\", environment);\n const url = new URL(\"/positions\", baseUrl);\n url.searchParams.set(\"user\", params.user);\n appendCsvParam(url, \"market\", market);\n appendCsvParam(\n url,\n \"eventId\",\n eventIds.map((entry) => String(entry)),\n );\n appendNumberParam(url, \"sizeThreshold\", params.sizeThreshold);\n appendBooleanParam(url, \"redeemable\", params.redeemable);\n appendBooleanParam(url, \"mergeable\", params.mergeable);\n appendNumberParam(url, \"limit\", params.limit);\n appendNumberParam(url, \"offset\", params.offset);\n if (params.sortBy) url.searchParams.set(\"sortBy\", params.sortBy);\n if (params.sortDirection) url.searchParams.set(\"sortDirection\", params.sortDirection);\n if (params.title) url.searchParams.set(\"title\", params.title);\n\n const data = (await requestJson(url.toString())) as unknown[];\n return Array.isArray(data) ? data.map((entry) => normalizeUserPosition(entry)) : [];\n}\n\nexport async function fetchPolymarketClosedPositions(\n params: PolymarketClosedPositionParams,\n): Promise<PolymarketClosedPosition[]> {\n const environment = params.environment ?? \"mainnet\";\n const market = normalizeCsvStringInput(params.market);\n const eventIds = normalizeCsvNumberInput(params.eventId);\n assertMutuallyExclusiveMarketScope(market, eventIds);\n\n const baseUrl = resolvePolymarketBaseUrl(\"data\", environment);\n const url = new URL(\"/closed-positions\", baseUrl);\n url.searchParams.set(\"user\", params.user);\n appendCsvParam(url, \"market\", market);\n appendCsvParam(\n url,\n \"eventId\",\n eventIds.map((entry) => String(entry)),\n );\n appendNumberParam(url, \"limit\", params.limit);\n appendNumberParam(url, \"offset\", params.offset);\n if (params.sortBy) url.searchParams.set(\"sortBy\", params.sortBy);\n if (params.sortDirection) url.searchParams.set(\"sortDirection\", params.sortDirection);\n if (params.title) url.searchParams.set(\"title\", params.title);\n\n const data = (await requestJson(url.toString())) as unknown[];\n return Array.isArray(data) ? data.map((entry) => normalizeClosedPosition(entry)) : [];\n}\n\nexport async function fetchPolymarketActivity(\n params: PolymarketUserActivityParams,\n): Promise<PolymarketUserActivity[]> {\n const environment = params.environment ?? \"mainnet\";\n const market = normalizeCsvStringInput(params.market);\n const eventIds = normalizeCsvNumberInput(params.eventId);\n assertMutuallyExclusiveMarketScope(market, eventIds);\n\n const types = Array.isArray(params.type) ? params.type : params.type ? [params.type] : [];\n const baseUrl = resolvePolymarketBaseUrl(\"data\", environment);\n const url = new URL(\"/activity\", baseUrl);\n url.searchParams.set(\"user\", params.user);\n appendCsvParam(url, \"market\", market);\n appendCsvParam(\n url,\n \"eventId\",\n eventIds.map((entry) => String(entry)),\n );\n appendCsvParam(url, \"type\", types);\n appendNumberParam(url, \"start\", params.start);\n appendNumberParam(url, \"end\", params.end);\n appendNumberParam(url, \"limit\", params.limit);\n appendNumberParam(url, \"offset\", params.offset);\n if (params.sortBy) url.searchParams.set(\"sortBy\", params.sortBy);\n if (params.sortDirection) url.searchParams.set(\"sortDirection\", params.sortDirection);\n if (params.side) url.searchParams.set(\"side\", params.side);\n\n const data = (await requestJson(url.toString())) as unknown[];\n return Array.isArray(data) ? data.map((entry) => normalizeUserActivity(entry)) : [];\n}\n\nexport async function fetchPolymarketPositionValue(\n params: PolymarketPositionValueParams,\n): Promise<PolymarketPositionValue[]> {\n const environment = params.environment ?? \"mainnet\";\n const baseUrl = resolvePolymarketBaseUrl(\"data\", environment);\n const url = new URL(\"/value\", baseUrl);\n url.searchParams.set(\"user\", params.user);\n appendCsvParam(url, \"market\", normalizeCsvStringInput(params.market));\n\n const data = (await requestJson(url.toString())) as unknown[];\n return Array.isArray(data) ? data.map((entry) => normalizePositionValue(entry)) : [];\n}\n\nexport async function fetchPolymarketPublicProfile(params: {\n address: string;\n environment?: PolymarketEnvironment;\n}): Promise<PolymarketPublicProfile | null> {\n const environment = params.environment ?? \"mainnet\";\n const baseUrl = resolvePolymarketBaseUrl(\"gamma\", environment);\n const url = new URL(\"/public-profile\", baseUrl);\n url.searchParams.set(\"address\", params.address);\n const data = await requestJson(url.toString());\n return normalizePublicProfile(data);\n}\n","import {\n decodeFunctionData,\n encodeFunctionData,\n erc20Abi,\n maxUint256,\n type PublicClient,\n} from \"viem\";\n\nimport { PolymarketApiError, PolymarketEnvironment, POLYMARKET_EXCHANGE_ADDRESSES } from \"./base\";\n\nexport interface PolymarketBootstrapContracts {\n usdc: `0x${string}`;\n ctf: `0x${string}`;\n negRiskAdapter: `0x${string}`;\n safeFactory: `0x${string}`;\n safeMultisend: `0x${string}`;\n relayerUrl: string;\n bridgeUrl: string;\n}\n\nexport interface PolymarketBootstrapTransaction {\n to: `0x${string}`;\n data: `0x${string}`;\n value: string;\n description: string;\n}\n\nexport interface PolymarketDepositAddressSet {\n evm?: string | null;\n svm?: string | null;\n btc?: string | null;\n sol?: string | null;\n [key: string]: unknown;\n}\n\nexport interface PolymarketDepositAddressesResponse {\n address?: PolymarketDepositAddressSet | null;\n note?: string | null;\n [key: string]: unknown;\n}\n\nexport interface PolymarketApprovalState {\n funder: `0x${string}`;\n usdcAllowance: bigint;\n usdcApproved: boolean;\n ctfExchangeApproved: boolean;\n negRiskExchangeApproved: boolean;\n approvalsReady: boolean;\n}\n\nconst POLYMARKET_SET_APPROVAL_FOR_ALL_ABI = [\n {\n inputs: [\n { name: \"operator\", type: \"address\" },\n { name: \"approved\", type: \"bool\" },\n ],\n name: \"setApprovalForAll\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n { name: \"account\", type: \"address\" },\n { name: \"operator\", type: \"address\" },\n ],\n name: \"isApprovedForAll\",\n outputs: [{ name: \"\", type: \"bool\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n] as const;\n\nconst POLYMARKET_BOOTSTRAP_CONTRACTS_BY_ENV: Partial<\n Record<PolymarketEnvironment, PolymarketBootstrapContracts>\n> = {\n mainnet: {\n usdc: \"0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174\",\n ctf: \"0x4D97DCd97eC945f40cF65F87097ACe5EA0476045\",\n negRiskAdapter: \"0xd91E80cF2E7be2e162c6513ceD06f1dD0dA35296\",\n safeFactory: \"0xaacFeEa03eb1561C4e67d661e40682Bd20E3541b\",\n safeMultisend: \"0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761\",\n relayerUrl: \"https://relayer-v2.polymarket.com\",\n bridgeUrl: \"https://bridge.polymarket.com\",\n },\n};\n\nasync function requestJson(url: string, init?: RequestInit) {\n const response = await fetch(url, init);\n const text = await response.text().catch(() => \"\");\n let data: unknown = null;\n try {\n data = text ? JSON.parse(text) : null;\n } catch {\n data = text;\n }\n if (!response.ok) {\n throw new PolymarketApiError(\n `Polymarket request failed (${response.status}).`,\n data ?? { status: response.status },\n );\n }\n return data;\n}\n\nexport function resolvePolymarketBootstrapContracts(\n environment: PolymarketEnvironment,\n): PolymarketBootstrapContracts {\n const contracts = POLYMARKET_BOOTSTRAP_CONTRACTS_BY_ENV[environment];\n if (!contracts) {\n throw new Error(\n `Polymarket bootstrap contracts are not configured for ${environment}.`,\n );\n }\n return contracts;\n}\n\nexport function buildPolymarketUsdcApprovalTransaction(args?: {\n environment?: PolymarketEnvironment;\n amount?: bigint;\n}): PolymarketBootstrapTransaction {\n const environment = args?.environment ?? \"mainnet\";\n const contracts = resolvePolymarketBootstrapContracts(environment);\n return {\n to: contracts.usdc,\n data: encodeFunctionData({\n abi: erc20Abi,\n functionName: \"approve\",\n args: [contracts.ctf, args?.amount ?? maxUint256],\n }),\n value: \"0\",\n description: \"Approve USDC.e for CTF\",\n };\n}\n\nexport function buildPolymarketOutcomeTokenApprovalTransactions(args?: {\n environment?: PolymarketEnvironment;\n includeNegRisk?: boolean;\n}): PolymarketBootstrapTransaction[] {\n const environment = args?.environment ?? \"mainnet\";\n const includeNegRisk = args?.includeNegRisk ?? true;\n const contracts = resolvePolymarketBootstrapContracts(environment);\n\n const transactions: PolymarketBootstrapTransaction[] = [\n {\n to: contracts.ctf,\n data: encodeFunctionData({\n abi: POLYMARKET_SET_APPROVAL_FOR_ALL_ABI,\n functionName: \"setApprovalForAll\",\n args: [POLYMARKET_EXCHANGE_ADDRESSES[environment].ctf, true],\n }),\n value: \"0\",\n description: \"Approve outcome tokens for CTF Exchange\",\n },\n ];\n\n if (includeNegRisk) {\n transactions.push({\n to: contracts.ctf,\n data: encodeFunctionData({\n abi: POLYMARKET_SET_APPROVAL_FOR_ALL_ABI,\n functionName: \"setApprovalForAll\",\n args: [POLYMARKET_EXCHANGE_ADDRESSES[environment].negRisk, true],\n }),\n value: \"0\",\n description: \"Approve outcome tokens for Neg Risk Exchange\",\n });\n }\n\n return transactions;\n}\n\nexport function buildPolymarketApprovalTransactions(args?: {\n environment?: PolymarketEnvironment;\n amount?: bigint;\n includeNegRisk?: boolean;\n}): PolymarketBootstrapTransaction[] {\n return [\n buildPolymarketUsdcApprovalTransaction(args),\n ...buildPolymarketOutcomeTokenApprovalTransactions(args),\n ];\n}\n\nexport async function fetchPolymarketApprovalState(args: {\n publicClient: Pick<PublicClient, \"readContract\">;\n funder: `0x${string}`;\n environment?: PolymarketEnvironment;\n includeNegRisk?: boolean;\n}): Promise<PolymarketApprovalState> {\n const environment = args.environment ?? \"mainnet\";\n const includeNegRisk = args.includeNegRisk ?? true;\n const contracts = resolvePolymarketBootstrapContracts(environment);\n const ctfExchange = POLYMARKET_EXCHANGE_ADDRESSES[environment].ctf;\n const negRiskExchange = POLYMARKET_EXCHANGE_ADDRESSES[environment].negRisk;\n\n const [allowance, ctfExchangeApproved, negRiskExchangeApproved] = await Promise.all([\n args.publicClient.readContract({\n address: contracts.usdc,\n abi: erc20Abi,\n functionName: \"allowance\",\n args: [args.funder, contracts.ctf],\n }) as Promise<bigint>,\n args.publicClient.readContract({\n address: contracts.ctf,\n abi: POLYMARKET_SET_APPROVAL_FOR_ALL_ABI,\n functionName: \"isApprovedForAll\",\n args: [args.funder, ctfExchange],\n }) as Promise<boolean>,\n includeNegRisk\n ? (args.publicClient.readContract({\n address: contracts.ctf,\n abi: POLYMARKET_SET_APPROVAL_FOR_ALL_ABI,\n functionName: \"isApprovedForAll\",\n args: [args.funder, negRiskExchange],\n }) as Promise<boolean>)\n : Promise.resolve(true),\n ]);\n\n return {\n funder: args.funder,\n usdcAllowance: allowance,\n usdcApproved: allowance > 0n,\n ctfExchangeApproved,\n negRiskExchangeApproved,\n approvalsReady: allowance > 0n && ctfExchangeApproved && negRiskExchangeApproved,\n };\n}\n\nexport async function fetchPolymarketDepositAddresses(args: {\n address: string;\n environment?: PolymarketEnvironment;\n}): Promise<PolymarketDepositAddressesResponse> {\n const environment = args.environment ?? \"mainnet\";\n const contracts = resolvePolymarketBootstrapContracts(environment);\n return (await requestJson(`${contracts.bridgeUrl}/deposit`, {\n method: \"POST\",\n headers: {\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify({\n address: args.address,\n }),\n })) as PolymarketDepositAddressesResponse;\n}\n\nexport function decodePolymarketBootstrapTransaction(\n transaction: PolymarketBootstrapTransaction,\n): {\n to: `0x${string}`;\n functionName: string;\n args: readonly unknown[];\n} {\n const abi =\n transaction.to.toLowerCase() ===\n resolvePolymarketBootstrapContracts(\"mainnet\").usdc.toLowerCase()\n ? erc20Abi\n : POLYMARKET_SET_APPROVAL_FOR_ALL_ABI;\n const decoded = decodeFunctionData({\n abi,\n data: transaction.data,\n });\n return {\n to: transaction.to,\n functionName: decoded.functionName,\n args: decoded.args ?? [],\n };\n}\n"]}
|
package/dist/index.d.ts
CHANGED
|
@@ -5,7 +5,7 @@ export { C as CurrencySpec, D as DEFAULT_FACILITATOR, a as DefineX402PaymentConf
|
|
|
5
5
|
export { EIP3009Authorization, X402BrowserClient, X402BrowserClientConfig, X402Client, X402ClientConfig, X402PayRequest, X402PayResult, payX402, payX402WithWallet } from './x402/index.js';
|
|
6
6
|
export { DEFAULT_CHAIN, DEFAULT_TOKENS, chains, getRpcUrl, registry, tokens, wallet, walletToolkit } from './wallet/index.js';
|
|
7
7
|
export { DEFAULT_HYPERLIQUID_CADENCE_CRON, HyperliquidApproveBuilderFeeOptions, HyperliquidApproveBuilderFeeResponse, HyperliquidBuilderApprovalRecordInput, HyperliquidCadence, HyperliquidChain, HyperliquidClearinghouseState, HyperliquidDcaNormalizedEntry, HyperliquidDcaSymbolEntry, HyperliquidDcaSymbolInput, HyperliquidDepositResult, HyperliquidExecutionMode, HyperliquidOrderOptions, HyperliquidOrderResponse, HyperliquidOrderStatus, HyperliquidResolution, HyperliquidScheduleUnit, HyperliquidStoreNetwork, HyperliquidTargetSizeConfig, HyperliquidTargetSizeExecution, HyperliquidTermsRecordInput, HyperliquidTradePlan, HyperliquidTradeSignal, HyperliquidWithdrawResult, __hyperliquidInternals, approveHyperliquidBuilderFee, clampHyperliquidAbs, clampHyperliquidFloat, clampHyperliquidInt, depositToHyperliquidBridge, fetchHyperliquidClearinghouseState, getHyperliquidMaxBuilderFee, normalizeHyperliquidDcaEntries, parseHyperliquidJson, placeHyperliquidOrder, planHyperliquidTrade, readHyperliquidAccountValue, readHyperliquidNumber, readHyperliquidPerpPosition, readHyperliquidPerpPositionSize, readHyperliquidSpotAccountValue, readHyperliquidSpotBalance, readHyperliquidSpotBalanceSize, recordHyperliquidBuilderApproval, recordHyperliquidTermsAcceptance, resolveHyperliquidBudgetUsd, resolveHyperliquidCadenceCron, resolveHyperliquidCadenceFromResolution, resolveHyperliquidChain, resolveHyperliquidChainConfig, resolveHyperliquidDcaSymbolEntries, resolveHyperliquidHourlyInterval, resolveHyperliquidIntervalCron, resolveHyperliquidMaxPerRunUsd, resolveHyperliquidRpcEnvVar, resolveHyperliquidScheduleEvery, resolveHyperliquidScheduleUnit, resolveHyperliquidStoreNetwork, resolveHyperliquidTargetSize, withdrawFromHyperliquid } from './adapters/hyperliquid/index.js';
|
|
8
|
-
export { POLYMARKET_CHAIN_ID, POLYMARKET_CLOB_AUTH_DOMAIN, POLYMARKET_CLOB_DOMAIN, POLYMARKET_ENDPOINTS, POLYMARKET_EXCHANGE_ADDRESSES, PolymarketApiCredentials, PolymarketApiError, PolymarketApiKeyResponse, PolymarketAuthError, PolymarketEnvironment, PolymarketExchangeClient, PolymarketInfoClient, PolymarketMarket, PolymarketOrderIntent, PolymarketOrderType, PolymarketOrderbook, PolymarketPlaceOrderResponse, PolymarketPriceHistoryPoint, PolymarketSide, PolymarketSignatureType, PolymarketSignedOrderPayload, buildHmacSignature, buildL1Headers, buildL2Headers, buildPolymarketOrderAmounts, buildSignedOrderPayload, cancelAllPolymarketOrders, cancelMarketPolymarketOrders, cancelPolymarketOrder, cancelPolymarketOrders, createPolymarketApiKey, derivePolymarketApiKey, fetchPolymarketMarket, fetchPolymarketMarkets, fetchPolymarketMidpoint, fetchPolymarketOrderbook, fetchPolymarketPrice, fetchPolymarketPriceHistory, normalizeNumberArrayish, normalizeStringArrayish, placePolymarketOrder, resolveExchangeAddress, resolvePolymarketBaseUrl } from './adapters/polymarket/index.js';
|
|
8
|
+
export { POLYMARKET_CHAIN_ID, POLYMARKET_CLOB_AUTH_DOMAIN, POLYMARKET_CLOB_DOMAIN, POLYMARKET_ENDPOINTS, POLYMARKET_EXCHANGE_ADDRESSES, PolymarketActivityType, PolymarketApiCredentials, PolymarketApiError, PolymarketApiKeyResponse, PolymarketApprovalState, PolymarketAuthError, PolymarketBootstrapContracts, PolymarketBootstrapTransaction, PolymarketClosedPosition, PolymarketClosedPositionParams, PolymarketDepositAddressSet, PolymarketDepositAddressesResponse, PolymarketEnvironment, PolymarketExchangeClient, PolymarketInfoClient, PolymarketMarket, PolymarketOrderIntent, PolymarketOrderType, PolymarketOrderbook, PolymarketPlaceOrderResponse, PolymarketPositionValue, PolymarketPositionValueParams, PolymarketPriceHistoryPoint, PolymarketPublicProfile, PolymarketPublicProfileUser, PolymarketSide, PolymarketSignatureType, PolymarketSignedOrderPayload, PolymarketUserActivity, PolymarketUserActivityParams, PolymarketUserPosition, PolymarketUserPositionParams, buildHmacSignature, buildL1Headers, buildL2Headers, buildPolymarketApprovalTransactions, buildPolymarketOrderAmounts, buildPolymarketOutcomeTokenApprovalTransactions, buildPolymarketUsdcApprovalTransaction, buildSignedOrderPayload, cancelAllPolymarketOrders, cancelMarketPolymarketOrders, cancelPolymarketOrder, cancelPolymarketOrders, createOrDerivePolymarketApiKey, createPolymarketApiKey, decodePolymarketBootstrapTransaction, derivePolymarketApiKey, fetchPolymarketActivity, fetchPolymarketApprovalState, fetchPolymarketClosedPositions, fetchPolymarketDepositAddresses, fetchPolymarketMarket, fetchPolymarketMarkets, fetchPolymarketMidpoint, fetchPolymarketOrderbook, fetchPolymarketPositionValue, fetchPolymarketPositions, fetchPolymarketPrice, fetchPolymarketPriceHistory, fetchPolymarketPublicProfile, normalizeNumberArrayish, normalizeStringArrayish, placePolymarketOrder, resolveExchangeAddress, resolvePolymarketBaseUrl, resolvePolymarketBootstrapContracts } from './adapters/polymarket/index.js';
|
|
9
9
|
export { DEFAULT_OPENPOND_GATEWAY_URL, NewsContinuationAction, NewsContinuationGate, NewsContinuationGateResult, NewsEventContinuationGate, NewsEventSignal, NewsEventSignalPolicy, NewsEventSignalRequest, NewsEventState, NewsPredictionMarketContext, NewsPredictionMarketMatchedMarket, NewsPropositionAnswer, NewsPropositionContinuationGate, NewsPropositionSignal, NewsPropositionSignalRequest, NewsPropositionStatus, NewsSignalClient, NewsSignalConfidenceBreakdown, NewsSignalEvidence, NewsSignalValue, evaluateNewsContinuationGate, fetchNewsEventSignal, fetchNewsPropositionSignal, resolveNewsGatewayBase } from './adapters/news/index.js';
|
|
10
10
|
export { AIAbortError, AIClientConfig, AIError, AIFetchError, AIRequestMetadata, AIResponseError, ChatCompletionChoice, ChatCompletionLogProbs, ChatCompletionResponse, ChatCompletionUsage, ChatMessage, ChatMessageContentPart, ChatMessageContentPartImageUrl, ChatMessageContentPartText, ChatMessageRole, DEFAULT_BASE_URL, DEFAULT_MODEL, DEFAULT_TIMEOUT_MS, FunctionToolDefinition, GenerateTextOptions, GenerateTextResult, GenerationParameters, JsonSchema, ResolvedAIClientConfig, ResponseErrorDetails, StreamTextOptions, StreamTextResult, StreamingEventHandlers, ToolChoice, ToolDefinition, ToolExecutionPolicy, WEBSEARCH_TOOL_DEFINITION, WEBSEARCH_TOOL_NAME, WebSearchOptions, createAIClient, ensureTextContent, flattenMessageContent, generateText, getModelConfig, isStreamingSupported, isToolCallingSupported, listModels, normalizeModelName, resolveConfig, resolveToolset, streamText } from './ai/index.js';
|
|
11
11
|
export { AgentDigestRequest, MyToolsResponse, StoreAction, StoreError, StoreEventInput, StoreEventLevel, StoreMode, StoreOptions, StoreResponse, StoreRetrieveParams, StoreRetrieveResult, StoreSimulationConfig, ToolExecuteRequest, ToolExecuteResponse, executeTool, getMyPerformance, getMyTools, postAgentDigest, retrieve, store } from './store/index.js';
|