@keystrokehq/platform 0.1.116 → 0.1.118
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/{awk2-LA3USKJP-B6uw2Bt6.cjs → awk2-LA3USKJP-C544FFGP.cjs} +2 -2
- package/dist/{awk2-LA3USKJP-B6uw2Bt6.cjs.map → awk2-LA3USKJP-C544FFGP.cjs.map} +1 -1
- package/dist/{awk2-LA3USKJP-cJ-Z6J9j.mjs → awk2-LA3USKJP-OaTNLGfL.mjs} +2 -2
- package/dist/{awk2-LA3USKJP-cJ-Z6J9j.mjs.map → awk2-LA3USKJP-OaTNLGfL.mjs.map} +1 -1
- package/dist/{base64-C2AIWVNC-DYCurUAR.cjs → base64-C2AIWVNC-BnyRxaRd.cjs} +2 -2
- package/dist/{base64-C2AIWVNC-DYCurUAR.cjs.map → base64-C2AIWVNC-BnyRxaRd.cjs.map} +1 -1
- package/dist/{base64-C2AIWVNC-Cs404cyq.mjs → base64-C2AIWVNC-DcAp1c2p.mjs} +2 -2
- package/dist/{base64-C2AIWVNC-Cs404cyq.mjs.map → base64-C2AIWVNC-DcAp1c2p.mjs.map} +1 -1
- package/dist/{bash-YZ33HQZQ-C0VzjZ-L.cjs → bash-YZ33HQZQ-BRMsK3RY.cjs} +2 -2
- package/dist/{bash-YZ33HQZQ-C0VzjZ-L.cjs.map → bash-YZ33HQZQ-BRMsK3RY.cjs.map} +1 -1
- package/dist/{bash-YZ33HQZQ-WlueOlNq.mjs → bash-YZ33HQZQ-DukphZlQ.mjs} +2 -2
- package/dist/{bash-YZ33HQZQ-WlueOlNq.mjs.map → bash-YZ33HQZQ-DukphZlQ.mjs.map} +1 -1
- package/dist/{cat-TSFMZVYS-CkwNl54c.mjs → cat-TSFMZVYS-B9ZweZ0g.mjs} +3 -3
- package/dist/{cat-TSFMZVYS-CkwNl54c.mjs.map → cat-TSFMZVYS-B9ZweZ0g.mjs.map} +1 -1
- package/dist/{cat-TSFMZVYS-mZAwc0jT.cjs → cat-TSFMZVYS-KZgn9B7l.cjs} +3 -3
- package/dist/{cat-TSFMZVYS-mZAwc0jT.cjs.map → cat-TSFMZVYS-KZgn9B7l.cjs.map} +1 -1
- package/dist/{chunk-5H5SCKJM-CO858h-N.mjs → chunk-5H5SCKJM-BaQNy7Uj.mjs} +2 -2
- package/dist/{chunk-5H5SCKJM-CO858h-N.mjs.map → chunk-5H5SCKJM-BaQNy7Uj.mjs.map} +1 -1
- package/dist/{chunk-5H5SCKJM-DK56WXdS.cjs → chunk-5H5SCKJM-DjtB3NAz.cjs} +2 -2
- package/dist/{chunk-5H5SCKJM-DK56WXdS.cjs.map → chunk-5H5SCKJM-DjtB3NAz.cjs.map} +1 -1
- package/dist/{chunk-AQ6FYS2X-B-tU21b6.mjs → chunk-AQ6FYS2X-CXdwzuuw.mjs} +2 -2
- package/dist/{chunk-AQ6FYS2X-B-tU21b6.mjs.map → chunk-AQ6FYS2X-CXdwzuuw.mjs.map} +1 -1
- package/dist/{chunk-AQ6FYS2X-Bs7siMd-.cjs → chunk-AQ6FYS2X-CsoGKQ2j.cjs} +2 -2
- package/dist/{chunk-AQ6FYS2X-Bs7siMd-.cjs.map → chunk-AQ6FYS2X-CsoGKQ2j.cjs.map} +1 -1
- package/dist/{chunk-CHFEPBH4-u97K-hHE.cjs → chunk-CHFEPBH4-B7SK6y0J.cjs} +2 -2
- package/dist/{chunk-CHFEPBH4-u97K-hHE.cjs.map → chunk-CHFEPBH4-B7SK6y0J.cjs.map} +1 -1
- package/dist/{chunk-CHFEPBH4-B1dGi1Rp.mjs → chunk-CHFEPBH4-DWsPJ6bE.mjs} +2 -2
- package/dist/{chunk-CHFEPBH4-B1dGi1Rp.mjs.map → chunk-CHFEPBH4-DWsPJ6bE.mjs.map} +1 -1
- package/dist/{chunk-EBAPSGAO-bvBL5lI0.mjs → chunk-EBAPSGAO-Bo2g3Ra0.mjs} +2 -2
- package/dist/{chunk-EBAPSGAO-bvBL5lI0.mjs.map → chunk-EBAPSGAO-Bo2g3Ra0.mjs.map} +1 -1
- package/dist/{chunk-EBAPSGAO-DM-EDh0Q.cjs → chunk-EBAPSGAO-DxcD_wN0.cjs} +2 -2
- package/dist/{chunk-EBAPSGAO-DM-EDh0Q.cjs.map → chunk-EBAPSGAO-DxcD_wN0.cjs.map} +1 -1
- package/dist/{chunk-LEKBROJD-CFeNqItx.mjs → chunk-LEKBROJD-CKOwe9-J.mjs} +2 -2
- package/dist/{chunk-LEKBROJD-CFeNqItx.mjs.map → chunk-LEKBROJD-CKOwe9-J.mjs.map} +1 -1
- package/dist/{chunk-LEKBROJD-BxQr5osL.cjs → chunk-LEKBROJD-lSH8qRL-.cjs} +2 -2
- package/dist/{chunk-LEKBROJD-BxQr5osL.cjs.map → chunk-LEKBROJD-lSH8qRL-.cjs.map} +1 -1
- package/dist/{chunk-VPADYNBD-DMP8a1Df.cjs → chunk-VPADYNBD-Cjfz5Alm.cjs} +2 -2
- package/dist/{chunk-VPADYNBD-DMP8a1Df.cjs.map → chunk-VPADYNBD-Cjfz5Alm.cjs.map} +1 -1
- package/dist/{chunk-VPADYNBD-BEjilLRl.mjs → chunk-VPADYNBD-D106m_2F.mjs} +2 -2
- package/dist/{chunk-VPADYNBD-BEjilLRl.mjs.map → chunk-VPADYNBD-D106m_2F.mjs.map} +1 -1
- package/dist/{chunk-YCLFEX4T-CWA_wK0s.cjs → chunk-YCLFEX4T-BKdilKg9.cjs} +2 -2
- package/dist/{chunk-YCLFEX4T-CWA_wK0s.cjs.map → chunk-YCLFEX4T-BKdilKg9.cjs.map} +1 -1
- package/dist/{chunk-YCLFEX4T-DmvjyT00.mjs → chunk-YCLFEX4T-BNcQm2wg.mjs} +2 -2
- package/dist/{chunk-YCLFEX4T-DmvjyT00.mjs.map → chunk-YCLFEX4T-BNcQm2wg.mjs.map} +1 -1
- package/dist/{column-XT6UFXNQ-Dt98eUoT.cjs → column-XT6UFXNQ-BE9ZFChf.cjs} +2 -2
- package/dist/{column-XT6UFXNQ-Dt98eUoT.cjs.map → column-XT6UFXNQ-BE9ZFChf.cjs.map} +1 -1
- package/dist/{column-XT6UFXNQ-D6Fbpwt1.mjs → column-XT6UFXNQ-Cv-T7URw.mjs} +2 -2
- package/dist/{column-XT6UFXNQ-D6Fbpwt1.mjs.map → column-XT6UFXNQ-Cv-T7URw.mjs.map} +1 -1
- package/dist/{comm-VV2LDX2J-CiGWgPMT.mjs → comm-VV2LDX2J-CwlEnHpG.mjs} +2 -2
- package/dist/{comm-VV2LDX2J-CiGWgPMT.mjs.map → comm-VV2LDX2J-CwlEnHpG.mjs.map} +1 -1
- package/dist/{comm-VV2LDX2J-BgLYoDm3.cjs → comm-VV2LDX2J-DToPWFK0.cjs} +2 -2
- package/dist/{comm-VV2LDX2J-BgLYoDm3.cjs.map → comm-VV2LDX2J-DToPWFK0.cjs.map} +1 -1
- package/dist/config.cjs +2 -2
- package/dist/config.mjs +2 -2
- package/dist/{cp-BISAAS7A-CvK9sTBw.mjs → cp-BISAAS7A-Baa7jHjq.mjs} +2 -2
- package/dist/{cp-BISAAS7A-CvK9sTBw.mjs.map → cp-BISAAS7A-Baa7jHjq.mjs.map} +1 -1
- package/dist/{cp-BISAAS7A-tr7byIHy.cjs → cp-BISAAS7A-CkmJTroD.cjs} +2 -2
- package/dist/{cp-BISAAS7A-tr7byIHy.cjs.map → cp-BISAAS7A-CkmJTroD.cjs.map} +1 -1
- package/dist/{cut-OKARJCCV-5SkYB3UW.mjs → cut-OKARJCCV-BB4GpDEw.mjs} +3 -3
- package/dist/{cut-OKARJCCV-5SkYB3UW.mjs.map → cut-OKARJCCV-BB4GpDEw.mjs.map} +1 -1
- package/dist/{cut-OKARJCCV-CkKFeEW0.cjs → cut-OKARJCCV-LjiQbogw.cjs} +3 -3
- package/dist/{cut-OKARJCCV-CkKFeEW0.cjs.map → cut-OKARJCCV-LjiQbogw.cjs.map} +1 -1
- package/dist/{diff-MWJFIG7X-D8BfV9CZ.cjs → diff-MWJFIG7X-4T0AtZb6.cjs} +2 -2
- package/dist/{diff-MWJFIG7X-D8BfV9CZ.cjs.map → diff-MWJFIG7X-4T0AtZb6.cjs.map} +1 -1
- package/dist/{diff-MWJFIG7X-FpRPeBBI.mjs → diff-MWJFIG7X-CoLpB5r8.mjs} +2 -2
- package/dist/{diff-MWJFIG7X-FpRPeBBI.mjs.map → diff-MWJFIG7X-CoLpB5r8.mjs.map} +1 -1
- package/dist/{dist-mntRulD_.cjs → dist-1gAqMJCK.cjs} +19 -7
- package/dist/dist-1gAqMJCK.cjs.map +1 -0
- package/dist/{dist-06B__3tk.mjs → dist-B2lPLfrR.mjs} +455 -164
- package/dist/dist-B2lPLfrR.mjs.map +1 -0
- package/dist/{dist-Da9lzYN7.mjs → dist-BBJhHiW3.mjs} +19 -7
- package/dist/dist-BBJhHiW3.mjs.map +1 -0
- package/dist/{dist-CyAg630h.cjs → dist-ZPZwDr3w.cjs} +459 -162
- package/dist/dist-ZPZwDr3w.cjs.map +1 -0
- package/dist/{du-572XNP42-CHAO-EDI.mjs → du-572XNP42-B4W75agS.mjs} +2 -2
- package/dist/{du-572XNP42-CHAO-EDI.mjs.map → du-572XNP42-B4W75agS.mjs.map} +1 -1
- package/dist/{du-572XNP42-Bd6_2Wf2.cjs → du-572XNP42-Bu2lK3XF.cjs} +2 -2
- package/dist/{du-572XNP42-Bd6_2Wf2.cjs.map → du-572XNP42-Bu2lK3XF.cjs.map} +1 -1
- package/dist/{env-36M5BO7M-Cz62ZfWq.cjs → env-36M5BO7M-Buj1j2Ha.cjs} +2 -2
- package/dist/{env-36M5BO7M-Cz62ZfWq.cjs.map → env-36M5BO7M-Buj1j2Ha.cjs.map} +1 -1
- package/dist/{env-36M5BO7M-C9VWir-k.mjs → env-36M5BO7M-CzYSWBAm.mjs} +2 -2
- package/dist/{env-36M5BO7M-C9VWir-k.mjs.map → env-36M5BO7M-CzYSWBAm.mjs.map} +1 -1
- package/dist/{expand-JSPG6VOP-CEgbfGV6.mjs → expand-JSPG6VOP-B3OiXvMy.mjs} +2 -2
- package/dist/{expand-JSPG6VOP-CEgbfGV6.mjs.map → expand-JSPG6VOP-B3OiXvMy.mjs.map} +1 -1
- package/dist/{expand-JSPG6VOP-mLdVVa0I.cjs → expand-JSPG6VOP-Ydh9BD2_.cjs} +2 -2
- package/dist/{expand-JSPG6VOP-mLdVVa0I.cjs.map → expand-JSPG6VOP-Ydh9BD2_.cjs.map} +1 -1
- package/dist/{expr-5JAACS4X-KKuazyxt.mjs → expr-5JAACS4X-C4pTNZ3u.mjs} +2 -2
- package/dist/{expr-5JAACS4X-KKuazyxt.mjs.map → expr-5JAACS4X-C4pTNZ3u.mjs.map} +1 -1
- package/dist/{expr-5JAACS4X-Djnbsszh.cjs → expr-5JAACS4X-DhFIFxWY.cjs} +2 -2
- package/dist/{expr-5JAACS4X-Djnbsszh.cjs.map → expr-5JAACS4X-DhFIFxWY.cjs.map} +1 -1
- package/dist/{find-INTH3OLC-RdP-hsVF.mjs → find-INTH3OLC-BXgosBN-.mjs} +3 -3
- package/dist/{find-INTH3OLC-RdP-hsVF.mjs.map → find-INTH3OLC-BXgosBN-.mjs.map} +1 -1
- package/dist/{find-INTH3OLC-B0B0iGkl.cjs → find-INTH3OLC-CgGC1SmT.cjs} +3 -3
- package/dist/{find-INTH3OLC-B0B0iGkl.cjs.map → find-INTH3OLC-CgGC1SmT.cjs.map} +1 -1
- package/dist/{fold-4TQNYMSW-ytylbYbP.cjs → fold-4TQNYMSW-D9mL8Sn3.cjs} +2 -2
- package/dist/{fold-4TQNYMSW-ytylbYbP.cjs.map → fold-4TQNYMSW-D9mL8Sn3.cjs.map} +1 -1
- package/dist/{fold-4TQNYMSW-D_qTDJiB.mjs → fold-4TQNYMSW-DMdiKJ06.mjs} +2 -2
- package/dist/{fold-4TQNYMSW-D_qTDJiB.mjs.map → fold-4TQNYMSW-DMdiKJ06.mjs.map} +1 -1
- package/dist/{grep-V3LQVMRQ-DwK2lHc5.mjs → grep-V3LQVMRQ-BKB3zi73.mjs} +4 -4
- package/dist/{grep-V3LQVMRQ-DwK2lHc5.mjs.map → grep-V3LQVMRQ-BKB3zi73.mjs.map} +1 -1
- package/dist/{grep-V3LQVMRQ-BBKdYjFL.cjs → grep-V3LQVMRQ-DdECgTsM.cjs} +4 -4
- package/dist/{grep-V3LQVMRQ-BBKdYjFL.cjs.map → grep-V3LQVMRQ-DdECgTsM.cjs.map} +1 -1
- package/dist/{gzip-O5ASJAFY--t4Ce_9v.cjs → gzip-O5ASJAFY-DXYfhNMl.cjs} +2 -2
- package/dist/{gzip-O5ASJAFY--t4Ce_9v.cjs.map → gzip-O5ASJAFY-DXYfhNMl.cjs.map} +1 -1
- package/dist/{gzip-O5ASJAFY-CeiWqkFz.mjs → gzip-O5ASJAFY-qGwUq87o.mjs} +2 -2
- package/dist/{gzip-O5ASJAFY-CeiWqkFz.mjs.map → gzip-O5ASJAFY-qGwUq87o.mjs.map} +1 -1
- package/dist/{head-442HYESI-DtllcF1s.mjs → head-442HYESI-C6Z7-vE9.mjs} +2 -2
- package/dist/{head-442HYESI-DtllcF1s.mjs.map → head-442HYESI-C6Z7-vE9.mjs.map} +1 -1
- package/dist/{head-442HYESI-DQCuZDHN.cjs → head-442HYESI-j5KhFbpE.cjs} +2 -2
- package/dist/{head-442HYESI-DQCuZDHN.cjs.map → head-442HYESI-j5KhFbpE.cjs.map} +1 -1
- package/dist/{help-HZ6M2CKN-B_6MZaoj.cjs → help-HZ6M2CKN-C8nI-RQW.cjs} +2 -2
- package/dist/{help-HZ6M2CKN-B_6MZaoj.cjs.map → help-HZ6M2CKN-C8nI-RQW.cjs.map} +1 -1
- package/dist/{help-HZ6M2CKN-C9cpA_J5.mjs → help-HZ6M2CKN-CZ6qTcLB.mjs} +2 -2
- package/dist/{help-HZ6M2CKN-C9cpA_J5.mjs.map → help-HZ6M2CKN-CZ6qTcLB.mjs.map} +1 -1
- package/dist/{html-to-markdown-JW4MSQZO-DqeKb1nJ.mjs → html-to-markdown-JW4MSQZO-DUhiVkMF.mjs} +3 -3
- package/dist/{html-to-markdown-JW4MSQZO-DqeKb1nJ.mjs.map → html-to-markdown-JW4MSQZO-DUhiVkMF.mjs.map} +1 -1
- package/dist/{html-to-markdown-JW4MSQZO-DswlYeG4.cjs → html-to-markdown-JW4MSQZO-g6j8npLf.cjs} +3 -3
- package/dist/{html-to-markdown-JW4MSQZO-DswlYeG4.cjs.map → html-to-markdown-JW4MSQZO-g6j8npLf.cjs.map} +1 -1
- package/dist/internal.cjs +1 -1
- package/dist/internal.mjs +1 -1
- package/dist/{join-TBRGI3LQ-CMRDiRTo.cjs → join-TBRGI3LQ-CbBwIms1.cjs} +2 -2
- package/dist/{join-TBRGI3LQ-CMRDiRTo.cjs.map → join-TBRGI3LQ-CbBwIms1.cjs.map} +1 -1
- package/dist/{join-TBRGI3LQ-B30ZmR0Q.mjs → join-TBRGI3LQ-CytgtxxD.mjs} +2 -2
- package/dist/{join-TBRGI3LQ-B30ZmR0Q.mjs.map → join-TBRGI3LQ-CytgtxxD.mjs.map} +1 -1
- package/dist/{jq-4XLYLOS5-DQ6iLRD3.mjs → jq-4XLYLOS5-BhbSj1D9.mjs} +4 -4
- package/dist/{jq-4XLYLOS5-DQ6iLRD3.mjs.map → jq-4XLYLOS5-BhbSj1D9.mjs.map} +1 -1
- package/dist/{jq-4XLYLOS5-ooK5g6Fs.cjs → jq-4XLYLOS5-C90BkvNt.cjs} +4 -4
- package/dist/{jq-4XLYLOS5-ooK5g6Fs.cjs.map → jq-4XLYLOS5-C90BkvNt.cjs.map} +1 -1
- package/dist/{js-exec-N5KEZBH7-CjOi5GO8.mjs → js-exec-N5KEZBH7-B2gt37yR.mjs} +3 -3
- package/dist/{js-exec-N5KEZBH7-CjOi5GO8.mjs.map → js-exec-N5KEZBH7-B2gt37yR.mjs.map} +1 -1
- package/dist/{js-exec-N5KEZBH7-XVj9n9p1.cjs → js-exec-N5KEZBH7-Mu2CT-LK.cjs} +3 -3
- package/dist/{js-exec-N5KEZBH7-XVj9n9p1.cjs.map → js-exec-N5KEZBH7-Mu2CT-LK.cjs.map} +1 -1
- package/dist/{lib-CA1jBj20.cjs → lib-B8audCXM.cjs} +2 -2
- package/dist/{lib-CA1jBj20.cjs.map → lib-B8audCXM.cjs.map} +1 -1
- package/dist/{lib-C7W1TYft.mjs → lib-r4uXvKzY.mjs} +2 -2
- package/dist/{lib-C7W1TYft.mjs.map → lib-r4uXvKzY.mjs.map} +1 -1
- package/dist/{ln-4LGSXXGD-BE8ne5S9.cjs → ln-4LGSXXGD-BwI1Ba1v.cjs} +2 -2
- package/dist/{ln-4LGSXXGD-BE8ne5S9.cjs.map → ln-4LGSXXGD-BwI1Ba1v.cjs.map} +1 -1
- package/dist/{ln-4LGSXXGD-BjPc8rbU.mjs → ln-4LGSXXGD-DK1HQ-Z7.mjs} +2 -2
- package/dist/{ln-4LGSXXGD-BjPc8rbU.mjs.map → ln-4LGSXXGD-DK1HQ-Z7.mjs.map} +1 -1
- package/dist/{ls-ZJGQER7M-Bg2jOL21.cjs → ls-ZJGQER7M-BH8enpfY.cjs} +2 -2
- package/dist/{ls-ZJGQER7M-Bg2jOL21.cjs.map → ls-ZJGQER7M-BH8enpfY.cjs.map} +1 -1
- package/dist/{ls-ZJGQER7M-BeFruBgl.mjs → ls-ZJGQER7M-CDvVLwGN.mjs} +2 -2
- package/dist/{ls-ZJGQER7M-BeFruBgl.mjs.map → ls-ZJGQER7M-CDvVLwGN.mjs.map} +1 -1
- package/dist/{lzma-lNLOHHZi.cjs → lzma-DRcwNt3i.cjs} +2 -2
- package/dist/{lzma-lNLOHHZi.cjs.map → lzma-DRcwNt3i.cjs.map} +1 -1
- package/dist/{md5sum-SPU24VSG-AYgghvvm.mjs → md5sum-SPU24VSG-10wb8jSM.mjs} +3 -3
- package/dist/{md5sum-SPU24VSG-AYgghvvm.mjs.map → md5sum-SPU24VSG-10wb8jSM.mjs.map} +1 -1
- package/dist/{md5sum-SPU24VSG-BIlD5qo9.cjs → md5sum-SPU24VSG-e7geuGSr.cjs} +3 -3
- package/dist/{md5sum-SPU24VSG-BIlD5qo9.cjs.map → md5sum-SPU24VSG-e7geuGSr.cjs.map} +1 -1
- package/dist/{mkdir-MEPGZOB6-DykmapJj.cjs → mkdir-MEPGZOB6-DHvBslz2.cjs} +2 -2
- package/dist/{mkdir-MEPGZOB6-DykmapJj.cjs.map → mkdir-MEPGZOB6-DHvBslz2.cjs.map} +1 -1
- package/dist/{mkdir-MEPGZOB6-H0tBQtjo.mjs → mkdir-MEPGZOB6-KgCHTAGt.mjs} +2 -2
- package/dist/{mkdir-MEPGZOB6-H0tBQtjo.mjs.map → mkdir-MEPGZOB6-KgCHTAGt.mjs.map} +1 -1
- package/dist/{mv-W5BIQ646-BXi-ExY0.cjs → mv-W5BIQ646-BvUigdVa.cjs} +2 -2
- package/dist/{mv-W5BIQ646-BXi-ExY0.cjs.map → mv-W5BIQ646-BvUigdVa.cjs.map} +1 -1
- package/dist/{mv-W5BIQ646-BbhqKmzw.mjs → mv-W5BIQ646-m6KvTj2j.mjs} +2 -2
- package/dist/{mv-W5BIQ646-BbhqKmzw.mjs.map → mv-W5BIQ646-m6KvTj2j.mjs.map} +1 -1
- package/dist/{nl-WSDW7I4O-wPl2Yq0Y.cjs → nl-WSDW7I4O-BHCgsxiV.cjs} +2 -2
- package/dist/{nl-WSDW7I4O-wPl2Yq0Y.cjs.map → nl-WSDW7I4O-BHCgsxiV.cjs.map} +1 -1
- package/dist/{nl-WSDW7I4O-CNnDTT1z.mjs → nl-WSDW7I4O-BOU_uI5i.mjs} +2 -2
- package/dist/{nl-WSDW7I4O-CNnDTT1z.mjs.map → nl-WSDW7I4O-BOU_uI5i.mjs.map} +1 -1
- package/dist/{od-WOKFDJTP-C4-ghkBs.cjs → od-WOKFDJTP-CsiFbtX8.cjs} +2 -2
- package/dist/{od-WOKFDJTP-C4-ghkBs.cjs.map → od-WOKFDJTP-CsiFbtX8.cjs.map} +1 -1
- package/dist/{od-WOKFDJTP-D5s8wG2y.mjs → od-WOKFDJTP-D9CDg_0N.mjs} +2 -2
- package/dist/{od-WOKFDJTP-D5s8wG2y.mjs.map → od-WOKFDJTP-D9CDg_0N.mjs.map} +1 -1
- package/dist/{paste-7JC6S4DX-o6U9XjU7.mjs → paste-7JC6S4DX-BPZM8va6.mjs} +2 -2
- package/dist/{paste-7JC6S4DX-o6U9XjU7.mjs.map → paste-7JC6S4DX-BPZM8va6.mjs.map} +1 -1
- package/dist/{paste-7JC6S4DX-CJ9_DYYE.cjs → paste-7JC6S4DX-DOfui9Os.cjs} +2 -2
- package/dist/{paste-7JC6S4DX-CJ9_DYYE.cjs.map → paste-7JC6S4DX-DOfui9Os.cjs.map} +1 -1
- package/dist/{printf-TWGXF445-28RqQWhG.mjs → printf-TWGXF445-BFtTTFUx.mjs} +3 -3
- package/dist/{printf-TWGXF445-28RqQWhG.mjs.map → printf-TWGXF445-BFtTTFUx.mjs.map} +1 -1
- package/dist/{printf-TWGXF445-CHj81GwC.cjs → printf-TWGXF445-CxEPw_qf.cjs} +3 -3
- package/dist/{printf-TWGXF445-CHj81GwC.cjs.map → printf-TWGXF445-CxEPw_qf.cjs.map} +1 -1
- package/dist/{python3-POMOR4OA-y8l5MsiF.mjs → python3-POMOR4OA-BrPhKjye.mjs} +3 -3
- package/dist/{python3-POMOR4OA-y8l5MsiF.mjs.map → python3-POMOR4OA-BrPhKjye.mjs.map} +1 -1
- package/dist/{python3-POMOR4OA-CgFXvSVe.cjs → python3-POMOR4OA-C4csB3z_.cjs} +3 -3
- package/dist/{python3-POMOR4OA-CgFXvSVe.cjs.map → python3-POMOR4OA-C4csB3z_.cjs.map} +1 -1
- package/dist/{rev-5EHFX4EJ-DGFN700v.cjs → rev-5EHFX4EJ-BDPraoKf.cjs} +2 -2
- package/dist/{rev-5EHFX4EJ-DGFN700v.cjs.map → rev-5EHFX4EJ-BDPraoKf.cjs.map} +1 -1
- package/dist/{rev-5EHFX4EJ-DwXsQgcN.mjs → rev-5EHFX4EJ-DT84cm7e.mjs} +2 -2
- package/dist/{rev-5EHFX4EJ-DwXsQgcN.mjs.map → rev-5EHFX4EJ-DT84cm7e.mjs.map} +1 -1
- package/dist/{rg-S4FXYXWB-UN8eCHqJ.cjs → rg-S4FXYXWB-BOtIPQjO.cjs} +3 -3
- package/dist/{rg-S4FXYXWB-UN8eCHqJ.cjs.map → rg-S4FXYXWB-BOtIPQjO.cjs.map} +1 -1
- package/dist/{rg-S4FXYXWB-D81ZWHI9.mjs → rg-S4FXYXWB-DvLBW3FF.mjs} +3 -3
- package/dist/{rg-S4FXYXWB-D81ZWHI9.mjs.map → rg-S4FXYXWB-DvLBW3FF.mjs.map} +1 -1
- package/dist/{rm-SSGETQVQ-Dqrc3jE1.mjs → rm-SSGETQVQ-CSmxrWHU.mjs} +2 -2
- package/dist/{rm-SSGETQVQ-Dqrc3jE1.mjs.map → rm-SSGETQVQ-CSmxrWHU.mjs.map} +1 -1
- package/dist/{rm-SSGETQVQ-Cl2LnNzO.cjs → rm-SSGETQVQ-mSI8N9e1.cjs} +2 -2
- package/dist/{rm-SSGETQVQ-Cl2LnNzO.cjs.map → rm-SSGETQVQ-mSI8N9e1.cjs.map} +1 -1
- package/dist/{rmdir-OC4ZLPYA-CEJSJ6A1.mjs → rmdir-OC4ZLPYA-DBRCWWxY.mjs} +2 -2
- package/dist/{rmdir-OC4ZLPYA-CEJSJ6A1.mjs.map → rmdir-OC4ZLPYA-DBRCWWxY.mjs.map} +1 -1
- package/dist/{rmdir-OC4ZLPYA-BG3p2vpE.cjs → rmdir-OC4ZLPYA-KewwQ5OQ.cjs} +2 -2
- package/dist/{rmdir-OC4ZLPYA-BG3p2vpE.cjs.map → rmdir-OC4ZLPYA-KewwQ5OQ.cjs.map} +1 -1
- package/dist/run.cjs +1 -1
- package/dist/run.mjs +1 -1
- package/dist/{sed-S5UIK574-Chy3VxE9.mjs → sed-S5UIK574-BPN7JI6S.mjs} +2 -2
- package/dist/{sed-S5UIK574-Chy3VxE9.mjs.map → sed-S5UIK574-BPN7JI6S.mjs.map} +1 -1
- package/dist/{sed-S5UIK574-1h3qcNsZ.cjs → sed-S5UIK574-D2fQ08wE.cjs} +2 -2
- package/dist/{sed-S5UIK574-1h3qcNsZ.cjs.map → sed-S5UIK574-D2fQ08wE.cjs.map} +1 -1
- package/dist/{sha1sum-2PTOAFR6-B8LW6P2v.cjs → sha1sum-2PTOAFR6-CUzO9jAy.cjs} +3 -3
- package/dist/{sha1sum-2PTOAFR6-B8LW6P2v.cjs.map → sha1sum-2PTOAFR6-CUzO9jAy.cjs.map} +1 -1
- package/dist/{sha1sum-2PTOAFR6-DKC60eG9.mjs → sha1sum-2PTOAFR6-CaclrBG7.mjs} +3 -3
- package/dist/{sha1sum-2PTOAFR6-DKC60eG9.mjs.map → sha1sum-2PTOAFR6-CaclrBG7.mjs.map} +1 -1
- package/dist/{sha256sum-NS7D3IXX-CFLb9_WC.cjs → sha256sum-NS7D3IXX-CyjoG_Fo.cjs} +3 -3
- package/dist/{sha256sum-NS7D3IXX-CFLb9_WC.cjs.map → sha256sum-NS7D3IXX-CyjoG_Fo.cjs.map} +1 -1
- package/dist/{sha256sum-NS7D3IXX-Db_9vDzm.mjs → sha256sum-NS7D3IXX-Dirjqo9R.mjs} +3 -3
- package/dist/{sha256sum-NS7D3IXX-Db_9vDzm.mjs.map → sha256sum-NS7D3IXX-Dirjqo9R.mjs.map} +1 -1
- package/dist/{sleep-X22JJINO-CQbA47u6.cjs → sleep-X22JJINO-BmN15X75.cjs} +2 -2
- package/dist/{sleep-X22JJINO-CQbA47u6.cjs.map → sleep-X22JJINO-BmN15X75.cjs.map} +1 -1
- package/dist/{sleep-X22JJINO-CczkV6Jp.mjs → sleep-X22JJINO-C85vW9bl.mjs} +2 -2
- package/dist/{sleep-X22JJINO-CczkV6Jp.mjs.map → sleep-X22JJINO-C85vW9bl.mjs.map} +1 -1
- package/dist/{sort-SW2YEO5B-DtBL2mtr.cjs → sort-SW2YEO5B-BXo_cCn8.cjs} +3 -3
- package/dist/{sort-SW2YEO5B-DtBL2mtr.cjs.map → sort-SW2YEO5B-BXo_cCn8.cjs.map} +1 -1
- package/dist/{sort-SW2YEO5B-BixT2IGq.mjs → sort-SW2YEO5B-OWnbfe9g.mjs} +3 -3
- package/dist/{sort-SW2YEO5B-BixT2IGq.mjs.map → sort-SW2YEO5B-OWnbfe9g.mjs.map} +1 -1
- package/dist/{split-4KKZZXXE-XdGKmEtG.cjs → split-4KKZZXXE-BRZ9Onc5.cjs} +2 -2
- package/dist/{split-4KKZZXXE-XdGKmEtG.cjs.map → split-4KKZZXXE-BRZ9Onc5.cjs.map} +1 -1
- package/dist/{split-4KKZZXXE-D5nTYjy5.mjs → split-4KKZZXXE-Do1z2dE5.mjs} +2 -2
- package/dist/{split-4KKZZXXE-D5nTYjy5.mjs.map → split-4KKZZXXE-Do1z2dE5.mjs.map} +1 -1
- package/dist/{sqlite3-CGOEFJAO-C-uTzpm4.cjs → sqlite3-CGOEFJAO-B6nuurF0.cjs} +3 -3
- package/dist/{sqlite3-CGOEFJAO-C-uTzpm4.cjs.map → sqlite3-CGOEFJAO-B6nuurF0.cjs.map} +1 -1
- package/dist/{sqlite3-CGOEFJAO-DJBV9PV_.mjs → sqlite3-CGOEFJAO-DrBY4xSR.mjs} +3 -3
- package/dist/{sqlite3-CGOEFJAO-DJBV9PV_.mjs.map → sqlite3-CGOEFJAO-DrBY4xSR.mjs.map} +1 -1
- package/dist/{start-xlynNay5.cjs → start-ClWb87N-.cjs} +226 -115
- package/dist/start-ClWb87N-.cjs.map +1 -0
- package/dist/{start-B8JPSU7i.mjs → start-zbLIFKlv.mjs} +226 -115
- package/dist/start-zbLIFKlv.mjs.map +1 -0
- package/dist/start.cjs +1 -1
- package/dist/start.mjs +1 -1
- package/dist/{strings-6WDHLGMX-XF_GU89U.cjs → strings-6WDHLGMX-Cja4C0R3.cjs} +2 -2
- package/dist/{strings-6WDHLGMX-XF_GU89U.cjs.map → strings-6WDHLGMX-Cja4C0R3.cjs.map} +1 -1
- package/dist/{strings-6WDHLGMX-V2dSbxzd.mjs → strings-6WDHLGMX-DPcD3lVo.mjs} +2 -2
- package/dist/{strings-6WDHLGMX-V2dSbxzd.mjs.map → strings-6WDHLGMX-DPcD3lVo.mjs.map} +1 -1
- package/dist/{tac-2STMMJYW-BqghTfkz.mjs → tac-2STMMJYW-Bap8fjvo.mjs} +2 -2
- package/dist/{tac-2STMMJYW-BqghTfkz.mjs.map → tac-2STMMJYW-Bap8fjvo.mjs.map} +1 -1
- package/dist/{tac-2STMMJYW-G1amMMPZ.cjs → tac-2STMMJYW-hqV9IWjO.cjs} +2 -2
- package/dist/{tac-2STMMJYW-G1amMMPZ.cjs.map → tac-2STMMJYW-hqV9IWjO.cjs.map} +1 -1
- package/dist/{tail-R4PCA2C4-c0nW2CyO.mjs → tail-R4PCA2C4-D8gTAJv4.mjs} +2 -2
- package/dist/{tail-R4PCA2C4-c0nW2CyO.mjs.map → tail-R4PCA2C4-D8gTAJv4.mjs.map} +1 -1
- package/dist/{tail-R4PCA2C4-CvCjQ05N.cjs → tail-R4PCA2C4-DLYInTSg.cjs} +2 -2
- package/dist/{tail-R4PCA2C4-CvCjQ05N.cjs.map → tail-R4PCA2C4-DLYInTSg.cjs.map} +1 -1
- package/dist/{tar-STHHZTZ6-B96J4oRi.mjs → tar-STHHZTZ6-BvaMjwan.mjs} +4 -4
- package/dist/{tar-STHHZTZ6-B96J4oRi.mjs.map → tar-STHHZTZ6-BvaMjwan.mjs.map} +1 -1
- package/dist/{tar-STHHZTZ6-Dfjz4EC5.cjs → tar-STHHZTZ6-C1coMUN-.cjs} +5 -5
- package/dist/{tar-STHHZTZ6-Dfjz4EC5.cjs.map → tar-STHHZTZ6-C1coMUN-.cjs.map} +1 -1
- package/dist/{tee-YUZ2FKCJ-DuUbDRxw.mjs → tee-YUZ2FKCJ-BeZbMeQg.mjs} +2 -2
- package/dist/{tee-YUZ2FKCJ-DuUbDRxw.mjs.map → tee-YUZ2FKCJ-BeZbMeQg.mjs.map} +1 -1
- package/dist/{tee-YUZ2FKCJ-BwUNKs2X.cjs → tee-YUZ2FKCJ-DZjg1j71.cjs} +2 -2
- package/dist/{tee-YUZ2FKCJ-BwUNKs2X.cjs.map → tee-YUZ2FKCJ-DZjg1j71.cjs.map} +1 -1
- package/dist/{time-D4LNBSWX-BRz7RnVy.mjs → time-D4LNBSWX-CwNJDX9k.mjs} +2 -2
- package/dist/{time-D4LNBSWX-BRz7RnVy.mjs.map → time-D4LNBSWX-CwNJDX9k.mjs.map} +1 -1
- package/dist/{time-D4LNBSWX-CbsvG2z7.cjs → time-D4LNBSWX-D0o9WKnd.cjs} +2 -2
- package/dist/{time-D4LNBSWX-CbsvG2z7.cjs.map → time-D4LNBSWX-D0o9WKnd.cjs.map} +1 -1
- package/dist/{timeout-YDCRSLPQ-C9Veu7n5.mjs → timeout-YDCRSLPQ-BYQu8FB_.mjs} +2 -2
- package/dist/{timeout-YDCRSLPQ-C9Veu7n5.mjs.map → timeout-YDCRSLPQ-BYQu8FB_.mjs.map} +1 -1
- package/dist/{timeout-YDCRSLPQ-CycIyLJm.cjs → timeout-YDCRSLPQ-gCL0dPir.cjs} +2 -2
- package/dist/{timeout-YDCRSLPQ-CycIyLJm.cjs.map → timeout-YDCRSLPQ-gCL0dPir.cjs.map} +1 -1
- package/dist/{touch-UA33VN3N-C7WkFgl9.mjs → touch-UA33VN3N-Clj615aH.mjs} +2 -2
- package/dist/{touch-UA33VN3N-C7WkFgl9.mjs.map → touch-UA33VN3N-Clj615aH.mjs.map} +1 -1
- package/dist/{touch-UA33VN3N-t4veoaI7.cjs → touch-UA33VN3N-W1buBQYM.cjs} +2 -2
- package/dist/{touch-UA33VN3N-t4veoaI7.cjs.map → touch-UA33VN3N-W1buBQYM.cjs.map} +1 -1
- package/dist/{tr-36LHWFRQ-CGja3l0p.mjs → tr-36LHWFRQ-DPz3syv0.mjs} +2 -2
- package/dist/{tr-36LHWFRQ-CGja3l0p.mjs.map → tr-36LHWFRQ-DPz3syv0.mjs.map} +1 -1
- package/dist/{tr-36LHWFRQ-BS0pC6It.cjs → tr-36LHWFRQ-DS2DvRpE.cjs} +2 -2
- package/dist/{tr-36LHWFRQ-BS0pC6It.cjs.map → tr-36LHWFRQ-DS2DvRpE.cjs.map} +1 -1
- package/dist/{tree-YLD52CNT-DSyy-MaG.mjs → tree-YLD52CNT-BbMGKPvW.mjs} +2 -2
- package/dist/{tree-YLD52CNT-DSyy-MaG.mjs.map → tree-YLD52CNT-BbMGKPvW.mjs.map} +1 -1
- package/dist/{tree-YLD52CNT-CtMWTsYT.cjs → tree-YLD52CNT-BoQBXdSr.cjs} +2 -2
- package/dist/{tree-YLD52CNT-CtMWTsYT.cjs.map → tree-YLD52CNT-BoQBXdSr.cjs.map} +1 -1
- package/dist/{unexpand-CADSA4VO-BkAfFBwc.mjs → unexpand-CADSA4VO-C0IRoV5k.mjs} +2 -2
- package/dist/{unexpand-CADSA4VO-BkAfFBwc.mjs.map → unexpand-CADSA4VO-C0IRoV5k.mjs.map} +1 -1
- package/dist/{unexpand-CADSA4VO-BF9r6Hlz.cjs → unexpand-CADSA4VO-DM36-Dne.cjs} +2 -2
- package/dist/{unexpand-CADSA4VO-BF9r6Hlz.cjs.map → unexpand-CADSA4VO-DM36-Dne.cjs.map} +1 -1
- package/dist/{uniq-XSIZR6PB-Bqd4ELx5.mjs → uniq-XSIZR6PB-DTNQOumC.mjs} +3 -3
- package/dist/{uniq-XSIZR6PB-Bqd4ELx5.mjs.map → uniq-XSIZR6PB-DTNQOumC.mjs.map} +1 -1
- package/dist/{uniq-XSIZR6PB-CE3SlFfS.cjs → uniq-XSIZR6PB-cbqtNDFd.cjs} +3 -3
- package/dist/{uniq-XSIZR6PB-CE3SlFfS.cjs.map → uniq-XSIZR6PB-cbqtNDFd.cjs.map} +1 -1
- package/dist/{wc-LF7NU4LA-CYC8jmy9.cjs → wc-LF7NU4LA-CmxEf7a9.cjs} +3 -3
- package/dist/{wc-LF7NU4LA-CYC8jmy9.cjs.map → wc-LF7NU4LA-CmxEf7a9.cjs.map} +1 -1
- package/dist/{wc-LF7NU4LA-CtqoQj3c.mjs → wc-LF7NU4LA-CrZ2_f9J.mjs} +3 -3
- package/dist/{wc-LF7NU4LA-CtqoQj3c.mjs.map → wc-LF7NU4LA-CrZ2_f9J.mjs.map} +1 -1
- package/dist/{with-project-scope-CTrtQy8z.mjs → with-project-scope-5Gfc8263.mjs} +2 -2
- package/dist/{with-project-scope-CTrtQy8z.mjs.map → with-project-scope-5Gfc8263.mjs.map} +1 -1
- package/dist/{with-project-scope-DZDKeaiS.cjs → with-project-scope-Hh6iqeoh.cjs} +2 -2
- package/dist/{with-project-scope-DZDKeaiS.cjs.map → with-project-scope-Hh6iqeoh.cjs.map} +1 -1
- package/dist/{xan-Y6WF3IRG-DWQra2c5.cjs → xan-Y6WF3IRG-CdBO57j3.cjs} +6 -6
- package/dist/{xan-Y6WF3IRG-DWQra2c5.cjs.map → xan-Y6WF3IRG-CdBO57j3.cjs.map} +1 -1
- package/dist/{xan-Y6WF3IRG--gAjwdYb.mjs → xan-Y6WF3IRG-rLQOC4c5.mjs} +6 -6
- package/dist/{xan-Y6WF3IRG--gAjwdYb.mjs.map → xan-Y6WF3IRG-rLQOC4c5.mjs.map} +1 -1
- package/dist/{xan-view-HDVKHFC2-CFde5tqZ.mjs → xan-view-HDVKHFC2-BLteyNnh.mjs} +3 -3
- package/dist/{xan-view-HDVKHFC2-CFde5tqZ.mjs.map → xan-view-HDVKHFC2-BLteyNnh.mjs.map} +1 -1
- package/dist/{xan-view-HDVKHFC2-Pq5GdBxq.cjs → xan-view-HDVKHFC2-CJxt0KHg.cjs} +3 -3
- package/dist/{xan-view-HDVKHFC2-Pq5GdBxq.cjs.map → xan-view-HDVKHFC2-CJxt0KHg.cjs.map} +1 -1
- package/dist/{xargs-MGZPH7AX-CB3V2Mdc.cjs → xargs-MGZPH7AX-BwI33_UH.cjs} +2 -2
- package/dist/{xargs-MGZPH7AX-CB3V2Mdc.cjs.map → xargs-MGZPH7AX-BwI33_UH.cjs.map} +1 -1
- package/dist/{xargs-MGZPH7AX-BkmiflqU.mjs → xargs-MGZPH7AX-zJMHUR_2.mjs} +2 -2
- package/dist/{xargs-MGZPH7AX-BkmiflqU.mjs.map → xargs-MGZPH7AX-zJMHUR_2.mjs.map} +1 -1
- package/dist/{yq-4QJW3EQG-VXsgb_hI.mjs → yq-4QJW3EQG-B_jhRTwa.mjs} +3 -3
- package/dist/{yq-4QJW3EQG-VXsgb_hI.mjs.map → yq-4QJW3EQG-B_jhRTwa.mjs.map} +1 -1
- package/dist/{yq-4QJW3EQG-DErcLiTm.cjs → yq-4QJW3EQG-CpEslf6d.cjs} +3 -3
- package/dist/{yq-4QJW3EQG-DErcLiTm.cjs.map → yq-4QJW3EQG-CpEslf6d.cjs.map} +1 -1
- package/package.json +1 -1
- package/dist/dist-06B__3tk.mjs.map +0 -1
- package/dist/dist-CyAg630h.cjs.map +0 -1
- package/dist/dist-Da9lzYN7.mjs.map +0 -1
- package/dist/dist-mntRulD_.cjs.map +0 -1
- package/dist/start-B8JPSU7i.mjs.map +0 -1
- package/dist/start-xlynNay5.cjs.map +0 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
const require_dist$3 = require("./dist-
|
|
1
|
+
const require_dist$3 = require("./dist-1gAqMJCK.cjs");
|
|
2
2
|
let node_crypto = require("node:crypto");
|
|
3
3
|
let _keystrokehq_database = require("@keystrokehq/database");
|
|
4
4
|
let node_events = require("node:events");
|
|
@@ -10007,12 +10007,13 @@ const AppAuthKindSchema = zod.z.enum([
|
|
|
10007
10007
|
"api_key",
|
|
10008
10008
|
"keystroke"
|
|
10009
10009
|
]);
|
|
10010
|
-
/** Composio auth scheme for API-key style connections. */
|
|
10010
|
+
/** Composio auth scheme for API-key / no-auth style connections. */
|
|
10011
10011
|
const AppCredentialSchemeSchema = zod.z.enum([
|
|
10012
10012
|
"API_KEY",
|
|
10013
10013
|
"BEARER_TOKEN",
|
|
10014
10014
|
"BASIC",
|
|
10015
|
-
"BASIC_WITH_JWT"
|
|
10015
|
+
"BASIC_WITH_JWT",
|
|
10016
|
+
"NO_AUTH"
|
|
10016
10017
|
]);
|
|
10017
10018
|
/**
|
|
10018
10019
|
* Where app metadata and execution are sourced (e.g. native, composio, pipedream, custom).
|
|
@@ -10134,7 +10135,9 @@ const AppCatalogSummarySchema = zod.z.object({
|
|
|
10134
10135
|
/** Endpoint URL for MCP, OpenAPI, or GraphQL custom apps. */
|
|
10135
10136
|
url: zod.z.string().url().nullable().optional(),
|
|
10136
10137
|
/** True when the app has a non-empty credential field template. */
|
|
10137
|
-
hasCredentialFields: zod.z.boolean().optional()
|
|
10138
|
+
hasCredentialFields: zod.z.boolean().optional(),
|
|
10139
|
+
/** Composio auth scheme — present for API-key and NO_AUTH apps so the picker can choose a flow. */
|
|
10140
|
+
credentialScheme: AppCredentialSchemeSchema.optional()
|
|
10138
10141
|
});
|
|
10139
10142
|
/**
|
|
10140
10143
|
* Full connectable integration detail (scopes + credential template). An "app"
|
|
@@ -10144,7 +10147,7 @@ const AppCatalogEntrySchema = AppCatalogSummarySchema.extend({
|
|
|
10144
10147
|
oauthScopes: zod.z.array(OAuthScopeOptionSchema),
|
|
10145
10148
|
/** Custom api_key apps — vault field template for connect UI and sync. */
|
|
10146
10149
|
credentialFields: AppCredentialFieldsSchema.optional(),
|
|
10147
|
-
/** Composio auth scheme
|
|
10150
|
+
/** Composio auth scheme for API-key or NO_AUTH connections. */
|
|
10148
10151
|
credentialScheme: AppCredentialSchemeSchema.optional(),
|
|
10149
10152
|
/** When present, the app supports agent gateway bindings (external channels). */
|
|
10150
10153
|
gateway: AppGatewaySchema.optional()
|
|
@@ -10221,6 +10224,7 @@ function mcpProbeToAppTemplate(probe) {
|
|
|
10221
10224
|
};
|
|
10222
10225
|
return {
|
|
10223
10226
|
authKind: "api_key",
|
|
10227
|
+
credentialScheme: "NO_AUTH",
|
|
10224
10228
|
credentialFields: {},
|
|
10225
10229
|
oauthScopes: [],
|
|
10226
10230
|
url
|
|
@@ -10619,8 +10623,12 @@ const AppCredentialScopeSchema = zod.z.enum([
|
|
|
10619
10623
|
"project",
|
|
10620
10624
|
"organization"
|
|
10621
10625
|
]);
|
|
10622
|
-
/** How the credential was connected (OAuth
|
|
10623
|
-
const AppCredentialConnectionKindSchema = zod.z.enum([
|
|
10626
|
+
/** How the credential was connected (OAuth, manual api-key entry, or no-auth). */
|
|
10627
|
+
const AppCredentialConnectionKindSchema = zod.z.enum([
|
|
10628
|
+
"oauth",
|
|
10629
|
+
"manual",
|
|
10630
|
+
"none"
|
|
10631
|
+
]);
|
|
10624
10632
|
/** Connect-dialog permission preset for OAuth scope selection. */
|
|
10625
10633
|
const OAuthPermissionModeSchema = zod.z.enum(["default", "restricted"]);
|
|
10626
10634
|
const optionalTimestamp$1 = zod.z.string().optional();
|
|
@@ -10717,6 +10725,11 @@ const CreateCredentialsRequestSchema = CredentialTargetsFieldsSchema.extend({
|
|
|
10717
10725
|
message: "OAuth credentials are created via the OAuth callback",
|
|
10718
10726
|
path: ["connectionKind"]
|
|
10719
10727
|
});
|
|
10728
|
+
if (input.connectionKind === "none" && input.value) ctx.addIssue({
|
|
10729
|
+
code: "custom",
|
|
10730
|
+
message: "value is not allowed for no-auth connections",
|
|
10731
|
+
path: ["value"]
|
|
10732
|
+
});
|
|
10720
10733
|
});
|
|
10721
10734
|
/** Request body for `PATCH /api/credentials/:id`. */
|
|
10722
10735
|
const UpdateCredentialRequestSchema = zod.z.object({
|
|
@@ -13175,7 +13188,7 @@ function registerWorkflowRunGetter(fn) {
|
|
|
13175
13188
|
}
|
|
13176
13189
|
new node_async_hooks.AsyncLocalStorage();
|
|
13177
13190
|
//#endregion
|
|
13178
|
-
//#region ../../packages/credentials/dist/store-
|
|
13191
|
+
//#region ../../packages/credentials/dist/store-B7IWQPwD.mjs
|
|
13179
13192
|
function normalizeRow(row) {
|
|
13180
13193
|
const { projectId: _projectId, ...rest } = row;
|
|
13181
13194
|
return rest;
|
|
@@ -24831,21 +24844,29 @@ var StreamableHTTPClientTransport = class {
|
|
|
24831
24844
|
};
|
|
24832
24845
|
//#endregion
|
|
24833
24846
|
//#region ../../packages/mcp/dist/index.mjs
|
|
24834
|
-
|
|
24835
|
-
|
|
24836
|
-
|
|
24837
|
-
|
|
24838
|
-
|
|
24839
|
-
|
|
24840
|
-
|
|
24841
|
-
|
|
24842
|
-
|
|
24843
|
-
|
|
24844
|
-
|
|
24845
|
-
|
|
24846
|
-
|
|
24847
|
-
|
|
24848
|
-
|
|
24847
|
+
function challengeParameter(value, name) {
|
|
24848
|
+
const match = new RegExp(`(?:^|,)\\s*${name}\\s*=\\s*(?:"((?:[^"\\\\]|\\\\.)*)"|([^,\\s]+))`, "i").exec(value);
|
|
24849
|
+
return (match?.[1] ?? match?.[2])?.replace(/\\(["\\])/g, "$1").trim() || void 0;
|
|
24850
|
+
}
|
|
24851
|
+
/** Parse the Bearer challenge even when another authentication scheme appears first. */
|
|
24852
|
+
function parseMcpBearerChallenge(response) {
|
|
24853
|
+
const header = response.headers.get("www-authenticate");
|
|
24854
|
+
if (!header) return {};
|
|
24855
|
+
const bearer = /(?:^|,)\s*Bearer(?:\s+|$)/i.exec(header);
|
|
24856
|
+
if (!bearer) return {};
|
|
24857
|
+
const parameters = header.slice(bearer.index + bearer[0].length);
|
|
24858
|
+
const resourceMetadata = challengeParameter(parameters, "resource_metadata");
|
|
24859
|
+
const scope = challengeParameter(parameters, "scope");
|
|
24860
|
+
const error = challengeParameter(parameters, "error");
|
|
24861
|
+
let resourceMetadataUrl;
|
|
24862
|
+
if (resourceMetadata) try {
|
|
24863
|
+
resourceMetadataUrl = new URL(resourceMetadata);
|
|
24864
|
+
} catch {}
|
|
24865
|
+
return {
|
|
24866
|
+
...resourceMetadataUrl ? { resourceMetadataUrl } : {},
|
|
24867
|
+
...scope ? { scope } : {},
|
|
24868
|
+
...error ? { error } : {}
|
|
24869
|
+
};
|
|
24849
24870
|
}
|
|
24850
24871
|
/** Thrown when a URL is not safe for server-side outbound fetch (SSRF guard). */
|
|
24851
24872
|
var PublicHttpUrlError = class extends Error {
|
|
@@ -24958,6 +24979,7 @@ function createPublicHttpFetch(fetchFn = fetch) {
|
|
|
24958
24979
|
});
|
|
24959
24980
|
};
|
|
24960
24981
|
}
|
|
24982
|
+
const MCP_AUTHORIZATION_PROTOCOL_VERSION = "2025-11-25";
|
|
24961
24983
|
function resourceNameFromMetadata(metadata) {
|
|
24962
24984
|
return metadata?.resource_name?.trim() || void 0;
|
|
24963
24985
|
}
|
|
@@ -24977,6 +24999,74 @@ async function probeUnauthenticatedStatus(url, fetchFn) {
|
|
|
24977
24999
|
return {};
|
|
24978
25000
|
}
|
|
24979
25001
|
}
|
|
25002
|
+
function assertHttps(value, label) {
|
|
25003
|
+
if (new URL(value).protocol !== "https:") throw new Error(`${label} must use HTTPS`);
|
|
25004
|
+
}
|
|
25005
|
+
function assertPublicHttpsUrl(value, label) {
|
|
25006
|
+
assertPublicHttpUrl(value);
|
|
25007
|
+
assertHttps(value, label);
|
|
25008
|
+
}
|
|
25009
|
+
function assertResourceIdentity(serverUrl, resource) {
|
|
25010
|
+
const resourceUrl = new URL(resource);
|
|
25011
|
+
if (serverUrl.hash || resourceUrl.hash || resourceUrl.toString() !== serverUrl.toString()) throw new Error("MCP protected resource does not match the requested MCP server URL");
|
|
25012
|
+
}
|
|
25013
|
+
function validateAuthorizationServerMetadata(authorizationServerUrl, metadata) {
|
|
25014
|
+
if (metadata.issuer !== authorizationServerUrl) throw new Error("MCP authorization server metadata issuer does not match authorization server");
|
|
25015
|
+
if (!metadata.authorization_endpoint || !metadata.token_endpoint) throw new Error("MCP authorization server metadata is missing required endpoints");
|
|
25016
|
+
assertPublicHttpsUrl(metadata.authorization_endpoint, "MCP authorization endpoint");
|
|
25017
|
+
assertPublicHttpsUrl(metadata.token_endpoint, "MCP token endpoint");
|
|
25018
|
+
if (metadata.registration_endpoint) assertPublicHttpsUrl(metadata.registration_endpoint, "MCP registration endpoint");
|
|
25019
|
+
}
|
|
25020
|
+
async function discoverMcpOAuthServerFromProbe(url, safeFetch, initial) {
|
|
25021
|
+
const serverUrl = new URL(url);
|
|
25022
|
+
assertHttps(serverUrl, "MCP server URL");
|
|
25023
|
+
const { status } = initial;
|
|
25024
|
+
const wwwAuthenticate = status === 401 ? initial.wwwAuthenticate : void 0;
|
|
25025
|
+
let resourceMetadataUrl;
|
|
25026
|
+
let challengeScope;
|
|
25027
|
+
if (wwwAuthenticate) {
|
|
25028
|
+
const params = parseMcpBearerChallenge(new Response(null, { headers: { "www-authenticate": wwwAuthenticate } }));
|
|
25029
|
+
resourceMetadataUrl = params.resourceMetadataUrl;
|
|
25030
|
+
challengeScope = params.scope?.trim() || void 0;
|
|
25031
|
+
if (resourceMetadataUrl) {
|
|
25032
|
+
assertPublicHttpUrl(resourceMetadataUrl.toString());
|
|
25033
|
+
assertHttps(resourceMetadataUrl, "MCP resource metadata URL");
|
|
25034
|
+
}
|
|
25035
|
+
}
|
|
25036
|
+
const resourceMetadata = await discoverOAuthProtectedResourceMetadata(serverUrl, {
|
|
25037
|
+
protocolVersion: MCP_AUTHORIZATION_PROTOCOL_VERSION,
|
|
25038
|
+
...resourceMetadataUrl ? { resourceMetadataUrl } : {}
|
|
25039
|
+
}, safeFetch);
|
|
25040
|
+
if (!resourceMetadata.resource) throw new Error("MCP protected resource metadata is missing resource");
|
|
25041
|
+
if (!resourceMetadata.authorization_servers?.length) throw new Error("MCP protected resource metadata is missing authorization_servers");
|
|
25042
|
+
assertResourceIdentity(serverUrl, resourceMetadata.resource);
|
|
25043
|
+
const authorizationServerUrl = resourceMetadata.authorization_servers[0];
|
|
25044
|
+
if (!authorizationServerUrl) throw new Error("MCP protected resource metadata is missing authorization_servers");
|
|
25045
|
+
assertPublicHttpsUrl(authorizationServerUrl, "MCP authorization server URL");
|
|
25046
|
+
const authorizationServerMetadata = await discoverAuthorizationServerMetadata(authorizationServerUrl, {
|
|
25047
|
+
fetchFn: safeFetch,
|
|
25048
|
+
protocolVersion: MCP_AUTHORIZATION_PROTOCOL_VERSION
|
|
25049
|
+
});
|
|
25050
|
+
if (!authorizationServerMetadata) throw new Error("MCP authorization server metadata was not found");
|
|
25051
|
+
validateAuthorizationServerMetadata(authorizationServerUrl, authorizationServerMetadata);
|
|
25052
|
+
return {
|
|
25053
|
+
authorizationServerUrl,
|
|
25054
|
+
authorizationServerMetadata,
|
|
25055
|
+
resourceMetadata,
|
|
25056
|
+
...resourceMetadataUrl ? { resourceMetadataUrl: resourceMetadataUrl.toString() } : {},
|
|
25057
|
+
...challengeScope ? { challengeScope } : {},
|
|
25058
|
+
...status !== void 0 ? { unauthenticatedStatus: status } : {}
|
|
25059
|
+
};
|
|
25060
|
+
}
|
|
25061
|
+
/**
|
|
25062
|
+
* Discover an MCP authorization server without the legacy origin fallback.
|
|
25063
|
+
* MCP 2025-11-25 requires protected-resource metadata for AS selection.
|
|
25064
|
+
*/
|
|
25065
|
+
async function discoverMcpOAuthServer(url, fetchFn = fetch) {
|
|
25066
|
+
assertPublicHttpUrl(url);
|
|
25067
|
+
const safeFetch = createPublicHttpFetch(fetchFn);
|
|
25068
|
+
return discoverMcpOAuthServerFromProbe(url, safeFetch, await probeUnauthenticatedStatus(url, safeFetch));
|
|
25069
|
+
}
|
|
24980
25070
|
function scopesFromMetadata(metadata) {
|
|
24981
25071
|
if (!metadata?.scopes_supported?.length) return [];
|
|
24982
25072
|
return metadata.scopes_supported;
|
|
@@ -24989,68 +25079,37 @@ function logProbeFallback(phase, error) {
|
|
|
24989
25079
|
async function probeMcpAuth(url, fetchFn = fetch) {
|
|
24990
25080
|
assertPublicHttpUrl(url);
|
|
24991
25081
|
const safeFetch = createPublicHttpFetch(fetchFn);
|
|
24992
|
-
const
|
|
24993
|
-
const { status, wwwAuthenticate } = await probeUnauthenticatedStatus(url, safeFetch);
|
|
24994
|
-
let resourceMetadataUrl;
|
|
24995
|
-
if (wwwAuthenticate) {
|
|
24996
|
-
resourceMetadataUrl = extractWWWAuthenticateParams(new Response(null, { headers: { "www-authenticate": wwwAuthenticate } })).resourceMetadataUrl?.toString();
|
|
24997
|
-
if (resourceMetadataUrl) assertPublicHttpUrl(resourceMetadataUrl);
|
|
24998
|
-
}
|
|
25082
|
+
const initial = await probeUnauthenticatedStatus(url, safeFetch);
|
|
24999
25083
|
try {
|
|
25000
|
-
const discovered = await
|
|
25001
|
-
fetchFn: safeFetch,
|
|
25002
|
-
...resourceMetadataUrl ? { resourceMetadataUrl: new URL(resourceMetadataUrl) } : {}
|
|
25003
|
-
});
|
|
25084
|
+
const discovered = await discoverMcpOAuthServerFromProbe(url, safeFetch, initial);
|
|
25004
25085
|
const metadata = discovered.authorizationServerMetadata;
|
|
25005
25086
|
if (metadata?.authorization_endpoint && metadata.token_endpoint) return {
|
|
25006
25087
|
url,
|
|
25007
25088
|
mode: "oauth",
|
|
25008
|
-
unauthenticatedStatus: status,
|
|
25089
|
+
unauthenticatedStatus: initial.status,
|
|
25009
25090
|
oauth: {
|
|
25010
25091
|
issuer: metadata.issuer,
|
|
25011
25092
|
authorizationEndpoint: metadata.authorization_endpoint,
|
|
25012
25093
|
tokenEndpoint: metadata.token_endpoint,
|
|
25013
25094
|
registrationEndpoint: metadata.registration_endpoint,
|
|
25014
|
-
scopes:
|
|
25095
|
+
scopes: discovered.challengeScope ? discovered.challengeScope.split(/\s+/).filter(Boolean) : scopesFromMetadata(discovered.resourceMetadata),
|
|
25015
25096
|
resource: discovered.resourceMetadata?.resource,
|
|
25016
25097
|
resourceName: resourceNameFromMetadata(discovered.resourceMetadata)
|
|
25017
25098
|
}
|
|
25018
25099
|
};
|
|
25019
25100
|
} catch (error) {
|
|
25020
|
-
logProbeFallback("
|
|
25021
|
-
}
|
|
25022
|
-
try {
|
|
25023
|
-
const protectedResource = await discoverOAuthProtectedResourceMetadata(serverUrl, {}, safeFetch);
|
|
25024
|
-
const authorizationServerUrl = protectedResource.authorization_servers?.[0] ?? serverUrl.origin;
|
|
25025
|
-
assertPublicHttpUrl(authorizationServerUrl);
|
|
25026
|
-
const metadata = await discoverAuthorizationServerMetadata(authorizationServerUrl, { fetchFn: safeFetch });
|
|
25027
|
-
if (metadata?.authorization_endpoint && metadata.token_endpoint) return {
|
|
25028
|
-
url,
|
|
25029
|
-
mode: "oauth",
|
|
25030
|
-
unauthenticatedStatus: status,
|
|
25031
|
-
oauth: {
|
|
25032
|
-
issuer: metadata.issuer,
|
|
25033
|
-
authorizationEndpoint: metadata.authorization_endpoint,
|
|
25034
|
-
tokenEndpoint: metadata.token_endpoint,
|
|
25035
|
-
registrationEndpoint: metadata.registration_endpoint,
|
|
25036
|
-
scopes: mergeOAuthScopes(scopesFromMetadata(metadata), scopesFromMetadata(protectedResource)),
|
|
25037
|
-
resource: protectedResource.resource,
|
|
25038
|
-
resourceName: resourceNameFromMetadata(protectedResource)
|
|
25039
|
-
}
|
|
25040
|
-
};
|
|
25041
|
-
} catch (error) {
|
|
25042
|
-
logProbeFallback("discoverOAuthProtectedResourceMetadata", error);
|
|
25101
|
+
logProbeFallback("discoverMcpOAuthServer", error);
|
|
25043
25102
|
}
|
|
25044
|
-
if (status === 401 || status === 403) return {
|
|
25103
|
+
if (initial.status === 401 || initial.status === 403) return {
|
|
25045
25104
|
url,
|
|
25046
25105
|
mode: "token",
|
|
25047
|
-
unauthenticatedStatus: status,
|
|
25106
|
+
unauthenticatedStatus: initial.status,
|
|
25048
25107
|
scheme: "BEARER_TOKEN"
|
|
25049
25108
|
};
|
|
25050
25109
|
return {
|
|
25051
25110
|
url,
|
|
25052
25111
|
mode: "none",
|
|
25053
|
-
unauthenticatedStatus: status
|
|
25112
|
+
unauthenticatedStatus: initial.status
|
|
25054
25113
|
};
|
|
25055
25114
|
}
|
|
25056
25115
|
/** Best-effort server metadata for no-auth MCP servers (initialize handshake). */
|
|
@@ -31870,11 +31929,70 @@ async function describeCredentialBindings(requirements, context) {
|
|
|
31870
31929
|
preload
|
|
31871
31930
|
}, preload));
|
|
31872
31931
|
}
|
|
31873
|
-
|
|
31874
|
-
|
|
31875
|
-
|
|
31876
|
-
|
|
31877
|
-
return
|
|
31932
|
+
const DEFAULT_STATE_TTL_MS = 600 * 1e3;
|
|
31933
|
+
function defaultSigningKey() {
|
|
31934
|
+
const secret = process.env.CREDENTIALS_ENCRYPTION_KEY?.trim();
|
|
31935
|
+
if (!secret) throw new Error("CREDENTIALS_ENCRYPTION_KEY is required");
|
|
31936
|
+
return secret;
|
|
31937
|
+
}
|
|
31938
|
+
function signPayload(payload, signingKey) {
|
|
31939
|
+
return (0, node_crypto.createHmac)("sha256", signingKey()).update(payload).digest("base64url");
|
|
31940
|
+
}
|
|
31941
|
+
function createOAuthState(options = {}) {
|
|
31942
|
+
const signingKey = options.signingKey ?? defaultSigningKey;
|
|
31943
|
+
const payload = options.payload ?? {};
|
|
31944
|
+
const payloadSegment = (options.serializePayload ?? (() => ""))(payload);
|
|
31945
|
+
const id = (0, node_crypto.randomBytes)(16).toString("hex");
|
|
31946
|
+
const expiresAt = Date.now() + (options.ttlMs ?? DEFAULT_STATE_TTL_MS);
|
|
31947
|
+
const signedPayload = payloadSegment ? `${id}.${expiresAt}.${payloadSegment}` : `${id}.${expiresAt}`;
|
|
31948
|
+
return {
|
|
31949
|
+
state: `${signedPayload}.${signPayload(signedPayload, signingKey)}`,
|
|
31950
|
+
payload,
|
|
31951
|
+
id,
|
|
31952
|
+
expiresAt
|
|
31953
|
+
};
|
|
31954
|
+
}
|
|
31955
|
+
function verifyOAuthState(options, state) {
|
|
31956
|
+
if (!state) return null;
|
|
31957
|
+
const hasPayload = Boolean(options.deserializePayload);
|
|
31958
|
+
const parts = state.split(".");
|
|
31959
|
+
if (parts.length !== (hasPayload ? 4 : 3)) return null;
|
|
31960
|
+
const [id, expiresRaw] = parts;
|
|
31961
|
+
const signature = parts.at(-1);
|
|
31962
|
+
if (!id || !expiresRaw || !signature) return null;
|
|
31963
|
+
const payloadSegment = hasPayload ? parts[2] ?? "" : "";
|
|
31964
|
+
const expected = signPayload(hasPayload ? `${id}.${expiresRaw}.${payloadSegment}` : `${id}.${expiresRaw}`, options.signingKey ?? defaultSigningKey);
|
|
31965
|
+
const signatureBuffer = Buffer.from(signature);
|
|
31966
|
+
const expectedBuffer = Buffer.from(expected);
|
|
31967
|
+
if (signatureBuffer.length !== expectedBuffer.length || !(0, node_crypto.timingSafeEqual)(signatureBuffer, expectedBuffer)) return null;
|
|
31968
|
+
const expiresAt = Number(expiresRaw);
|
|
31969
|
+
if (!Number.isFinite(expiresAt) || expiresAt < Date.now()) return null;
|
|
31970
|
+
if (!hasPayload) return {};
|
|
31971
|
+
return options.deserializePayload(payloadSegment);
|
|
31972
|
+
}
|
|
31973
|
+
async function encodeOAuthState(payload, ttlMs) {
|
|
31974
|
+
const { state, id, expiresAt } = createOAuthState({
|
|
31975
|
+
payload,
|
|
31976
|
+
ttlMs
|
|
31977
|
+
});
|
|
31978
|
+
await (0, _keystrokehq_platform_database.putOAuthPendingState)({
|
|
31979
|
+
id,
|
|
31980
|
+
payloadCiphertext: (0, _keystrokehq_database.encryptCredentialPayload)(JSON.stringify(payload)),
|
|
31981
|
+
expiresAt: new Date(expiresAt)
|
|
31982
|
+
});
|
|
31983
|
+
return state;
|
|
31984
|
+
}
|
|
31985
|
+
async function decodeOAuthState(state) {
|
|
31986
|
+
const verified = verifyOAuthState({}, state);
|
|
31987
|
+
const id = state.split(".")[0];
|
|
31988
|
+
if (!verified || !id) throw new Error("OAuth state is invalid or expired");
|
|
31989
|
+
const ciphertext = await (0, _keystrokehq_platform_database.takeOAuthPendingState)(id);
|
|
31990
|
+
if (!ciphertext) throw new Error("OAuth state is invalid or expired");
|
|
31991
|
+
try {
|
|
31992
|
+
return JSON.parse((0, _keystrokehq_database.decryptCredentialPayload)(ciphertext));
|
|
31993
|
+
} catch {
|
|
31994
|
+
throw new Error("OAuth state is invalid or expired");
|
|
31995
|
+
}
|
|
31878
31996
|
}
|
|
31879
31997
|
function oauthAppMetadata(oauth, mcpUrl, options) {
|
|
31880
31998
|
return {
|
|
@@ -31885,7 +32003,9 @@ function oauthAppMetadata(oauth, mcpUrl, options) {
|
|
|
31885
32003
|
resource: oauth.resource,
|
|
31886
32004
|
issuer: oauth.issuer,
|
|
31887
32005
|
scopes: oauth.scopes,
|
|
31888
|
-
...options?.tokenEndpointAuthMethod ? { tokenEndpointAuthMethod: options.tokenEndpointAuthMethod } : {}
|
|
32006
|
+
...options?.tokenEndpointAuthMethod ? { tokenEndpointAuthMethod: options.tokenEndpointAuthMethod } : {},
|
|
32007
|
+
...options?.clientRegistrationMode ? { clientRegistrationMode: options.clientRegistrationMode } : {},
|
|
32008
|
+
...options?.redirectUri ? { redirectUri: options.redirectUri } : {}
|
|
31889
32009
|
};
|
|
31890
32010
|
}
|
|
31891
32011
|
function oauthClientSecretForStorage(clientSecret) {
|
|
@@ -31915,6 +32035,63 @@ async function discoverMcpApp(url) {
|
|
|
31915
32035
|
}
|
|
31916
32036
|
};
|
|
31917
32037
|
}
|
|
32038
|
+
var McpOAuthConnectError = class extends Error {
|
|
32039
|
+
phase;
|
|
32040
|
+
diagnostics;
|
|
32041
|
+
constructor(phase, message, diagnostics = {}) {
|
|
32042
|
+
super(message);
|
|
32043
|
+
this.phase = phase;
|
|
32044
|
+
this.diagnostics = diagnostics;
|
|
32045
|
+
this.name = "McpOAuthConnectError";
|
|
32046
|
+
}
|
|
32047
|
+
};
|
|
32048
|
+
function oauthErrorCode(error) {
|
|
32049
|
+
if (!error || typeof error !== "object" || !("errorCode" in error)) return;
|
|
32050
|
+
const value = Reflect.get(error, "errorCode");
|
|
32051
|
+
return typeof value === "string" && /^[a-z0-9_]+$/i.test(value) ? value : void 0;
|
|
32052
|
+
}
|
|
32053
|
+
const SUPPORTED_TOKEN_AUTH_METHODS = [
|
|
32054
|
+
"client_secret_basic",
|
|
32055
|
+
"client_secret_post",
|
|
32056
|
+
"none"
|
|
32057
|
+
];
|
|
32058
|
+
function requireHttpsUrl(value, label) {
|
|
32059
|
+
const url = new URL(value);
|
|
32060
|
+
if (url.protocol !== "https:") throw new Error(`${label} must use HTTPS`);
|
|
32061
|
+
return url;
|
|
32062
|
+
}
|
|
32063
|
+
function validateRedirectUri(value) {
|
|
32064
|
+
const url = new URL(value);
|
|
32065
|
+
const isLocalhost = url.hostname === "localhost" || url.hostname === "127.0.0.1";
|
|
32066
|
+
if (url.protocol !== "https:" && !(url.protocol === "http:" && isLocalhost)) throw new Error("OAuth redirect URI must use HTTPS or HTTP localhost");
|
|
32067
|
+
}
|
|
32068
|
+
function validateMcpResource(mcpUrl, resourceUrl) {
|
|
32069
|
+
const serverUrl = new URL(mcpUrl);
|
|
32070
|
+
if (serverUrl.hash || resourceUrl.hash || resourceUrl.toString() !== serverUrl.toString()) throw new Error("MCP protected resource does not identify the requested MCP server");
|
|
32071
|
+
}
|
|
32072
|
+
function selectTokenEndpointAuthMethod(metadata) {
|
|
32073
|
+
const advertised = metadata.token_endpoint_auth_methods_supported;
|
|
32074
|
+
const supported = advertised?.length ? advertised : ["client_secret_basic"];
|
|
32075
|
+
const selected = SUPPORTED_TOKEN_AUTH_METHODS.find((method) => supported.includes(method));
|
|
32076
|
+
if (!selected) throw new Error(`MCP authorization server only supports unsupported token endpoint authentication methods: ${supported.join(", ")}`);
|
|
32077
|
+
return selected;
|
|
32078
|
+
}
|
|
32079
|
+
function validateAuthorizationCapabilities(metadata) {
|
|
32080
|
+
if (!metadata.response_types_supported?.includes("code")) throw new Error("MCP authorization server does not support the code response type");
|
|
32081
|
+
if (metadata.grant_types_supported?.length && !metadata.grant_types_supported.includes("authorization_code")) throw new Error("MCP authorization server does not support authorization_code");
|
|
32082
|
+
if (!metadata.code_challenge_methods_supported?.includes("S256")) throw new Error("MCP authorization server does not advertise PKCE S256 support");
|
|
32083
|
+
}
|
|
32084
|
+
function validateRegisteredClientInformation(clientInformation, requestedMethod, advertisedMethods) {
|
|
32085
|
+
const assignedMethod = clientInformation.token_endpoint_auth_method ?? requestedMethod;
|
|
32086
|
+
if (!SUPPORTED_TOKEN_AUTH_METHODS.includes(assignedMethod)) throw new Error(`MCP authorization server assigned unsupported token endpoint authentication method: ${assignedMethod}`);
|
|
32087
|
+
if (!advertisedMethods.includes(assignedMethod)) throw new Error(`MCP authorization server assigned an unadvertised token endpoint authentication method: ${assignedMethod}`);
|
|
32088
|
+
if (assignedMethod !== "none" && !clientInformation.client_secret?.trim()) throw new Error(`MCP authorization server assigned ${assignedMethod} without a client_secret`);
|
|
32089
|
+
return {
|
|
32090
|
+
...clientInformation,
|
|
32091
|
+
token_endpoint_auth_method: assignedMethod,
|
|
32092
|
+
registrationMode: "dcr"
|
|
32093
|
+
};
|
|
32094
|
+
}
|
|
31918
32095
|
/**
|
|
31919
32096
|
* Prefer CIMD (URL client_id) when the AS advertises support and we have an
|
|
31920
32097
|
* HTTPS metadata URL; otherwise DCR. Localhost HTTP cannot be a CIMD client_id
|
|
@@ -31925,58 +32102,141 @@ async function discoverMcpApp(url) {
|
|
|
31925
32102
|
*/
|
|
31926
32103
|
async function resolveMcpOAuthClientInformation(options) {
|
|
31927
32104
|
const supportsCimd = options.metadata.client_id_metadata_document_supported === true;
|
|
31928
|
-
|
|
32105
|
+
const supportsPublicClient = options.metadata.token_endpoint_auth_methods_supported?.includes("none") === true;
|
|
32106
|
+
if (supportsCimd && supportsPublicClient && Boolean(options.clientMetadataUrl) && isHttpsUrl(options.clientMetadataUrl) && options.clientMetadataUrl) return {
|
|
31929
32107
|
client_id: options.clientMetadataUrl,
|
|
31930
|
-
token_endpoint_auth_method: "none"
|
|
31931
|
-
|
|
31932
|
-
|
|
31933
|
-
|
|
31934
|
-
|
|
31935
|
-
|
|
31936
|
-
|
|
31937
|
-
|
|
31938
|
-
|
|
31939
|
-
|
|
31940
|
-
|
|
31941
|
-
|
|
31942
|
-
|
|
31943
|
-
|
|
32108
|
+
token_endpoint_auth_method: "none",
|
|
32109
|
+
registrationMode: "cimd"
|
|
32110
|
+
};
|
|
32111
|
+
if (options.metadata.registration_endpoint) {
|
|
32112
|
+
const grantTypes = ["authorization_code", ...options.metadata.grant_types_supported?.includes("refresh_token") ? ["refresh_token"] : []];
|
|
32113
|
+
const tokenEndpointAuthMethod = selectTokenEndpointAuthMethod(options.metadata);
|
|
32114
|
+
const currentlySupportedAuthMethods = options.metadata.token_endpoint_auth_methods_supported?.length ? options.metadata.token_endpoint_auth_methods_supported : ["client_secret_basic"];
|
|
32115
|
+
const existing = await (0, _keystrokehq_platform_database.getDecryptedOAuthAppBySlug)(options.appSlug);
|
|
32116
|
+
if (existing?.provider === "mcp" && existing.metadata?.clientRegistrationMode === "dcr" && existing.metadata.issuer === options.metadata.issuer && existing.metadata.registrationEndpoint === options.metadata.registration_endpoint && existing.metadata.resource === options.resource && existing.metadata.redirectUri === options.redirectUri && existing.metadata.tokenEndpointAuthMethod && SUPPORTED_TOKEN_AUTH_METHODS.includes(existing.metadata.tokenEndpointAuthMethod) && currentlySupportedAuthMethods.includes(existing.metadata.tokenEndpointAuthMethod)) return {
|
|
32117
|
+
client_id: existing.clientId,
|
|
32118
|
+
...existing.clientSecret ? { client_secret: existing.clientSecret } : {},
|
|
32119
|
+
token_endpoint_auth_method: existing.metadata.tokenEndpointAuthMethod,
|
|
32120
|
+
registrationMode: "dcr"
|
|
32121
|
+
};
|
|
32122
|
+
let providerHttpStatus;
|
|
32123
|
+
try {
|
|
32124
|
+
const safeFetch = createPublicHttpFetch();
|
|
32125
|
+
return validateRegisteredClientInformation(await registerClient(options.authorizationServerUrl, {
|
|
32126
|
+
metadata: options.metadata,
|
|
32127
|
+
clientMetadata: {
|
|
32128
|
+
client_name: "Keystroke",
|
|
32129
|
+
redirect_uris: [options.redirectUri],
|
|
32130
|
+
grant_types: grantTypes,
|
|
32131
|
+
response_types: ["code"],
|
|
32132
|
+
token_endpoint_auth_method: tokenEndpointAuthMethod
|
|
32133
|
+
},
|
|
32134
|
+
scope: options.scope,
|
|
32135
|
+
fetchFn: async (input, init) => {
|
|
32136
|
+
const response = await safeFetch(input, init);
|
|
32137
|
+
providerHttpStatus = response.status;
|
|
32138
|
+
return response;
|
|
32139
|
+
}
|
|
32140
|
+
}), tokenEndpointAuthMethod, currentlySupportedAuthMethods);
|
|
32141
|
+
} catch (error) {
|
|
32142
|
+
throw new McpOAuthConnectError("client_registration", providerHttpStatus === 403 ? "MCP server rejected dynamic client registration; it may require a pre-approved OAuth client" : "MCP OAuth client registration failed", {
|
|
32143
|
+
correlationId: options.correlationId,
|
|
32144
|
+
authorizationServerUrl: options.authorizationServerUrl,
|
|
32145
|
+
registrationEndpoint: options.metadata.registration_endpoint,
|
|
32146
|
+
grantTypes,
|
|
32147
|
+
tokenEndpointAuthMethod,
|
|
32148
|
+
...providerHttpStatus ? { providerHttpStatus } : {},
|
|
32149
|
+
...oauthErrorCode(error) ? { oauthError: oauthErrorCode(error) } : {}
|
|
32150
|
+
});
|
|
32151
|
+
}
|
|
32152
|
+
}
|
|
32153
|
+
if (supportsCimd) throw new Error("Authorization server supports Client ID Metadata Documents, but not Keystroke's public-client authentication or HTTPS metadata URL");
|
|
31944
32154
|
throw new Error("MCP authorization server does not support Client ID Metadata Documents or Dynamic Client Registration");
|
|
31945
32155
|
}
|
|
31946
32156
|
async function beginMcpOAuthConnect(options) {
|
|
31947
32157
|
const appUrl = options.app.url?.trim();
|
|
31948
32158
|
if (!appUrl || options.app.source !== "mcp" || options.app.authKind !== "oauth") throw new Error("App is not a direct MCP OAuth app");
|
|
31949
|
-
const
|
|
32159
|
+
const correlationId = crypto.randomUUID();
|
|
32160
|
+
let discovered;
|
|
32161
|
+
try {
|
|
32162
|
+
validateRedirectUri(options.redirectUri);
|
|
32163
|
+
requireHttpsUrl(appUrl, "MCP server URL");
|
|
32164
|
+
discovered = await discoverMcpOAuthServer(appUrl);
|
|
32165
|
+
} catch {
|
|
32166
|
+
throw new McpOAuthConnectError("resource_discovery", "Failed to discover MCP OAuth protected-resource metadata", { correlationId });
|
|
32167
|
+
}
|
|
31950
32168
|
const metadata = discovered.authorizationServerMetadata;
|
|
31951
|
-
|
|
32169
|
+
try {
|
|
32170
|
+
if (!metadata?.authorization_endpoint || !metadata.token_endpoint) throw new Error("MCP server does not expose OAuth authorization metadata");
|
|
32171
|
+
validateAuthorizationCapabilities(metadata);
|
|
32172
|
+
requireHttpsUrl(discovered.authorizationServerUrl, "OAuth authorization server URL");
|
|
32173
|
+
requireHttpsUrl(metadata.authorization_endpoint, "OAuth authorization endpoint");
|
|
32174
|
+
requireHttpsUrl(metadata.token_endpoint, "OAuth token endpoint");
|
|
32175
|
+
if (metadata.registration_endpoint) requireHttpsUrl(metadata.registration_endpoint, "OAuth registration endpoint");
|
|
32176
|
+
} catch {
|
|
32177
|
+
throw new McpOAuthConnectError("authorization_server_discovery", "MCP authorization server metadata is incompatible", {
|
|
32178
|
+
correlationId,
|
|
32179
|
+
authorizationServerUrl: discovered.authorizationServerUrl
|
|
32180
|
+
});
|
|
32181
|
+
}
|
|
32182
|
+
let resourceUrl;
|
|
32183
|
+
try {
|
|
32184
|
+
resourceUrl = requireHttpsUrl(discovered.resourceMetadata.resource, "MCP protected resource");
|
|
32185
|
+
if (resourceUrl.hash) throw new Error("MCP protected resource must not include a fragment");
|
|
32186
|
+
validateMcpResource(appUrl, resourceUrl);
|
|
32187
|
+
} catch {
|
|
32188
|
+
throw new McpOAuthConnectError("resource_discovery", "MCP protected-resource metadata contains an invalid resource", { correlationId });
|
|
32189
|
+
}
|
|
31952
32190
|
const oauth = {
|
|
31953
32191
|
issuer: metadata.issuer,
|
|
31954
32192
|
authorizationEndpoint: metadata.authorization_endpoint,
|
|
31955
32193
|
tokenEndpoint: metadata.token_endpoint,
|
|
31956
32194
|
registrationEndpoint: metadata.registration_endpoint,
|
|
31957
|
-
scopes:
|
|
31958
|
-
resource:
|
|
32195
|
+
scopes: discovered.challengeScope ? discovered.challengeScope.split(/\s+/).filter(Boolean) : discovered.resourceMetadata.scopes_supported ?? [],
|
|
32196
|
+
resource: resourceUrl.toString(),
|
|
31959
32197
|
resourceName: discovered.resourceMetadata?.resource_name?.trim() || void 0
|
|
31960
32198
|
};
|
|
31961
|
-
const
|
|
31962
|
-
const
|
|
31963
|
-
const
|
|
31964
|
-
|
|
31965
|
-
|
|
31966
|
-
|
|
31967
|
-
|
|
31968
|
-
|
|
31969
|
-
|
|
31970
|
-
|
|
31971
|
-
|
|
31972
|
-
|
|
31973
|
-
|
|
31974
|
-
|
|
31975
|
-
|
|
31976
|
-
|
|
31977
|
-
})
|
|
31978
|
-
|
|
32199
|
+
const requestedScopes = options.input.scopes?.map((value) => value.trim()).filter(Boolean) ?? [];
|
|
32200
|
+
const challengedScopes = discovered.challengeScope?.split(/\s+/).filter(Boolean) ?? [];
|
|
32201
|
+
const selectedScopes = challengedScopes.length > 0 ? [...new Set([...challengedScopes, ...requestedScopes])] : requestedScopes.length > 0 ? requestedScopes : discovered.resourceMetadata.scopes_supported ?? [];
|
|
32202
|
+
const scope = selectedScopes.length > 0 ? selectedScopes.join(" ") : void 0;
|
|
32203
|
+
let clientInformation;
|
|
32204
|
+
try {
|
|
32205
|
+
clientInformation = await resolveMcpOAuthClientInformation({
|
|
32206
|
+
appSlug: options.app.slug,
|
|
32207
|
+
correlationId,
|
|
32208
|
+
authorizationServerUrl: discovered.authorizationServerUrl,
|
|
32209
|
+
metadata,
|
|
32210
|
+
resource: resourceUrl.toString(),
|
|
32211
|
+
redirectUri: options.redirectUri,
|
|
32212
|
+
scope,
|
|
32213
|
+
clientMetadataUrl: options.clientMetadataUrl
|
|
32214
|
+
});
|
|
32215
|
+
} catch (error) {
|
|
32216
|
+
if (error instanceof McpOAuthConnectError) throw error;
|
|
32217
|
+
throw new McpOAuthConnectError("client_registration", "MCP authorization server does not support a compatible client registration", {
|
|
32218
|
+
correlationId,
|
|
32219
|
+
authorizationServerUrl: discovered.authorizationServerUrl
|
|
32220
|
+
});
|
|
32221
|
+
}
|
|
32222
|
+
try {
|
|
32223
|
+
await (0, _keystrokehq_platform_database.ensureOAuthApp)({
|
|
32224
|
+
slug: options.app.slug,
|
|
32225
|
+
provider: "mcp",
|
|
32226
|
+
tokenStrategy: "refresh",
|
|
32227
|
+
clientId: clientInformation.client_id,
|
|
32228
|
+
clientSecret: oauthClientSecretForStorage(clientInformation.client_secret),
|
|
32229
|
+
metadata: oauthAppMetadata(oauth, appUrl, {
|
|
32230
|
+
tokenEndpointAuthMethod: clientInformation.token_endpoint_auth_method,
|
|
32231
|
+
clientRegistrationMode: clientInformation.registrationMode,
|
|
32232
|
+
redirectUri: options.redirectUri
|
|
32233
|
+
})
|
|
32234
|
+
});
|
|
32235
|
+
} catch {
|
|
32236
|
+
throw new McpOAuthConnectError("credential_persistence", "Failed to save MCP OAuth client registration", { correlationId });
|
|
32237
|
+
}
|
|
31979
32238
|
const statePayload = {
|
|
32239
|
+
correlationId,
|
|
31980
32240
|
codeVerifier: "",
|
|
31981
32241
|
appSlug: options.app.slug,
|
|
31982
32242
|
organizationId: options.organizationId,
|
|
@@ -31988,76 +32248,107 @@ async function beginMcpOAuthConnect(options) {
|
|
|
31988
32248
|
authorizationServerUrl: discovered.authorizationServerUrl,
|
|
31989
32249
|
resource: oauth.resource,
|
|
31990
32250
|
oauthMetadata: oauth,
|
|
32251
|
+
authorizationServerMetadata: metadata,
|
|
31991
32252
|
mcpUrl: appUrl,
|
|
31992
32253
|
redirectUri: options.redirectUri,
|
|
31993
32254
|
clientId: clientInformation.client_id,
|
|
31994
32255
|
clientSecret: clientInformation.client_secret,
|
|
31995
32256
|
tokenEndpointAuthMethod: clientInformation.token_endpoint_auth_method,
|
|
32257
|
+
clientRegistrationMode: clientInformation.registrationMode,
|
|
31996
32258
|
label: options.input.label,
|
|
31997
32259
|
credentialInstanceId: options.input.credentialInstanceId
|
|
31998
32260
|
};
|
|
31999
|
-
|
|
32000
|
-
|
|
32001
|
-
|
|
32002
|
-
|
|
32003
|
-
|
|
32004
|
-
|
|
32005
|
-
|
|
32261
|
+
let authorizationUrl;
|
|
32262
|
+
let codeVerifier;
|
|
32263
|
+
try {
|
|
32264
|
+
({authorizationUrl, codeVerifier} = await startAuthorization(discovered.authorizationServerUrl, {
|
|
32265
|
+
metadata,
|
|
32266
|
+
clientInformation,
|
|
32267
|
+
redirectUrl: options.redirectUri,
|
|
32268
|
+
scope,
|
|
32269
|
+
resource: resourceUrl
|
|
32270
|
+
}));
|
|
32271
|
+
} catch (error) {
|
|
32272
|
+
throw new McpOAuthConnectError("authorization_start", "Failed to start MCP authorization", {
|
|
32273
|
+
correlationId,
|
|
32274
|
+
authorizationServerUrl: discovered.authorizationServerUrl,
|
|
32275
|
+
...oauthErrorCode(error) ? { oauthError: oauthErrorCode(error) } : {}
|
|
32276
|
+
});
|
|
32277
|
+
}
|
|
32006
32278
|
statePayload.codeVerifier = codeVerifier;
|
|
32007
|
-
const state = encodeOAuthState(statePayload);
|
|
32279
|
+
const state = await encodeOAuthState(statePayload);
|
|
32008
32280
|
authorizationUrl.searchParams.set("state", state);
|
|
32009
32281
|
return { authorizeUrl: authorizationUrl.toString() };
|
|
32010
32282
|
}
|
|
32011
32283
|
async function completeMcpOAuthConnect(options) {
|
|
32012
|
-
const payload =
|
|
32013
|
-
const metadata = {
|
|
32014
|
-
issuer: payload.oauthMetadata.issuer ?? payload.authorizationServerUrl,
|
|
32015
|
-
authorization_endpoint: payload.oauthMetadata.authorizationEndpoint,
|
|
32016
|
-
token_endpoint: payload.oauthMetadata.tokenEndpoint,
|
|
32017
|
-
registration_endpoint: payload.oauthMetadata.registrationEndpoint,
|
|
32018
|
-
scopes_supported: payload.oauthMetadata.scopes,
|
|
32019
|
-
response_types_supported: ["code"],
|
|
32020
|
-
code_challenge_methods_supported: ["S256"]
|
|
32021
|
-
};
|
|
32284
|
+
const { payload } = options;
|
|
32022
32285
|
const resourceUrl = payload.resource ? new URL(payload.resource) : void 0;
|
|
32023
|
-
|
|
32024
|
-
|
|
32025
|
-
|
|
32026
|
-
|
|
32027
|
-
|
|
32028
|
-
|
|
32029
|
-
|
|
32030
|
-
|
|
32031
|
-
|
|
32032
|
-
|
|
32033
|
-
|
|
32034
|
-
|
|
32035
|
-
|
|
32036
|
-
|
|
32037
|
-
|
|
32038
|
-
|
|
32039
|
-
|
|
32040
|
-
|
|
32041
|
-
|
|
32042
|
-
|
|
32043
|
-
|
|
32044
|
-
|
|
32045
|
-
|
|
32046
|
-
|
|
32047
|
-
|
|
32048
|
-
|
|
32049
|
-
|
|
32050
|
-
|
|
32051
|
-
|
|
32052
|
-
|
|
32053
|
-
|
|
32054
|
-
|
|
32055
|
-
|
|
32056
|
-
|
|
32057
|
-
|
|
32058
|
-
|
|
32059
|
-
|
|
32060
|
-
|
|
32286
|
+
if (!resourceUrl) throw new McpOAuthConnectError("authorization_callback", "OAuth callback state is missing the MCP resource", { correlationId: payload.correlationId });
|
|
32287
|
+
let tokens;
|
|
32288
|
+
let providerHttpStatus;
|
|
32289
|
+
try {
|
|
32290
|
+
const safeFetch = createPublicHttpFetch();
|
|
32291
|
+
tokens = await exchangeAuthorization(payload.authorizationServerUrl, {
|
|
32292
|
+
metadata: payload.authorizationServerMetadata,
|
|
32293
|
+
clientInformation: {
|
|
32294
|
+
client_id: payload.clientId,
|
|
32295
|
+
...payload.clientSecret ? { client_secret: payload.clientSecret } : {},
|
|
32296
|
+
...payload.tokenEndpointAuthMethod ? { token_endpoint_auth_method: payload.tokenEndpointAuthMethod } : {}
|
|
32297
|
+
},
|
|
32298
|
+
authorizationCode: options.code,
|
|
32299
|
+
codeVerifier: payload.codeVerifier,
|
|
32300
|
+
redirectUri: payload.redirectUri,
|
|
32301
|
+
resource: resourceUrl,
|
|
32302
|
+
fetchFn: async (input, init) => {
|
|
32303
|
+
const response = await safeFetch(input, init);
|
|
32304
|
+
providerHttpStatus = response.status;
|
|
32305
|
+
return response;
|
|
32306
|
+
}
|
|
32307
|
+
});
|
|
32308
|
+
} catch (error) {
|
|
32309
|
+
throw new McpOAuthConnectError("token_exchange", "MCP OAuth token exchange failed", {
|
|
32310
|
+
correlationId: payload.correlationId,
|
|
32311
|
+
authorizationServerUrl: payload.authorizationServerUrl,
|
|
32312
|
+
...providerHttpStatus ? { providerHttpStatus } : {},
|
|
32313
|
+
...oauthErrorCode(error) ? { oauthError: oauthErrorCode(error) } : {}
|
|
32314
|
+
});
|
|
32315
|
+
}
|
|
32316
|
+
let oauthAppId;
|
|
32317
|
+
let connectionId;
|
|
32318
|
+
try {
|
|
32319
|
+
({id: oauthAppId} = await (0, _keystrokehq_platform_database.ensureOAuthApp)({
|
|
32320
|
+
slug: payload.appSlug,
|
|
32321
|
+
provider: "mcp",
|
|
32322
|
+
tokenStrategy: "refresh",
|
|
32323
|
+
clientId: payload.clientId,
|
|
32324
|
+
clientSecret: oauthClientSecretForStorage(payload.clientSecret),
|
|
32325
|
+
metadata: oauthAppMetadata(payload.oauthMetadata, payload.mcpUrl, {
|
|
32326
|
+
tokenEndpointAuthMethod: payload.tokenEndpointAuthMethod,
|
|
32327
|
+
clientRegistrationMode: payload.clientRegistrationMode,
|
|
32328
|
+
redirectUri: payload.redirectUri
|
|
32329
|
+
})
|
|
32330
|
+
}));
|
|
32331
|
+
connectionId = await (0, _keystrokehq_platform_database.saveOAuthConnection)({
|
|
32332
|
+
appId: oauthAppId,
|
|
32333
|
+
externalId: payload.userId,
|
|
32334
|
+
accessToken: tokens.access_token,
|
|
32335
|
+
refreshToken: tokens.refresh_token,
|
|
32336
|
+
accessTokenExpiresAt: accessTokenExpiresAt(tokens.expires_in),
|
|
32337
|
+
grantedScopes: grantedScopesFromToken(tokens.scope, payload.oauthMetadata.scopes),
|
|
32338
|
+
metadata: { mcpUrl: payload.oauthMetadata.resource }
|
|
32339
|
+
});
|
|
32340
|
+
await (0, _keystrokehq_database.ensureOAuthCredentialInstance)({
|
|
32341
|
+
credentialKey: payload.appSlug,
|
|
32342
|
+
connectionId,
|
|
32343
|
+
accountLabel: payload.label,
|
|
32344
|
+
externalId: payload.userId,
|
|
32345
|
+
userLabel: payload.label,
|
|
32346
|
+
targets: payload.scopeTargets,
|
|
32347
|
+
credentialInstanceId: payload.credentialInstanceId
|
|
32348
|
+
});
|
|
32349
|
+
} catch {
|
|
32350
|
+
throw new McpOAuthConnectError("credential_persistence", "Failed to save the MCP OAuth credential", { correlationId: payload.correlationId });
|
|
32351
|
+
}
|
|
32061
32352
|
return {
|
|
32062
32353
|
appSlug: payload.appSlug,
|
|
32063
32354
|
connectionId,
|
|
@@ -38138,6 +38429,12 @@ Object.defineProperty(exports, "McpDiscoverResponseSchema", {
|
|
|
38138
38429
|
return McpDiscoverResponseSchema;
|
|
38139
38430
|
}
|
|
38140
38431
|
});
|
|
38432
|
+
Object.defineProperty(exports, "McpOAuthConnectError", {
|
|
38433
|
+
enumerable: true,
|
|
38434
|
+
get: function() {
|
|
38435
|
+
return McpOAuthConnectError;
|
|
38436
|
+
}
|
|
38437
|
+
});
|
|
38141
38438
|
Object.defineProperty(exports, "OpenApiDiscoverRequestSchema", {
|
|
38142
38439
|
enumerable: true,
|
|
38143
38440
|
get: function() {
|
|
@@ -39081,4 +39378,4 @@ Object.defineProperty(exports, "withCredentialAssignments", {
|
|
|
39081
39378
|
}
|
|
39082
39379
|
});
|
|
39083
39380
|
|
|
39084
|
-
//# sourceMappingURL=dist-
|
|
39381
|
+
//# sourceMappingURL=dist-ZPZwDr3w.cjs.map
|