@sly_ai/sdk 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +346 -0
- package/dist/a2a.d.mts +108 -0
- package/dist/a2a.d.ts +108 -0
- package/dist/a2a.js +173 -0
- package/dist/a2a.js.map +1 -0
- package/dist/a2a.mjs +171 -0
- package/dist/a2a.mjs.map +1 -0
- package/dist/acp.d.mts +201 -0
- package/dist/acp.d.ts +201 -0
- package/dist/acp.js +143 -0
- package/dist/acp.js.map +1 -0
- package/dist/acp.mjs +141 -0
- package/dist/acp.mjs.map +1 -0
- package/dist/ap2.d.mts +188 -0
- package/dist/ap2.d.ts +188 -0
- package/dist/ap2.js +135 -0
- package/dist/ap2.js.map +1 -0
- package/dist/ap2.mjs +133 -0
- package/dist/ap2.mjs.map +1 -0
- package/dist/cards.d.mts +750 -0
- package/dist/cards.d.ts +750 -0
- package/dist/cards.js +373 -0
- package/dist/cards.js.map +1 -0
- package/dist/cards.mjs +369 -0
- package/dist/cards.mjs.map +1 -0
- package/dist/client-Cwe2CLU7.d.mts +41 -0
- package/dist/client-CyJe3uWO.d.ts +41 -0
- package/dist/index.d.mts +662 -0
- package/dist/index.d.ts +662 -0
- package/dist/index.js +2709 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +2700 -0
- package/dist/index.mjs.map +1 -0
- package/dist/langchain.d.mts +11 -0
- package/dist/langchain.d.ts +11 -0
- package/dist/langchain.js +25 -0
- package/dist/langchain.js.map +1 -0
- package/dist/langchain.mjs +23 -0
- package/dist/langchain.mjs.map +1 -0
- package/dist/types-df1EICn_.d.mts +165 -0
- package/dist/types-df1EICn_.d.ts +165 -0
- package/dist/ucp.d.mts +844 -0
- package/dist/ucp.d.ts +844 -0
- package/dist/ucp.js +616 -0
- package/dist/ucp.js.map +1 -0
- package/dist/ucp.mjs +614 -0
- package/dist/ucp.mjs.map +1 -0
- package/dist/vercel.d.mts +178 -0
- package/dist/vercel.d.ts +178 -0
- package/dist/vercel.js +143 -0
- package/dist/vercel.js.map +1 -0
- package/dist/vercel.mjs +138 -0
- package/dist/vercel.mjs.map +1 -0
- package/dist/x402.d.mts +209 -0
- package/dist/x402.d.ts +209 -0
- package/dist/x402.js +476 -0
- package/dist/x402.js.map +1 -0
- package/dist/x402.mjs +471 -0
- package/dist/x402.mjs.map +1 -0
- package/package.json +118 -0
package/dist/ucp.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/protocols/ucp/client.ts"],"names":[],"mappings":";;;AAgDA,IAAM,YAAA,uBAAmB,GAAA,EAAwD;AACjF,IAAM,oBAAA,GAAuB,KAAK,EAAA,GAAK,GAAA;AAEhC,IAAM,YAAN,MAAgB;AAAA,EAGrB,YAAY,MAAA,EAAqB;AAC/B,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAkBA,MAAa,SAAS,WAAA,EAA0C;AAE9D,IAAA,MAAM,OAAA,GAAU,WAAA,CAAY,OAAA,CAAQ,KAAA,EAAO,EAAE,CAAA;AAC7C,IAAA,MAAM,UAAA,GAAa,GAAG,OAAO,CAAA,gBAAA,CAAA;AAG7B,IAAA,MAAM,MAAA,GAAS,YAAA,CAAa,GAAA,CAAI,UAAU,CAAA;AAC1C,IAAA,IAAI,UAAU,IAAA,CAAK,GAAA,EAAI,GAAI,MAAA,CAAO,YAAY,oBAAA,EAAsB;AAClE,MAAA,OAAO,MAAA,CAAO,OAAA;AAAA,IAChB;AAGA,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,UAAA,EAAY;AAAA,MACvC,OAAA,EAAS;AAAA,QACP,MAAA,EAAQ,kBAAA;AAAA,QACR,YAAA,EAAc;AAAA;AAChB,KACD,CAAA;AAED,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,MAAA,MAAM,IAAI,MAAM,CAAA,gCAAA,EAAmC,QAAA,CAAS,MAAM,CAAA,CAAA,EAAI,QAAA,CAAS,UAAU,CAAA,CAAE,CAAA;AAAA,IAC7F;AAEA,IAAA,MAAM,OAAA,GAAW,MAAM,QAAA,CAAS,IAAA,EAAK;AAGrC,IAAA,IAAI,CAAC,OAAA,CAAQ,GAAA,EAAK,OAAA,EAAS;AACzB,MAAA,MAAM,IAAI,MAAM,0CAA0C,CAAA;AAAA,IAC5D;AAGA,IAAA,YAAA,CAAa,IAAI,UAAA,EAAY;AAAA,MAC3B,OAAA;AAAA,MACA,SAAA,EAAW,KAAK,GAAA;AAAI,KACrB,CAAA;AAED,IAAA,OAAO,OAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,MAAa,UAAA,GAAkC;AAC7C,IAAA,OAAO,IAAA,CAAK,MAAA,CAAO,OAAA,CAAoB,kBAAkB,CAAA;AAAA,EAC3D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,MAAa,YAAA,GAAuC;AAClD,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,MAAA,CAAO,OAAA;AAAA,MACjC;AAAA,KACF;AACA,IAAA,OAAO,QAAA,CAAS,SAAA;AAAA,EAClB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,MAAa,cAAA,GAA0C;AACrD,IAAA,OAAO,IAAA,CAAK,MAAA,CAAO,OAAA,CAAwB,cAAc,CAAA;AAAA,EAC3D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAmBA,MAAa,SAAS,OAAA,EAA6C;AACjE,IAAA,OAAO,IAAA,CAAK,MAAA,CAAO,OAAA,CAAkB,eAAA,EAAiB;AAAA,MACpD,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,OAAO;AAAA,KAC7B,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA6BA,MAAa,aAAa,OAAA,EAA6C;AACrE,IAAA,OAAO,IAAA,CAAK,MAAA,CAAO,OAAA,CAAkB,gBAAA,EAAkB;AAAA,MACrD,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,OAAO;AAAA,KAC7B,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAoBA,MAAa,OAAO,OAAA,EAAmD;AACrE,IAAA,OAAO,IAAA,CAAK,MAAA,CAAO,OAAA,CAAuB,gBAAA,EAAkB;AAAA,MAC1D,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,OAAO;AAAA,KAC7B,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAaA,MAAa,cAAc,YAAA,EAA8C;AACvE,IAAA,OAAO,IAAA,CAAK,MAAA,CAAO,OAAA,CAAuB,CAAA,oBAAA,EAAuB,YAAY,CAAA,CAAE,CAAA;AAAA,EACjF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAcA,MAAa,eAAA,CACX,OAAA,GAAkC,EAAC,EACD;AAClC,IAAA,MAAM,MAAA,GAAS,IAAI,eAAA,EAAgB;AACnC,IAAA,IAAI,QAAQ,MAAA,EAAQ,MAAA,CAAO,MAAA,CAAO,QAAA,EAAU,QAAQ,MAAM,CAAA;AAC1D,IAAA,IAAI,QAAQ,QAAA,EAAU,MAAA,CAAO,MAAA,CAAO,UAAA,EAAY,QAAQ,QAAQ,CAAA;AAChE,IAAA,IAAI,OAAA,CAAQ,OAAO,MAAA,CAAO,MAAA,CAAO,SAAS,OAAA,CAAQ,KAAA,CAAM,UAAU,CAAA;AAClE,IAAA,IAAI,OAAA,CAAQ,QAAQ,MAAA,CAAO,MAAA,CAAO,UAAU,OAAA,CAAQ,MAAA,CAAO,UAAU,CAAA;AAErE,IAAA,MAAM,WAAA,GAAc,OAAO,QAAA,EAAS;AACpC,IAAA,MAAM,IAAA,GAAO,WAAA,GAAc,CAAA,oBAAA,EAAuB,WAAW,CAAA,CAAA,GAAK,qBAAA;AAElE,IAAA,OAAO,IAAA,CAAK,MAAA,CAAO,OAAA,CAAiC,IAAI,CAAA;AAAA,EAC1D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAqBA,MAAa,cAAA,CACX,WAAA,EACA,OAAA,EACsB;AAEtB,IAAA,MAAM,OAAA,GAAU,MAAM,IAAA,CAAK,QAAA,CAAS,WAAW,CAAA;AAE/C,IAAA,IAAI,CAAC,OAAA,CAAQ,QAAA,EAAU,QAAA,EAAU;AAC/B,MAAA,MAAM,IAAI,MAAM,wCAAwC,CAAA;AAAA,IAC1D;AAEA,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,OAAA,CAAQ,SAAS,QAAA,EAAU;AAAA,MACtD,MAAA,EAAQ,MAAA;AAAA,MACR,OAAA,EAAS;AAAA,QACP,cAAA,EAAgB,kBAAA;AAAA,QAChB,YAAA,EAAc;AAAA,OAChB;AAAA,MACA,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,OAAO;AAAA,KAC7B,CAAA;AAED,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,MAAA,MAAM,KAAA,GAAQ,MAAM,QAAA,CAAS,IAAA,GAAO,KAAA,CAAM,OAAO,EAAC,CAAE,CAAA;AACpD,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,2BAAA,EAA8B,QAAA,CAAS,MAAM,MAAM,IAAA,CAAK,SAAA,CAAU,KAAK,CAAC,CAAA,CAAE,CAAA;AAAA,IAC5F;AAEA,IAAA,OAAQ,MAAM,SAAS,IAAA,EAAK;AAAA,EAC9B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA6BA,MAAa,gBAAA,CACX,WAAA,EACA,UAAA,EACA,UAAA,EAImB;AAEnB,IAAA,MAAM,OAAA,GAAU,MAAM,IAAA,CAAK,QAAA,CAAS,WAAW,CAAA;AAE/C,IAAA,IAAI,CAAC,OAAA,CAAQ,QAAA,EAAU,QAAA,EAAU;AAC/B,MAAA,MAAM,IAAI,MAAM,wCAAwC,CAAA;AAAA,IAC1D;AAGA,IAAA,MAAM,gBAAA,GAAmB,MAAM,KAAA,CAAM,CAAA,EAAG,QAAQ,QAAA,CAAS,QAAQ,CAAA,CAAA,EAAI,UAAU,CAAA,CAAA,EAAI;AAAA,MACjF,OAAA,EAAS;AAAA,QACP,YAAA,EAAc;AAAA;AAChB,KACD,CAAA;AAED,IAAA,IAAI,CAAC,iBAAiB,EAAA,EAAI;AACxB,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,0BAAA,EAA6B,gBAAA,CAAiB,MAAM,CAAA,CAAE,CAAA;AAAA,IACxE;AAEA,IAAA,MAAM,QAAA,GAAY,MAAM,gBAAA,CAAiB,IAAA,EAAK;AAG9C,IAAA,MAAM,KAAA,GAAQ,MAAM,IAAA,CAAK,YAAA,CAAa;AAAA,MACpC,UAAU,UAAA,CAAW,QAAA;AAAA,MACrB,MAAA,EAAQ,SAAS,MAAA,CAAO,KAAA;AAAA,MACxB,QAAA,EAAU,SAAS,MAAA,CAAO,QAAA;AAAA,MAC1B,WAAW,UAAA,CAAW;AAAA,KACvB,CAAA;AAGD,IAAA,MAAM,eAAA,GAA8C;AAAA,MAClD,eAAA,EAAiB,aAAA;AAAA,MACjB,YAAA,EAAc;AAAA,QACZ,OAAO,KAAA,CAAM;AAAA;AACf,KACF;AAEA,IAAA,MAAM,gBAAA,GAAmB,MAAM,KAAA,CAAM,CAAA,EAAG,QAAQ,QAAA,CAAS,QAAQ,CAAA,CAAA,EAAI,UAAU,CAAA,SAAA,CAAA,EAAa;AAAA,MAC1F,MAAA,EAAQ,MAAA;AAAA,MACR,OAAA,EAAS;AAAA,QACP,cAAA,EAAgB,kBAAA;AAAA,QAChB,YAAA,EAAc;AAAA,OAChB;AAAA,MACA,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,eAAe;AAAA,KACrC,CAAA;AAED,IAAA,IAAI,CAAC,iBAAiB,EAAA,EAAI;AACxB,MAAA,MAAM,KAAA,GAAQ,MAAM,gBAAA,CAAiB,IAAA,GAAO,KAAA,CAAM,OAAO,EAAC,CAAE,CAAA;AAC5D,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,6BAAA,EAAgC,gBAAA,CAAiB,MAAM,MAAM,IAAA,CAAK,SAAA,CAAU,KAAK,CAAC,CAAA,CAAE,CAAA;AAAA,IACtG;AAEA,IAAA,OAAQ,MAAM,iBAAiB,IAAA,EAAK;AAAA,EACtC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASO,UAAA,GAAmB;AACxB,IAAA,YAAA,CAAa,KAAA,EAAM;AAAA,EACrB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,MAAa,gBAAA,CACX,cAAA,EACA,mBAAA,EACA,IAAA,EACkB;AAClB,IAAA,MAAM,SAAA,GAAY,MAAM,IAAA,CAAK,YAAA,EAAa;AAC1C,IAAA,OAAO,SAAA,CAAU,IAAA;AAAA,MACf,CAAC,MACC,CAAA,CAAE,eAAA,KAAoB,kBACtB,CAAA,CAAE,oBAAA,KAAyB,mBAAA,IAC3B,CAAA,CAAE,IAAA,KAAS;AAAA,KACf;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAcO,mBAAmB,MAAA,EAKO;AAC/B,IAAA,OAAO;AAAA,MACL,IAAA,EAAM,KAAA;AAAA,MACN,GAAG;AAAA,KACL;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAaO,oBAAoB,MAAA,EAIM;AAC/B,IAAA,OAAO;AAAA,MACL,IAAA,EAAM,MAAA;AAAA,MACN,GAAG;AAAA,KACL;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAoBA,IAAW,SAAA,GAAY;AACrB,IAAA,OAAO;AAAA,MACL,MAAA,EAAQ,OAAO,OAAA,KAAgE;AAC7E,QAAA,OAAO,IAAA,CAAK,MAAA,CAAO,OAAA,CAAuB,mBAAA,EAAqB;AAAA,UAC7D,MAAA,EAAQ,MAAA;AAAA,UACR,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,OAAO;AAAA,SAC7B,CAAA;AAAA,MACH,CAAA;AAAA,MAEA,GAAA,EAAK,OAAO,UAAA,KAA+C;AACzD,QAAA,OAAO,IAAA,CAAK,MAAA,CAAO,OAAA,CAAuB,CAAA,kBAAA,EAAqB,UAAU,CAAA,CAAE,CAAA;AAAA,MAC7E,CAAA;AAAA,MAEA,MAAA,EAAQ,OAAO,UAAA,EAAoB,OAAA,KAAgE;AACjG,QAAA,OAAO,IAAA,CAAK,MAAA,CAAO,OAAA,CAAuB,CAAA,kBAAA,EAAqB,UAAU,CAAA,CAAA,EAAI;AAAA,UAC3E,MAAA,EAAQ,KAAA;AAAA,UACR,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,OAAO;AAAA,SAC7B,CAAA;AAAA,MACH,CAAA;AAAA,MAEA,QAAA,EAAU,OAAO,UAAA,KAA+C;AAC9D,QAAA,OAAO,IAAA,CAAK,MAAA,CAAO,OAAA,CAAuB,CAAA,kBAAA,EAAqB,UAAU,CAAA,SAAA,CAAA,EAAa;AAAA,UACpF,MAAA,EAAQ;AAAA,SACT,CAAA;AAAA,MACH,CAAA;AAAA,MAEA,MAAA,EAAQ,OAAO,UAAA,KAA+C;AAC5D,QAAA,OAAO,IAAA,CAAK,MAAA,CAAO,OAAA,CAAuB,CAAA,kBAAA,EAAqB,UAAU,CAAA,OAAA,CAAA,EAAW;AAAA,UAClF,MAAA,EAAQ;AAAA,SACT,CAAA;AAAA,MACH,CAAA;AAAA,MAEA,oBAAA,EAAsB,OACpB,UAAA,EACA,UAAA,KAC2B;AAC3B,QAAA,OAAO,IAAA,CAAK,MAAA,CAAO,OAAA,CAAuB,CAAA,kBAAA,EAAqB,UAAU,CAAA,YAAA,CAAA,EAAgB;AAAA,UACvF,MAAA,EAAQ,MAAA;AAAA,UACR,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,UAAU;AAAA,SAChC,CAAA;AAAA,MACH;AAAA,KACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAeA,IAAW,MAAA,GAAS;AAClB,IAAA,OAAO;AAAA,MACL,GAAA,EAAK,OAAO,OAAA,KAAyC;AACnD,QAAA,OAAO,IAAA,CAAK,MAAA,CAAO,OAAA,CAAoB,CAAA,eAAA,EAAkB,OAAO,CAAA,CAAE,CAAA;AAAA,MACpE,CAAA;AAAA,MAEA,IAAA,EAAM,OAAO,OAAA,GAAkC,EAAC,KAAwC;AACtF,QAAA,MAAM,MAAA,GAAS,IAAI,eAAA,EAAgB;AACnC,QAAA,IAAI,QAAQ,MAAA,EAAQ,MAAA,CAAO,MAAA,CAAO,QAAA,EAAU,QAAQ,MAAM,CAAA;AAC1D,QAAA,IAAI,OAAA,CAAQ,OAAO,MAAA,CAAO,MAAA,CAAO,SAAS,OAAA,CAAQ,KAAA,CAAM,UAAU,CAAA;AAClE,QAAA,IAAI,OAAA,CAAQ,QAAQ,MAAA,CAAO,MAAA,CAAO,UAAU,OAAA,CAAQ,MAAA,CAAO,UAAU,CAAA;AAErE,QAAA,MAAM,WAAA,GAAc,OAAO,QAAA,EAAS;AACpC,QAAA,MAAM,IAAA,GAAO,WAAA,GAAc,CAAA,eAAA,EAAkB,WAAW,CAAA,CAAA,GAAK,gBAAA;AAE7D,QAAA,OAAO,IAAA,CAAK,MAAA,CAAO,OAAA,CAAiC,IAAI,CAAA;AAAA,MAC1D,CAAA;AAAA,MAEA,YAAA,EAAc,OAAO,OAAA,EAAiB,MAAA,KAAkD;AACtF,QAAA,OAAO,IAAA,CAAK,MAAA,CAAO,OAAA,CAAoB,CAAA,eAAA,EAAkB,OAAO,CAAA,OAAA,CAAA,EAAW;AAAA,UACzE,MAAA,EAAQ,KAAA;AAAA,UACR,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,EAAE,QAAQ;AAAA,SAChC,CAAA;AAAA,MACH,CAAA;AAAA,MAEA,MAAA,EAAQ,OAAO,OAAA,EAAiB,MAAA,KAAyC;AACvE,QAAA,OAAO,IAAA,CAAK,MAAA,CAAO,OAAA,CAAoB,CAAA,eAAA,EAAkB,OAAO,CAAA,OAAA,CAAA,EAAW;AAAA,UACzE,MAAA,EAAQ,MAAA;AAAA,UACR,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,EAAE,QAAQ;AAAA,SAChC,CAAA;AAAA,MACH,CAAA;AAAA,MAEA,cAAA,EAAgB,OACd,OAAA,EACA,WAAA,KACwB;AACxB,QAAA,OAAO,IAAA,CAAK,MAAA,CAAO,OAAA,CAAoB,CAAA,eAAA,EAAkB,OAAO,CAAA,aAAA,CAAA,EAAiB;AAAA,UAC/E,MAAA,EAAQ,MAAA;AAAA,UACR,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,WAAW;AAAA,SACjC,CAAA;AAAA,MACH,CAAA;AAAA,MAEA,iBAAA,EAAmB,OACjB,OAAA,EACA,aAAA,EACA,OAAA,KACwB;AACxB,QAAA,OAAO,KAAK,MAAA,CAAO,OAAA;AAAA,UACjB,CAAA,eAAA,EAAkB,OAAO,CAAA,cAAA,EAAiB,aAAa,CAAA,CAAA;AAAA,UACvD;AAAA,YACE,MAAA,EAAQ,KAAA;AAAA,YACR,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,OAAO;AAAA;AAC9B,SACF;AAAA,MACF,CAAA;AAAA,MAEA,QAAA,EAAU,OACR,OAAA,EACA,KAAA,KACwB;AACxB,QAAA,OAAO,IAAA,CAAK,MAAA,CAAO,OAAA,CAAoB,CAAA,eAAA,EAAkB,OAAO,CAAA,OAAA,CAAA,EAAW;AAAA,UACzE,MAAA,EAAQ,MAAA;AAAA,UACR,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,KAAK;AAAA,SAC3B,CAAA;AAAA,MACH,CAAA;AAAA,MAEA,SAAA,EAAW,OAAO,OAAA,KAAgE;AAChF,QAAA,OAAO,KAAK,MAAA,CAAO,OAAA;AAAA,UACjB,kBAAkB,OAAO,CAAA,OAAA;AAAA,SAC3B;AAAA,MACF,CAAA;AAAA,MAEA,aAAA,EAAe,OACb,OAAA,EACA,UAAA,KACwB;AACxB,QAAA,OAAO,IAAA,CAAK,MAAA,CAAO,OAAA,CAAoB,CAAA,eAAA,EAAkB,OAAO,CAAA,YAAA,CAAA,EAAgB;AAAA,UAC9E,MAAA,EAAQ,MAAA;AAAA,UACR,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,UAAU;AAAA,SAChC,CAAA;AAAA,MACH;AAAA,KACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAqBA,IAAW,QAAA,GAAW;AACpB,IAAA,OAAO;AAAA;AAAA;AAAA;AAAA,MAIL,cAAA,EAAgB,OAAO,OAAA,KAA8E;AACnG,QAAA,OAAO,IAAA,CAAK,MAAA,CAAO,OAAA,CAAqC,0BAAA,EAA4B;AAAA,UAClF,MAAA,EAAQ,MAAA;AAAA,UACR,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,OAAO;AAAA,SAC7B,CAAA;AAAA,MACH,CAAA;AAAA;AAAA;AAAA;AAAA,MAKA,oBAAA,EAAsB,OAAO,MAAA,KAQQ;AACnC,QAAA,MAAM,YAAA,GAAe,IAAI,eAAA,EAAgB;AACzC,QAAA,YAAA,CAAa,MAAA,CAAO,eAAA,EAAiB,MAAA,CAAO,aAAa,CAAA;AACzD,QAAA,YAAA,CAAa,MAAA,CAAO,WAAA,EAAa,MAAA,CAAO,SAAS,CAAA;AACjD,QAAA,YAAA,CAAa,MAAA,CAAO,cAAA,EAAgB,MAAA,CAAO,YAAY,CAAA;AACvD,QAAA,YAAA,CAAa,MAAA,CAAO,OAAA,EAAS,MAAA,CAAO,KAAK,CAAA;AACzC,QAAA,YAAA,CAAa,MAAA,CAAO,OAAA,EAAS,MAAA,CAAO,KAAK,CAAA;AACzC,QAAA,IAAI,OAAO,cAAA,EAAgB;AACzB,UAAA,YAAA,CAAa,MAAA,CAAO,gBAAA,EAAkB,MAAA,CAAO,cAAc,CAAA;AAAA,QAC7D;AACA,QAAA,IAAI,OAAO,qBAAA,EAAuB;AAChC,UAAA,YAAA,CAAa,MAAA,CAAO,uBAAA,EAAyB,MAAA,CAAO,qBAAqB,CAAA;AAAA,QAC3E;AAEA,QAAA,OAAO,KAAK,MAAA,CAAO,OAAA;AAAA,UACjB,CAAA,2BAAA,EAA8B,YAAA,CAAa,QAAA,EAAU,CAAA;AAAA,SACvD;AAAA,MACF,CAAA;AAAA;AAAA;AAAA;AAAA,MAKA,aAAA,EAAe,OAAO,OAAA,KAA4D;AAChF,QAAA,OAAO,IAAA,CAAK,MAAA,CAAO,OAAA,CAA4B,oCAAA,EAAsC;AAAA,UACnF,MAAA,EAAQ,MAAA;AAAA,UACR,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,OAAO;AAAA,SAC7B,CAAA;AAAA,MACH,CAAA;AAAA;AAAA;AAAA;AAAA,MAKA,YAAA,EAAc,OAAO,MAAA,KAMY;AAC/B,QAAA,OAAO,IAAA,CAAK,MAAA,CAAO,OAAA,CAA0B,wBAAA,EAA0B;AAAA,UACrE,MAAA,EAAQ,MAAA;AAAA,UACR,IAAA,EAAM,KAAK,SAAA,CAAU;AAAA,YACnB,UAAA,EAAY,oBAAA;AAAA,YACZ,GAAG;AAAA,WACJ;AAAA,SACF,CAAA;AAAA,MACH,CAAA;AAAA;AAAA;AAAA;AAAA,MAKA,aAAA,EAAe,OAAO,MAAA,KAIW;AAC/B,QAAA,OAAO,IAAA,CAAK,MAAA,CAAO,OAAA,CAA0B,wBAAA,EAA0B;AAAA,UACrE,MAAA,EAAQ,MAAA;AAAA,UACR,IAAA,EAAM,KAAK,SAAA,CAAU;AAAA,YACnB,UAAA,EAAY,eAAA;AAAA,YACZ,GAAG;AAAA,WACJ;AAAA,SACF,CAAA;AAAA,MACH,CAAA;AAAA;AAAA;AAAA;AAAA,MAKA,WAAA,EAAa,OAAO,MAAA,KAKiB;AACnC,QAAA,OAAO,IAAA,CAAK,MAAA,CAAO,OAAA,CAA8B,yBAAA,EAA2B;AAAA,UAC1E,MAAA,EAAQ,MAAA;AAAA,UACR,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,MAAM;AAAA,SAC5B,CAAA;AAAA,MACH,CAAA;AAAA;AAAA;AAAA;AAAA,MAKA,kBAAA,EAAoB,OAAO,MAAA,KAKiF;AAC1G,QAAA,MAAM,YAAA,GAAe,IAAI,eAAA,EAAgB;AACzC,QAAA,IAAI,OAAO,QAAA,EAAU,YAAA,CAAa,MAAA,CAAO,UAAA,EAAY,OAAO,QAAQ,CAAA;AACpE,QAAA,IAAI,OAAO,WAAA,EAAa,YAAA,CAAa,MAAA,CAAO,aAAA,EAAe,OAAO,WAAW,CAAA;AAC7E,QAAA,IAAI,MAAA,CAAO,OAAO,YAAA,CAAa,MAAA,CAAO,SAAS,MAAA,CAAO,KAAA,CAAM,UAAU,CAAA;AACtE,QAAA,IAAI,MAAA,CAAO,QAAQ,YAAA,CAAa,MAAA,CAAO,UAAU,MAAA,CAAO,MAAA,CAAO,UAAU,CAAA;AAEzE,QAAA,OAAO,KAAK,MAAA,CAAO,OAAA;AAAA,UACjB,CAAA,iCAAA,EAAoC,YAAA,CAAa,QAAA,EAAU,CAAA;AAAA,SAC7D;AAAA,MACF,CAAA;AAAA;AAAA;AAAA;AAAA,MAKA,aAAA,EAAe,OAAO,SAAA,EAAmB,OAAA,KAAmD;AAC1F,QAAA,OAAO,KAAK,MAAA,CAAO,OAAA;AAAA,UACjB,CAAA,iCAAA,EAAoC,SAAS,CAAA,UAAA,EAAa,OAAO,CAAA,CAAA;AAAA,UACjE,EAAE,QAAQ,QAAA;AAAS,SACrB;AAAA,MACF,CAAA;AAAA;AAAA;AAAA;AAAA,MAKA,WAAW,YAA+C;AACxD,QAAA,OAAO,IAAA,CAAK,MAAA,CAAO,OAAA,CAAkC,yBAAyB,CAAA;AAAA,MAChF;AAAA,KACF;AAAA,EACF;AACF","file":"ucp.js","sourcesContent":["/**\n * UCP Client - Universal Commerce Protocol\n *\n * Wraps PayOS UCP API endpoints for settlement and merchant discovery.\n *\n * @see Story 43.9: UCP Client Module\n * @see https://ucp.dev/specification/overview/\n */\n\nimport type { PayOSClient } from '../../client';\nimport type {\n UCPProfile,\n UCPCorridor,\n UCPQuoteRequest,\n UCPQuote,\n UCPTokenRequest,\n UCPToken,\n UCPSettleRequest,\n UCPSettlement,\n ListSettlementsOptions,\n ListSettlementsResponse,\n UCPHandlerInfo,\n UCPCheckoutRequest,\n UCPCheckout,\n UCPCompleteCheckoutRequest,\n UCPOrder,\n // PayOS-hosted types (Phases 2-4)\n PayOSCheckout,\n CreatePayOSCheckoutRequest,\n UpdatePayOSCheckoutRequest,\n PayOSOrder,\n PayOSOrderStatus,\n ListPayOSOrdersOptions,\n ListPayOSOrdersResponse,\n PayOSExpectation,\n PayOSFulfillmentEvent,\n PayOSAdjustment,\n RegisterOAuthClientRequest,\n RegisterOAuthClientResponse,\n UCPLinkedAccount,\n UCPTokenResponse,\n UCPAuthorizationInfo,\n UCPConsentRequest,\n UCPConsentResponse,\n UCPScopeInfo,\n} from './types';\n\n// Profile cache for discovered merchants\nconst profileCache = new Map<string, { profile: UCPProfile; fetchedAt: number }>();\nconst PROFILE_CACHE_TTL_MS = 60 * 60 * 1000; // 1 hour\n\nexport class UCPClient {\n private client: PayOSClient;\n\n constructor(client: PayOSClient) {\n this.client = client;\n }\n\n // ===========================================================================\n // Discovery\n // ===========================================================================\n\n /**\n * Discover a UCP merchant's capabilities\n *\n * Fetches and caches the merchant's UCP profile from /.well-known/ucp\n *\n * @example\n * ```typescript\n * const merchant = await payos.ucp.discover('https://shop.example.com');\n * console.log(merchant.ucp.version);\n * console.log(merchant.payment?.handlers);\n * ```\n */\n public async discover(merchantUrl: string): Promise<UCPProfile> {\n // Normalize URL\n const baseUrl = merchantUrl.replace(/\\/$/, '');\n const profileUrl = `${baseUrl}/.well-known/ucp`;\n\n // Check cache\n const cached = profileCache.get(profileUrl);\n if (cached && Date.now() - cached.fetchedAt < PROFILE_CACHE_TTL_MS) {\n return cached.profile;\n }\n\n // Fetch profile\n const response = await fetch(profileUrl, {\n headers: {\n Accept: 'application/json',\n 'User-Agent': 'PayOS-SDK/1.0',\n },\n });\n\n if (!response.ok) {\n throw new Error(`Failed to discover UCP profile: ${response.status} ${response.statusText}`);\n }\n\n const profile = (await response.json()) as UCPProfile;\n\n // Validate basic structure\n if (!profile.ucp?.version) {\n throw new Error('Invalid UCP profile: missing ucp.version');\n }\n\n // Cache the profile\n profileCache.set(profileUrl, {\n profile,\n fetchedAt: Date.now(),\n });\n\n return profile;\n }\n\n /**\n * Get PayOS's own UCP profile\n *\n * @example\n * ```typescript\n * const profile = await payos.ucp.getProfile();\n * console.log(profile.payment?.handlers);\n * ```\n */\n public async getProfile(): Promise<UCPProfile> {\n return this.client.request<UCPProfile>('/.well-known/ucp');\n }\n\n /**\n * Get available settlement corridors\n *\n * @example\n * ```typescript\n * const corridors = await payos.ucp.getCorridors();\n * console.log(corridors.find(c => c.rail === 'pix'));\n * ```\n */\n public async getCorridors(): Promise<UCPCorridor[]> {\n const response = await this.client.request<{ corridors: UCPCorridor[] }>(\n '/v1/ucp/corridors'\n );\n return response.corridors;\n }\n\n /**\n * Get UCP handler info\n *\n * @example\n * ```typescript\n * const info = await payos.ucp.getHandlerInfo();\n * console.log(info.handler.name); // com.payos.latam_settlement\n * ```\n */\n public async getHandlerInfo(): Promise<UCPHandlerInfo> {\n return this.client.request<UCPHandlerInfo>('/v1/ucp/info');\n }\n\n // ===========================================================================\n // Quotes\n // ===========================================================================\n\n /**\n * Get an FX quote for a settlement corridor\n *\n * @example\n * ```typescript\n * const quote = await payos.ucp.getQuote({\n * corridor: 'pix',\n * amount: 100,\n * currency: 'USD',\n * });\n * console.log(`${quote.from_amount} USD = ${quote.to_amount} BRL`);\n * ```\n */\n public async getQuote(request: UCPQuoteRequest): Promise<UCPQuote> {\n return this.client.request<UCPQuote>('/v1/ucp/quote', {\n method: 'POST',\n body: JSON.stringify(request),\n });\n }\n\n // ===========================================================================\n // Token Acquisition (Payment Handler flow)\n // ===========================================================================\n\n /**\n * Acquire a settlement token for completing a UCP checkout\n *\n * Tokens are valid for 15 minutes and lock in the FX rate.\n *\n * @example\n * ```typescript\n * const token = await payos.ucp.acquireToken({\n * corridor: 'pix',\n * amount: 100,\n * currency: 'USD',\n * recipient: {\n * type: 'pix',\n * pix_key: '12345678901',\n * pix_key_type: 'cpf',\n * name: 'Maria Silva',\n * },\n * });\n *\n * console.log(token.token); // ucp_tok_...\n * console.log(token.quote.to_amount); // 595.00 BRL\n * ```\n */\n public async acquireToken(request: UCPTokenRequest): Promise<UCPToken> {\n return this.client.request<UCPToken>('/v1/ucp/tokens', {\n method: 'POST',\n body: JSON.stringify(request),\n });\n }\n\n // ===========================================================================\n // Settlement Execution\n // ===========================================================================\n\n /**\n * Complete settlement using a previously acquired token\n *\n * @example\n * ```typescript\n * const settlement = await payos.ucp.settle({\n * token: 'ucp_tok_...',\n * idempotency_key: 'checkout_12345',\n * });\n *\n * console.log(settlement.status); // pending\n * console.log(settlement.id); // Use this to track status\n * ```\n */\n public async settle(request: UCPSettleRequest): Promise<UCPSettlement> {\n return this.client.request<UCPSettlement>('/v1/ucp/settle', {\n method: 'POST',\n body: JSON.stringify(request),\n });\n }\n\n /**\n * Get settlement status by ID\n *\n * @example\n * ```typescript\n * const settlement = await payos.ucp.getSettlement('uuid');\n * if (settlement.status === 'completed') {\n * console.log(`Completed at ${settlement.completed_at}`);\n * }\n * ```\n */\n public async getSettlement(settlementId: string): Promise<UCPSettlement> {\n return this.client.request<UCPSettlement>(`/v1/ucp/settlements/${settlementId}`);\n }\n\n /**\n * List settlements with optional filtering\n *\n * @example\n * ```typescript\n * const { data, pagination } = await payos.ucp.listSettlements({\n * status: 'completed',\n * corridor: 'pix',\n * limit: 50,\n * });\n * ```\n */\n public async listSettlements(\n options: ListSettlementsOptions = {}\n ): Promise<ListSettlementsResponse> {\n const params = new URLSearchParams();\n if (options.status) params.append('status', options.status);\n if (options.corridor) params.append('corridor', options.corridor);\n if (options.limit) params.append('limit', options.limit.toString());\n if (options.offset) params.append('offset', options.offset.toString());\n\n const queryString = params.toString();\n const path = queryString ? `/v1/ucp/settlements?${queryString}` : '/v1/ucp/settlements';\n\n return this.client.request<ListSettlementsResponse>(path);\n }\n\n // ===========================================================================\n // Checkout (Consuming UCP Merchants)\n // ===========================================================================\n\n /**\n * Create a checkout session with a UCP merchant\n *\n * @example\n * ```typescript\n * const checkout = await payos.ucp.createCheckout('https://shop.example.com', {\n * line_items: [\n * { product_id: 'prod_123', quantity: 2 },\n * ],\n * buyer: { email: 'buyer@example.com' },\n * });\n *\n * console.log(checkout.totals.total);\n * ```\n */\n public async createCheckout(\n merchantUrl: string,\n request: UCPCheckoutRequest\n ): Promise<UCPCheckout> {\n // Discover merchant to get checkout endpoint\n const profile = await this.discover(merchantUrl);\n\n if (!profile.checkout?.endpoint) {\n throw new Error('Merchant does not support UCP checkout');\n }\n\n const response = await fetch(profile.checkout.endpoint, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'User-Agent': 'PayOS-SDK/1.0',\n },\n body: JSON.stringify(request),\n });\n\n if (!response.ok) {\n const error = await response.json().catch(() => ({}));\n throw new Error(`Failed to create checkout: ${response.status} - ${JSON.stringify(error)}`);\n }\n\n return (await response.json()) as UCPCheckout;\n }\n\n /**\n * Complete a checkout with PayOS LATAM settlement\n *\n * This is a convenience method that:\n * 1. Acquires a settlement token\n * 2. Completes the checkout with the merchant\n *\n * @example\n * ```typescript\n * const order = await payos.ucp.completeCheckout(\n * 'https://shop.example.com',\n * checkout.id,\n * {\n * corridor: 'pix',\n * recipient: {\n * type: 'pix',\n * pix_key: '12345678901',\n * pix_key_type: 'cpf',\n * name: 'Maria Silva',\n * },\n * }\n * );\n *\n * console.log(order.id);\n * console.log(order.payment.settlement_id);\n * ```\n */\n public async completeCheckout(\n merchantUrl: string,\n checkoutId: string,\n settlement: {\n corridor: 'pix' | 'spei';\n recipient: UCPTokenRequest['recipient'];\n }\n ): Promise<UCPOrder> {\n // Get checkout details to know the amount\n const profile = await this.discover(merchantUrl);\n\n if (!profile.checkout?.endpoint) {\n throw new Error('Merchant does not support UCP checkout');\n }\n\n // Fetch checkout to get amount\n const checkoutResponse = await fetch(`${profile.checkout.endpoint}/${checkoutId}`, {\n headers: {\n 'User-Agent': 'PayOS-SDK/1.0',\n },\n });\n\n if (!checkoutResponse.ok) {\n throw new Error(`Failed to fetch checkout: ${checkoutResponse.status}`);\n }\n\n const checkout = (await checkoutResponse.json()) as UCPCheckout;\n\n // Acquire settlement token\n const token = await this.acquireToken({\n corridor: settlement.corridor,\n amount: checkout.totals.total,\n currency: checkout.totals.currency as 'USD' | 'USDC',\n recipient: settlement.recipient,\n });\n\n // Complete checkout with merchant\n const completeRequest: UCPCompleteCheckoutRequest = {\n payment_handler: 'payos_latam',\n payment_data: {\n token: token.token,\n },\n };\n\n const completeResponse = await fetch(`${profile.checkout.endpoint}/${checkoutId}/complete`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'User-Agent': 'PayOS-SDK/1.0',\n },\n body: JSON.stringify(completeRequest),\n });\n\n if (!completeResponse.ok) {\n const error = await completeResponse.json().catch(() => ({}));\n throw new Error(`Failed to complete checkout: ${completeResponse.status} - ${JSON.stringify(error)}`);\n }\n\n return (await completeResponse.json()) as UCPOrder;\n }\n\n // ===========================================================================\n // Utilities\n // ===========================================================================\n\n /**\n * Clear the profile cache (useful for testing)\n */\n public clearCache(): void {\n profileCache.clear();\n }\n\n /**\n * Check if PayOS supports a specific corridor\n *\n * @example\n * ```typescript\n * if (await payos.ucp.supportsCorridors('USD', 'BRL', 'pix')) {\n * // Can settle via Pix\n * }\n * ```\n */\n public async supportsCorridor(\n sourceCurrency: string,\n destinationCurrency: string,\n rail: string\n ): Promise<boolean> {\n const corridors = await this.getCorridors();\n return corridors.some(\n (c) =>\n c.source_currency === sourceCurrency &&\n c.destination_currency === destinationCurrency &&\n c.rail === rail\n );\n }\n\n /**\n * Create Pix recipient helper\n *\n * @example\n * ```typescript\n * const recipient = payos.ucp.createPixRecipient({\n * pix_key: '12345678901',\n * pix_key_type: 'cpf',\n * name: 'Maria Silva',\n * });\n * ```\n */\n public createPixRecipient(params: {\n pix_key: string;\n pix_key_type: 'cpf' | 'cnpj' | 'email' | 'phone' | 'evp';\n name: string;\n tax_id?: string;\n }): UCPTokenRequest['recipient'] {\n return {\n type: 'pix',\n ...params,\n };\n }\n\n /**\n * Create SPEI recipient helper\n *\n * @example\n * ```typescript\n * const recipient = payos.ucp.createSpeiRecipient({\n * clabe: '012345678901234567',\n * name: 'Juan Garcia',\n * });\n * ```\n */\n public createSpeiRecipient(params: {\n clabe: string;\n name: string;\n rfc?: string;\n }): UCPTokenRequest['recipient'] {\n return {\n type: 'spei',\n ...params,\n };\n }\n\n // ===========================================================================\n // PayOS-Hosted Checkout Sessions (Phase 2)\n // ===========================================================================\n\n /**\n * Create a PayOS-hosted checkout session\n *\n * @example\n * ```typescript\n * const checkout = await payos.ucp.checkouts.create({\n * currency: 'USD',\n * line_items: [\n * { id: 'item_1', name: 'Product', quantity: 1, unit_price: 1000, total_price: 1000, currency: 'USD' }\n * ],\n * buyer: { email: 'buyer@example.com' },\n * });\n * ```\n */\n public get checkouts() {\n return {\n create: async (request: CreatePayOSCheckoutRequest): Promise<PayOSCheckout> => {\n return this.client.request<PayOSCheckout>('/v1/ucp/checkouts', {\n method: 'POST',\n body: JSON.stringify(request),\n });\n },\n\n get: async (checkoutId: string): Promise<PayOSCheckout> => {\n return this.client.request<PayOSCheckout>(`/v1/ucp/checkouts/${checkoutId}`);\n },\n\n update: async (checkoutId: string, request: UpdatePayOSCheckoutRequest): Promise<PayOSCheckout> => {\n return this.client.request<PayOSCheckout>(`/v1/ucp/checkouts/${checkoutId}`, {\n method: 'PUT',\n body: JSON.stringify(request),\n });\n },\n\n complete: async (checkoutId: string): Promise<PayOSCheckout> => {\n return this.client.request<PayOSCheckout>(`/v1/ucp/checkouts/${checkoutId}/complete`, {\n method: 'POST',\n });\n },\n\n cancel: async (checkoutId: string): Promise<PayOSCheckout> => {\n return this.client.request<PayOSCheckout>(`/v1/ucp/checkouts/${checkoutId}/cancel`, {\n method: 'POST',\n });\n },\n\n addPaymentInstrument: async (\n checkoutId: string,\n instrument: { id: string; handler: string; type: string; last4?: string; brand?: string }\n ): Promise<PayOSCheckout> => {\n return this.client.request<PayOSCheckout>(`/v1/ucp/checkouts/${checkoutId}/instruments`, {\n method: 'POST',\n body: JSON.stringify(instrument),\n });\n },\n };\n }\n\n // ===========================================================================\n // PayOS Orders (Phase 3)\n // ===========================================================================\n\n /**\n * Manage PayOS orders\n *\n * @example\n * ```typescript\n * const order = await payos.ucp.orders.get('ord_123');\n * const orders = await payos.ucp.orders.list({ status: 'processing' });\n * ```\n */\n public get orders() {\n return {\n get: async (orderId: string): Promise<PayOSOrder> => {\n return this.client.request<PayOSOrder>(`/v1/ucp/orders/${orderId}`);\n },\n\n list: async (options: ListPayOSOrdersOptions = {}): Promise<ListPayOSOrdersResponse> => {\n const params = new URLSearchParams();\n if (options.status) params.append('status', options.status);\n if (options.limit) params.append('limit', options.limit.toString());\n if (options.offset) params.append('offset', options.offset.toString());\n\n const queryString = params.toString();\n const path = queryString ? `/v1/ucp/orders?${queryString}` : '/v1/ucp/orders';\n\n return this.client.request<ListPayOSOrdersResponse>(path);\n },\n\n updateStatus: async (orderId: string, status: PayOSOrderStatus): Promise<PayOSOrder> => {\n return this.client.request<PayOSOrder>(`/v1/ucp/orders/${orderId}/status`, {\n method: 'PUT',\n body: JSON.stringify({ status }),\n });\n },\n\n cancel: async (orderId: string, reason?: string): Promise<PayOSOrder> => {\n return this.client.request<PayOSOrder>(`/v1/ucp/orders/${orderId}/cancel`, {\n method: 'POST',\n body: JSON.stringify({ reason }),\n });\n },\n\n addExpectation: async (\n orderId: string,\n expectation: Omit<PayOSExpectation, 'id'>\n ): Promise<PayOSOrder> => {\n return this.client.request<PayOSOrder>(`/v1/ucp/orders/${orderId}/expectations`, {\n method: 'POST',\n body: JSON.stringify(expectation),\n });\n },\n\n updateExpectation: async (\n orderId: string,\n expectationId: string,\n updates: Partial<Omit<PayOSExpectation, 'id'>>\n ): Promise<PayOSOrder> => {\n return this.client.request<PayOSOrder>(\n `/v1/ucp/orders/${orderId}/expectations/${expectationId}`,\n {\n method: 'PUT',\n body: JSON.stringify(updates),\n }\n );\n },\n\n addEvent: async (\n orderId: string,\n event: Omit<PayOSFulfillmentEvent, 'id' | 'timestamp'>\n ): Promise<PayOSOrder> => {\n return this.client.request<PayOSOrder>(`/v1/ucp/orders/${orderId}/events`, {\n method: 'POST',\n body: JSON.stringify(event),\n });\n },\n\n getEvents: async (orderId: string): Promise<{ data: PayOSFulfillmentEvent[] }> => {\n return this.client.request<{ data: PayOSFulfillmentEvent[] }>(\n `/v1/ucp/orders/${orderId}/events`\n );\n },\n\n addAdjustment: async (\n orderId: string,\n adjustment: Omit<PayOSAdjustment, 'id' | 'created_at'>\n ): Promise<PayOSOrder> => {\n return this.client.request<PayOSOrder>(`/v1/ucp/orders/${orderId}/adjustments`, {\n method: 'POST',\n body: JSON.stringify(adjustment),\n });\n },\n };\n }\n\n // ===========================================================================\n // Identity Linking (Phase 4)\n // ===========================================================================\n\n /**\n * OAuth 2.0 identity linking for AI agents/platforms\n *\n * @example\n * ```typescript\n * // Register an OAuth client\n * const { client, client_secret } = await payos.ucp.identity.registerClient({\n * name: 'My AI Agent',\n * redirect_uris: ['https://myagent.com/callback'],\n * });\n *\n * // List linked accounts\n * const accounts = await payos.ucp.identity.listLinkedAccounts({ buyer_id: 'buyer_123' });\n * ```\n */\n public get identity() {\n return {\n /**\n * Register an OAuth client (platform/agent)\n */\n registerClient: async (request: RegisterOAuthClientRequest): Promise<RegisterOAuthClientResponse> => {\n return this.client.request<RegisterOAuthClientResponse>('/v1/ucp/identity/clients', {\n method: 'POST',\n body: JSON.stringify(request),\n });\n },\n\n /**\n * Get authorization info for consent screen\n */\n getAuthorizationInfo: async (params: {\n response_type: 'code';\n client_id: string;\n redirect_uri: string;\n scope: string;\n state: string;\n code_challenge?: string;\n code_challenge_method?: 'S256' | 'plain';\n }): Promise<UCPAuthorizationInfo> => {\n const searchParams = new URLSearchParams();\n searchParams.append('response_type', params.response_type);\n searchParams.append('client_id', params.client_id);\n searchParams.append('redirect_uri', params.redirect_uri);\n searchParams.append('scope', params.scope);\n searchParams.append('state', params.state);\n if (params.code_challenge) {\n searchParams.append('code_challenge', params.code_challenge);\n }\n if (params.code_challenge_method) {\n searchParams.append('code_challenge_method', params.code_challenge_method);\n }\n\n return this.client.request<UCPAuthorizationInfo>(\n `/v1/ucp/identity/authorize?${searchParams.toString()}`\n );\n },\n\n /**\n * Submit consent decision (after user authenticates)\n */\n submitConsent: async (request: UCPConsentRequest): Promise<UCPConsentResponse> => {\n return this.client.request<UCPConsentResponse>('/v1/ucp/identity/authorize/consent', {\n method: 'POST',\n body: JSON.stringify(request),\n });\n },\n\n /**\n * Exchange authorization code for tokens\n */\n exchangeCode: async (params: {\n client_id: string;\n client_secret?: string;\n code: string;\n redirect_uri: string;\n code_verifier?: string;\n }): Promise<UCPTokenResponse> => {\n return this.client.request<UCPTokenResponse>('/v1/ucp/identity/token', {\n method: 'POST',\n body: JSON.stringify({\n grant_type: 'authorization_code',\n ...params,\n }),\n });\n },\n\n /**\n * Refresh tokens\n */\n refreshTokens: async (params: {\n client_id: string;\n client_secret?: string;\n refresh_token: string;\n }): Promise<UCPTokenResponse> => {\n return this.client.request<UCPTokenResponse>('/v1/ucp/identity/token', {\n method: 'POST',\n body: JSON.stringify({\n grant_type: 'refresh_token',\n ...params,\n }),\n });\n },\n\n /**\n * Revoke a token\n */\n revokeToken: async (params: {\n token: string;\n token_type_hint?: 'access_token' | 'refresh_token';\n client_id: string;\n client_secret?: string;\n }): Promise<{ success: boolean }> => {\n return this.client.request<{ success: boolean }>('/v1/ucp/identity/revoke', {\n method: 'POST',\n body: JSON.stringify(params),\n });\n },\n\n /**\n * List linked accounts\n */\n listLinkedAccounts: async (params: {\n buyer_id?: string;\n platform_id?: string;\n limit?: number;\n offset?: number;\n }): Promise<{ data: UCPLinkedAccount[]; pagination?: { limit: number; offset: number; total: number } }> => {\n const searchParams = new URLSearchParams();\n if (params.buyer_id) searchParams.append('buyer_id', params.buyer_id);\n if (params.platform_id) searchParams.append('platform_id', params.platform_id);\n if (params.limit) searchParams.append('limit', params.limit.toString());\n if (params.offset) searchParams.append('offset', params.offset.toString());\n\n return this.client.request<{ data: UCPLinkedAccount[]; pagination?: { limit: number; offset: number; total: number } }>(\n `/v1/ucp/identity/linked-accounts?${searchParams.toString()}`\n );\n },\n\n /**\n * Unlink an account\n */\n unlinkAccount: async (accountId: string, buyerId: string): Promise<{ success: boolean }> => {\n return this.client.request<{ success: boolean }>(\n `/v1/ucp/identity/linked-accounts/${accountId}?buyer_id=${buyerId}`,\n { method: 'DELETE' }\n );\n },\n\n /**\n * Get available scopes\n */\n getScopes: async (): Promise<{ data: UCPScopeInfo[] }> => {\n return this.client.request<{ data: UCPScopeInfo[] }>('/v1/ucp/identity/scopes');\n },\n };\n }\n}\n"]}
|