@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,10 +1,10 @@
|
|
|
1
1
|
import { createRequire } from "node:module";
|
|
2
|
-
import { createCipheriv, createDecipheriv, createHash, randomBytes, randomUUID } from "node:crypto";
|
|
2
|
+
import { createCipheriv, createDecipheriv, createHash, createHmac, randomBytes, randomUUID, timingSafeEqual } from "node:crypto";
|
|
3
3
|
import { DEFAULT_DATABASE_URL, claimDueTriggers, claimDueTriggersForOrg, claimNextJob, clearCredentialInstanceDefaults, createPostgresCancelChannel, decryptCredentialPayload, disableAllTriggerSchedules, disableTriggerSchedulesNotInSlugs, encryptCredentialPayload, enqueueJob, ensureOAuthCredentialInstance, failAgentSession, failWorkflowRun, getProjectScopeId, getServerTenantScopeId, inferDialect, isDatabaseInitialized, listCredentialAssignmentsByTarget, listEnabledScheduledTriggers, listExecutableAttachmentsByTriggerIds, markJobComplete, markJobFailed, requeueExpiredLeases, resolvePostgresUrlFromEnv, resolveProjectDatabaseUrlFromEnv, scheduleJobRetry, selectActiveEphemeralScheduledTriggerSlugs, selectCredentialInstancesByIds, selectCredentialInstancesForScope, selectCredentialInstancesForScopes, selectTriggerBySlug, setTriggerScheduleEnabled, triggerTimezoneFromConfig, upsertCredentialInstance, upsertTriggerScheduleFields } from "@keystrokehq/database";
|
|
4
4
|
import EventEmitter$1, { EventEmitter } from "node:events";
|
|
5
5
|
import { z } from "zod";
|
|
6
6
|
import { AsyncLocalStorage } from "node:async_hooks";
|
|
7
|
-
import { deleteManagedServiceCredential, deleteSecretValuesForRef, ensureOAuthApp, getManagedServiceCredential, getOrganizationScopeId, insertManagedServiceCredential, saveOAuthConnection, selectSecretValue, updateManagedServiceCredentialValue, upsertSecretValue } from "@keystrokehq/platform-database";
|
|
7
|
+
import { deleteManagedServiceCredential, deleteSecretValuesForRef, ensureOAuthApp, getDecryptedOAuthAppBySlug, getManagedServiceCredential, getOrganizationScopeId, insertManagedServiceCredential, putOAuthPendingState, saveOAuthConnection, selectSecretValue, takeOAuthPendingState, updateManagedServiceCredentialValue, upsertSecretValue } from "@keystrokehq/platform-database";
|
|
8
8
|
import * as z$1 from "zod/v4";
|
|
9
9
|
import "zod/v3";
|
|
10
10
|
import * as z4mini from "zod/v4-mini";
|
|
@@ -10026,12 +10026,13 @@ const AppAuthKindSchema = z.enum([
|
|
|
10026
10026
|
"api_key",
|
|
10027
10027
|
"keystroke"
|
|
10028
10028
|
]);
|
|
10029
|
-
/** Composio auth scheme for API-key style connections. */
|
|
10029
|
+
/** Composio auth scheme for API-key / no-auth style connections. */
|
|
10030
10030
|
const AppCredentialSchemeSchema = z.enum([
|
|
10031
10031
|
"API_KEY",
|
|
10032
10032
|
"BEARER_TOKEN",
|
|
10033
10033
|
"BASIC",
|
|
10034
|
-
"BASIC_WITH_JWT"
|
|
10034
|
+
"BASIC_WITH_JWT",
|
|
10035
|
+
"NO_AUTH"
|
|
10035
10036
|
]);
|
|
10036
10037
|
/**
|
|
10037
10038
|
* Where app metadata and execution are sourced (e.g. native, composio, pipedream, custom).
|
|
@@ -10153,7 +10154,9 @@ const AppCatalogSummarySchema = z.object({
|
|
|
10153
10154
|
/** Endpoint URL for MCP, OpenAPI, or GraphQL custom apps. */
|
|
10154
10155
|
url: z.string().url().nullable().optional(),
|
|
10155
10156
|
/** True when the app has a non-empty credential field template. */
|
|
10156
|
-
hasCredentialFields: z.boolean().optional()
|
|
10157
|
+
hasCredentialFields: z.boolean().optional(),
|
|
10158
|
+
/** Composio auth scheme — present for API-key and NO_AUTH apps so the picker can choose a flow. */
|
|
10159
|
+
credentialScheme: AppCredentialSchemeSchema.optional()
|
|
10157
10160
|
});
|
|
10158
10161
|
/**
|
|
10159
10162
|
* Full connectable integration detail (scopes + credential template). An "app"
|
|
@@ -10163,7 +10166,7 @@ const AppCatalogEntrySchema = AppCatalogSummarySchema.extend({
|
|
|
10163
10166
|
oauthScopes: z.array(OAuthScopeOptionSchema),
|
|
10164
10167
|
/** Custom api_key apps — vault field template for connect UI and sync. */
|
|
10165
10168
|
credentialFields: AppCredentialFieldsSchema.optional(),
|
|
10166
|
-
/** Composio auth scheme
|
|
10169
|
+
/** Composio auth scheme for API-key or NO_AUTH connections. */
|
|
10167
10170
|
credentialScheme: AppCredentialSchemeSchema.optional(),
|
|
10168
10171
|
/** When present, the app supports agent gateway bindings (external channels). */
|
|
10169
10172
|
gateway: AppGatewaySchema.optional()
|
|
@@ -10240,6 +10243,7 @@ function mcpProbeToAppTemplate(probe) {
|
|
|
10240
10243
|
};
|
|
10241
10244
|
return {
|
|
10242
10245
|
authKind: "api_key",
|
|
10246
|
+
credentialScheme: "NO_AUTH",
|
|
10243
10247
|
credentialFields: {},
|
|
10244
10248
|
oauthScopes: [],
|
|
10245
10249
|
url
|
|
@@ -10638,8 +10642,12 @@ const AppCredentialScopeSchema = z.enum([
|
|
|
10638
10642
|
"project",
|
|
10639
10643
|
"organization"
|
|
10640
10644
|
]);
|
|
10641
|
-
/** How the credential was connected (OAuth
|
|
10642
|
-
const AppCredentialConnectionKindSchema = z.enum([
|
|
10645
|
+
/** How the credential was connected (OAuth, manual api-key entry, or no-auth). */
|
|
10646
|
+
const AppCredentialConnectionKindSchema = z.enum([
|
|
10647
|
+
"oauth",
|
|
10648
|
+
"manual",
|
|
10649
|
+
"none"
|
|
10650
|
+
]);
|
|
10643
10651
|
/** Connect-dialog permission preset for OAuth scope selection. */
|
|
10644
10652
|
const OAuthPermissionModeSchema = z.enum(["default", "restricted"]);
|
|
10645
10653
|
const optionalTimestamp$1 = z.string().optional();
|
|
@@ -10736,6 +10744,11 @@ const CreateCredentialsRequestSchema = CredentialTargetsFieldsSchema.extend({
|
|
|
10736
10744
|
message: "OAuth credentials are created via the OAuth callback",
|
|
10737
10745
|
path: ["connectionKind"]
|
|
10738
10746
|
});
|
|
10747
|
+
if (input.connectionKind === "none" && input.value) ctx.addIssue({
|
|
10748
|
+
code: "custom",
|
|
10749
|
+
message: "value is not allowed for no-auth connections",
|
|
10750
|
+
path: ["value"]
|
|
10751
|
+
});
|
|
10739
10752
|
});
|
|
10740
10753
|
/** Request body for `PATCH /api/credentials/:id`. */
|
|
10741
10754
|
const UpdateCredentialRequestSchema = z.object({
|
|
@@ -13194,7 +13207,7 @@ function registerWorkflowRunGetter(fn) {
|
|
|
13194
13207
|
}
|
|
13195
13208
|
new AsyncLocalStorage();
|
|
13196
13209
|
//#endregion
|
|
13197
|
-
//#region ../../packages/credentials/dist/store-
|
|
13210
|
+
//#region ../../packages/credentials/dist/store-B7IWQPwD.mjs
|
|
13198
13211
|
function normalizeRow(row) {
|
|
13199
13212
|
const { projectId: _projectId, ...rest } = row;
|
|
13200
13213
|
return rest;
|
|
@@ -24850,21 +24863,29 @@ var StreamableHTTPClientTransport = class {
|
|
|
24850
24863
|
};
|
|
24851
24864
|
//#endregion
|
|
24852
24865
|
//#region ../../packages/mcp/dist/index.mjs
|
|
24853
|
-
|
|
24854
|
-
|
|
24855
|
-
|
|
24856
|
-
|
|
24857
|
-
|
|
24858
|
-
|
|
24859
|
-
|
|
24860
|
-
|
|
24861
|
-
|
|
24862
|
-
|
|
24863
|
-
|
|
24864
|
-
|
|
24865
|
-
|
|
24866
|
-
|
|
24867
|
-
|
|
24866
|
+
function challengeParameter(value, name) {
|
|
24867
|
+
const match = new RegExp(`(?:^|,)\\s*${name}\\s*=\\s*(?:"((?:[^"\\\\]|\\\\.)*)"|([^,\\s]+))`, "i").exec(value);
|
|
24868
|
+
return (match?.[1] ?? match?.[2])?.replace(/\\(["\\])/g, "$1").trim() || void 0;
|
|
24869
|
+
}
|
|
24870
|
+
/** Parse the Bearer challenge even when another authentication scheme appears first. */
|
|
24871
|
+
function parseMcpBearerChallenge(response) {
|
|
24872
|
+
const header = response.headers.get("www-authenticate");
|
|
24873
|
+
if (!header) return {};
|
|
24874
|
+
const bearer = /(?:^|,)\s*Bearer(?:\s+|$)/i.exec(header);
|
|
24875
|
+
if (!bearer) return {};
|
|
24876
|
+
const parameters = header.slice(bearer.index + bearer[0].length);
|
|
24877
|
+
const resourceMetadata = challengeParameter(parameters, "resource_metadata");
|
|
24878
|
+
const scope = challengeParameter(parameters, "scope");
|
|
24879
|
+
const error = challengeParameter(parameters, "error");
|
|
24880
|
+
let resourceMetadataUrl;
|
|
24881
|
+
if (resourceMetadata) try {
|
|
24882
|
+
resourceMetadataUrl = new URL(resourceMetadata);
|
|
24883
|
+
} catch {}
|
|
24884
|
+
return {
|
|
24885
|
+
...resourceMetadataUrl ? { resourceMetadataUrl } : {},
|
|
24886
|
+
...scope ? { scope } : {},
|
|
24887
|
+
...error ? { error } : {}
|
|
24888
|
+
};
|
|
24868
24889
|
}
|
|
24869
24890
|
/** Thrown when a URL is not safe for server-side outbound fetch (SSRF guard). */
|
|
24870
24891
|
var PublicHttpUrlError = class extends Error {
|
|
@@ -24977,6 +24998,7 @@ function createPublicHttpFetch(fetchFn = fetch) {
|
|
|
24977
24998
|
});
|
|
24978
24999
|
};
|
|
24979
25000
|
}
|
|
25001
|
+
const MCP_AUTHORIZATION_PROTOCOL_VERSION = "2025-11-25";
|
|
24980
25002
|
function resourceNameFromMetadata(metadata) {
|
|
24981
25003
|
return metadata?.resource_name?.trim() || void 0;
|
|
24982
25004
|
}
|
|
@@ -24996,6 +25018,74 @@ async function probeUnauthenticatedStatus(url, fetchFn) {
|
|
|
24996
25018
|
return {};
|
|
24997
25019
|
}
|
|
24998
25020
|
}
|
|
25021
|
+
function assertHttps(value, label) {
|
|
25022
|
+
if (new URL(value).protocol !== "https:") throw new Error(`${label} must use HTTPS`);
|
|
25023
|
+
}
|
|
25024
|
+
function assertPublicHttpsUrl(value, label) {
|
|
25025
|
+
assertPublicHttpUrl(value);
|
|
25026
|
+
assertHttps(value, label);
|
|
25027
|
+
}
|
|
25028
|
+
function assertResourceIdentity(serverUrl, resource) {
|
|
25029
|
+
const resourceUrl = new URL(resource);
|
|
25030
|
+
if (serverUrl.hash || resourceUrl.hash || resourceUrl.toString() !== serverUrl.toString()) throw new Error("MCP protected resource does not match the requested MCP server URL");
|
|
25031
|
+
}
|
|
25032
|
+
function validateAuthorizationServerMetadata(authorizationServerUrl, metadata) {
|
|
25033
|
+
if (metadata.issuer !== authorizationServerUrl) throw new Error("MCP authorization server metadata issuer does not match authorization server");
|
|
25034
|
+
if (!metadata.authorization_endpoint || !metadata.token_endpoint) throw new Error("MCP authorization server metadata is missing required endpoints");
|
|
25035
|
+
assertPublicHttpsUrl(metadata.authorization_endpoint, "MCP authorization endpoint");
|
|
25036
|
+
assertPublicHttpsUrl(metadata.token_endpoint, "MCP token endpoint");
|
|
25037
|
+
if (metadata.registration_endpoint) assertPublicHttpsUrl(metadata.registration_endpoint, "MCP registration endpoint");
|
|
25038
|
+
}
|
|
25039
|
+
async function discoverMcpOAuthServerFromProbe(url, safeFetch, initial) {
|
|
25040
|
+
const serverUrl = new URL(url);
|
|
25041
|
+
assertHttps(serverUrl, "MCP server URL");
|
|
25042
|
+
const { status } = initial;
|
|
25043
|
+
const wwwAuthenticate = status === 401 ? initial.wwwAuthenticate : void 0;
|
|
25044
|
+
let resourceMetadataUrl;
|
|
25045
|
+
let challengeScope;
|
|
25046
|
+
if (wwwAuthenticate) {
|
|
25047
|
+
const params = parseMcpBearerChallenge(new Response(null, { headers: { "www-authenticate": wwwAuthenticate } }));
|
|
25048
|
+
resourceMetadataUrl = params.resourceMetadataUrl;
|
|
25049
|
+
challengeScope = params.scope?.trim() || void 0;
|
|
25050
|
+
if (resourceMetadataUrl) {
|
|
25051
|
+
assertPublicHttpUrl(resourceMetadataUrl.toString());
|
|
25052
|
+
assertHttps(resourceMetadataUrl, "MCP resource metadata URL");
|
|
25053
|
+
}
|
|
25054
|
+
}
|
|
25055
|
+
const resourceMetadata = await discoverOAuthProtectedResourceMetadata(serverUrl, {
|
|
25056
|
+
protocolVersion: MCP_AUTHORIZATION_PROTOCOL_VERSION,
|
|
25057
|
+
...resourceMetadataUrl ? { resourceMetadataUrl } : {}
|
|
25058
|
+
}, safeFetch);
|
|
25059
|
+
if (!resourceMetadata.resource) throw new Error("MCP protected resource metadata is missing resource");
|
|
25060
|
+
if (!resourceMetadata.authorization_servers?.length) throw new Error("MCP protected resource metadata is missing authorization_servers");
|
|
25061
|
+
assertResourceIdentity(serverUrl, resourceMetadata.resource);
|
|
25062
|
+
const authorizationServerUrl = resourceMetadata.authorization_servers[0];
|
|
25063
|
+
if (!authorizationServerUrl) throw new Error("MCP protected resource metadata is missing authorization_servers");
|
|
25064
|
+
assertPublicHttpsUrl(authorizationServerUrl, "MCP authorization server URL");
|
|
25065
|
+
const authorizationServerMetadata = await discoverAuthorizationServerMetadata(authorizationServerUrl, {
|
|
25066
|
+
fetchFn: safeFetch,
|
|
25067
|
+
protocolVersion: MCP_AUTHORIZATION_PROTOCOL_VERSION
|
|
25068
|
+
});
|
|
25069
|
+
if (!authorizationServerMetadata) throw new Error("MCP authorization server metadata was not found");
|
|
25070
|
+
validateAuthorizationServerMetadata(authorizationServerUrl, authorizationServerMetadata);
|
|
25071
|
+
return {
|
|
25072
|
+
authorizationServerUrl,
|
|
25073
|
+
authorizationServerMetadata,
|
|
25074
|
+
resourceMetadata,
|
|
25075
|
+
...resourceMetadataUrl ? { resourceMetadataUrl: resourceMetadataUrl.toString() } : {},
|
|
25076
|
+
...challengeScope ? { challengeScope } : {},
|
|
25077
|
+
...status !== void 0 ? { unauthenticatedStatus: status } : {}
|
|
25078
|
+
};
|
|
25079
|
+
}
|
|
25080
|
+
/**
|
|
25081
|
+
* Discover an MCP authorization server without the legacy origin fallback.
|
|
25082
|
+
* MCP 2025-11-25 requires protected-resource metadata for AS selection.
|
|
25083
|
+
*/
|
|
25084
|
+
async function discoverMcpOAuthServer(url, fetchFn = fetch) {
|
|
25085
|
+
assertPublicHttpUrl(url);
|
|
25086
|
+
const safeFetch = createPublicHttpFetch(fetchFn);
|
|
25087
|
+
return discoverMcpOAuthServerFromProbe(url, safeFetch, await probeUnauthenticatedStatus(url, safeFetch));
|
|
25088
|
+
}
|
|
24999
25089
|
function scopesFromMetadata(metadata) {
|
|
25000
25090
|
if (!metadata?.scopes_supported?.length) return [];
|
|
25001
25091
|
return metadata.scopes_supported;
|
|
@@ -25008,68 +25098,37 @@ function logProbeFallback(phase, error) {
|
|
|
25008
25098
|
async function probeMcpAuth(url, fetchFn = fetch) {
|
|
25009
25099
|
assertPublicHttpUrl(url);
|
|
25010
25100
|
const safeFetch = createPublicHttpFetch(fetchFn);
|
|
25011
|
-
const
|
|
25012
|
-
const { status, wwwAuthenticate } = await probeUnauthenticatedStatus(url, safeFetch);
|
|
25013
|
-
let resourceMetadataUrl;
|
|
25014
|
-
if (wwwAuthenticate) {
|
|
25015
|
-
resourceMetadataUrl = extractWWWAuthenticateParams(new Response(null, { headers: { "www-authenticate": wwwAuthenticate } })).resourceMetadataUrl?.toString();
|
|
25016
|
-
if (resourceMetadataUrl) assertPublicHttpUrl(resourceMetadataUrl);
|
|
25017
|
-
}
|
|
25101
|
+
const initial = await probeUnauthenticatedStatus(url, safeFetch);
|
|
25018
25102
|
try {
|
|
25019
|
-
const discovered = await
|
|
25020
|
-
fetchFn: safeFetch,
|
|
25021
|
-
...resourceMetadataUrl ? { resourceMetadataUrl: new URL(resourceMetadataUrl) } : {}
|
|
25022
|
-
});
|
|
25103
|
+
const discovered = await discoverMcpOAuthServerFromProbe(url, safeFetch, initial);
|
|
25023
25104
|
const metadata = discovered.authorizationServerMetadata;
|
|
25024
25105
|
if (metadata?.authorization_endpoint && metadata.token_endpoint) return {
|
|
25025
25106
|
url,
|
|
25026
25107
|
mode: "oauth",
|
|
25027
|
-
unauthenticatedStatus: status,
|
|
25108
|
+
unauthenticatedStatus: initial.status,
|
|
25028
25109
|
oauth: {
|
|
25029
25110
|
issuer: metadata.issuer,
|
|
25030
25111
|
authorizationEndpoint: metadata.authorization_endpoint,
|
|
25031
25112
|
tokenEndpoint: metadata.token_endpoint,
|
|
25032
25113
|
registrationEndpoint: metadata.registration_endpoint,
|
|
25033
|
-
scopes:
|
|
25114
|
+
scopes: discovered.challengeScope ? discovered.challengeScope.split(/\s+/).filter(Boolean) : scopesFromMetadata(discovered.resourceMetadata),
|
|
25034
25115
|
resource: discovered.resourceMetadata?.resource,
|
|
25035
25116
|
resourceName: resourceNameFromMetadata(discovered.resourceMetadata)
|
|
25036
25117
|
}
|
|
25037
25118
|
};
|
|
25038
25119
|
} catch (error) {
|
|
25039
|
-
logProbeFallback("
|
|
25040
|
-
}
|
|
25041
|
-
try {
|
|
25042
|
-
const protectedResource = await discoverOAuthProtectedResourceMetadata(serverUrl, {}, safeFetch);
|
|
25043
|
-
const authorizationServerUrl = protectedResource.authorization_servers?.[0] ?? serverUrl.origin;
|
|
25044
|
-
assertPublicHttpUrl(authorizationServerUrl);
|
|
25045
|
-
const metadata = await discoverAuthorizationServerMetadata(authorizationServerUrl, { fetchFn: safeFetch });
|
|
25046
|
-
if (metadata?.authorization_endpoint && metadata.token_endpoint) return {
|
|
25047
|
-
url,
|
|
25048
|
-
mode: "oauth",
|
|
25049
|
-
unauthenticatedStatus: status,
|
|
25050
|
-
oauth: {
|
|
25051
|
-
issuer: metadata.issuer,
|
|
25052
|
-
authorizationEndpoint: metadata.authorization_endpoint,
|
|
25053
|
-
tokenEndpoint: metadata.token_endpoint,
|
|
25054
|
-
registrationEndpoint: metadata.registration_endpoint,
|
|
25055
|
-
scopes: mergeOAuthScopes(scopesFromMetadata(metadata), scopesFromMetadata(protectedResource)),
|
|
25056
|
-
resource: protectedResource.resource,
|
|
25057
|
-
resourceName: resourceNameFromMetadata(protectedResource)
|
|
25058
|
-
}
|
|
25059
|
-
};
|
|
25060
|
-
} catch (error) {
|
|
25061
|
-
logProbeFallback("discoverOAuthProtectedResourceMetadata", error);
|
|
25120
|
+
logProbeFallback("discoverMcpOAuthServer", error);
|
|
25062
25121
|
}
|
|
25063
|
-
if (status === 401 || status === 403) return {
|
|
25122
|
+
if (initial.status === 401 || initial.status === 403) return {
|
|
25064
25123
|
url,
|
|
25065
25124
|
mode: "token",
|
|
25066
|
-
unauthenticatedStatus: status,
|
|
25125
|
+
unauthenticatedStatus: initial.status,
|
|
25067
25126
|
scheme: "BEARER_TOKEN"
|
|
25068
25127
|
};
|
|
25069
25128
|
return {
|
|
25070
25129
|
url,
|
|
25071
25130
|
mode: "none",
|
|
25072
|
-
unauthenticatedStatus: status
|
|
25131
|
+
unauthenticatedStatus: initial.status
|
|
25073
25132
|
};
|
|
25074
25133
|
}
|
|
25075
25134
|
/** Best-effort server metadata for no-auth MCP servers (initialize handshake). */
|
|
@@ -31886,11 +31945,70 @@ async function describeCredentialBindings(requirements, context) {
|
|
|
31886
31945
|
preload
|
|
31887
31946
|
}, preload));
|
|
31888
31947
|
}
|
|
31889
|
-
|
|
31890
|
-
|
|
31891
|
-
|
|
31892
|
-
|
|
31893
|
-
return
|
|
31948
|
+
const DEFAULT_STATE_TTL_MS = 600 * 1e3;
|
|
31949
|
+
function defaultSigningKey() {
|
|
31950
|
+
const secret = process.env.CREDENTIALS_ENCRYPTION_KEY?.trim();
|
|
31951
|
+
if (!secret) throw new Error("CREDENTIALS_ENCRYPTION_KEY is required");
|
|
31952
|
+
return secret;
|
|
31953
|
+
}
|
|
31954
|
+
function signPayload(payload, signingKey) {
|
|
31955
|
+
return createHmac("sha256", signingKey()).update(payload).digest("base64url");
|
|
31956
|
+
}
|
|
31957
|
+
function createOAuthState(options = {}) {
|
|
31958
|
+
const signingKey = options.signingKey ?? defaultSigningKey;
|
|
31959
|
+
const payload = options.payload ?? {};
|
|
31960
|
+
const payloadSegment = (options.serializePayload ?? (() => ""))(payload);
|
|
31961
|
+
const id = randomBytes(16).toString("hex");
|
|
31962
|
+
const expiresAt = Date.now() + (options.ttlMs ?? DEFAULT_STATE_TTL_MS);
|
|
31963
|
+
const signedPayload = payloadSegment ? `${id}.${expiresAt}.${payloadSegment}` : `${id}.${expiresAt}`;
|
|
31964
|
+
return {
|
|
31965
|
+
state: `${signedPayload}.${signPayload(signedPayload, signingKey)}`,
|
|
31966
|
+
payload,
|
|
31967
|
+
id,
|
|
31968
|
+
expiresAt
|
|
31969
|
+
};
|
|
31970
|
+
}
|
|
31971
|
+
function verifyOAuthState(options, state) {
|
|
31972
|
+
if (!state) return null;
|
|
31973
|
+
const hasPayload = Boolean(options.deserializePayload);
|
|
31974
|
+
const parts = state.split(".");
|
|
31975
|
+
if (parts.length !== (hasPayload ? 4 : 3)) return null;
|
|
31976
|
+
const [id, expiresRaw] = parts;
|
|
31977
|
+
const signature = parts.at(-1);
|
|
31978
|
+
if (!id || !expiresRaw || !signature) return null;
|
|
31979
|
+
const payloadSegment = hasPayload ? parts[2] ?? "" : "";
|
|
31980
|
+
const expected = signPayload(hasPayload ? `${id}.${expiresRaw}.${payloadSegment}` : `${id}.${expiresRaw}`, options.signingKey ?? defaultSigningKey);
|
|
31981
|
+
const signatureBuffer = Buffer.from(signature);
|
|
31982
|
+
const expectedBuffer = Buffer.from(expected);
|
|
31983
|
+
if (signatureBuffer.length !== expectedBuffer.length || !timingSafeEqual(signatureBuffer, expectedBuffer)) return null;
|
|
31984
|
+
const expiresAt = Number(expiresRaw);
|
|
31985
|
+
if (!Number.isFinite(expiresAt) || expiresAt < Date.now()) return null;
|
|
31986
|
+
if (!hasPayload) return {};
|
|
31987
|
+
return options.deserializePayload(payloadSegment);
|
|
31988
|
+
}
|
|
31989
|
+
async function encodeOAuthState(payload, ttlMs) {
|
|
31990
|
+
const { state, id, expiresAt } = createOAuthState({
|
|
31991
|
+
payload,
|
|
31992
|
+
ttlMs
|
|
31993
|
+
});
|
|
31994
|
+
await putOAuthPendingState({
|
|
31995
|
+
id,
|
|
31996
|
+
payloadCiphertext: encryptCredentialPayload(JSON.stringify(payload)),
|
|
31997
|
+
expiresAt: new Date(expiresAt)
|
|
31998
|
+
});
|
|
31999
|
+
return state;
|
|
32000
|
+
}
|
|
32001
|
+
async function decodeOAuthState(state) {
|
|
32002
|
+
const verified = verifyOAuthState({}, state);
|
|
32003
|
+
const id = state.split(".")[0];
|
|
32004
|
+
if (!verified || !id) throw new Error("OAuth state is invalid or expired");
|
|
32005
|
+
const ciphertext = await takeOAuthPendingState(id);
|
|
32006
|
+
if (!ciphertext) throw new Error("OAuth state is invalid or expired");
|
|
32007
|
+
try {
|
|
32008
|
+
return JSON.parse(decryptCredentialPayload(ciphertext));
|
|
32009
|
+
} catch {
|
|
32010
|
+
throw new Error("OAuth state is invalid or expired");
|
|
32011
|
+
}
|
|
31894
32012
|
}
|
|
31895
32013
|
function oauthAppMetadata(oauth, mcpUrl, options) {
|
|
31896
32014
|
return {
|
|
@@ -31901,7 +32019,9 @@ function oauthAppMetadata(oauth, mcpUrl, options) {
|
|
|
31901
32019
|
resource: oauth.resource,
|
|
31902
32020
|
issuer: oauth.issuer,
|
|
31903
32021
|
scopes: oauth.scopes,
|
|
31904
|
-
...options?.tokenEndpointAuthMethod ? { tokenEndpointAuthMethod: options.tokenEndpointAuthMethod } : {}
|
|
32022
|
+
...options?.tokenEndpointAuthMethod ? { tokenEndpointAuthMethod: options.tokenEndpointAuthMethod } : {},
|
|
32023
|
+
...options?.clientRegistrationMode ? { clientRegistrationMode: options.clientRegistrationMode } : {},
|
|
32024
|
+
...options?.redirectUri ? { redirectUri: options.redirectUri } : {}
|
|
31905
32025
|
};
|
|
31906
32026
|
}
|
|
31907
32027
|
function oauthClientSecretForStorage(clientSecret) {
|
|
@@ -31931,6 +32051,63 @@ async function discoverMcpApp(url) {
|
|
|
31931
32051
|
}
|
|
31932
32052
|
};
|
|
31933
32053
|
}
|
|
32054
|
+
var McpOAuthConnectError = class extends Error {
|
|
32055
|
+
phase;
|
|
32056
|
+
diagnostics;
|
|
32057
|
+
constructor(phase, message, diagnostics = {}) {
|
|
32058
|
+
super(message);
|
|
32059
|
+
this.phase = phase;
|
|
32060
|
+
this.diagnostics = diagnostics;
|
|
32061
|
+
this.name = "McpOAuthConnectError";
|
|
32062
|
+
}
|
|
32063
|
+
};
|
|
32064
|
+
function oauthErrorCode(error) {
|
|
32065
|
+
if (!error || typeof error !== "object" || !("errorCode" in error)) return;
|
|
32066
|
+
const value = Reflect.get(error, "errorCode");
|
|
32067
|
+
return typeof value === "string" && /^[a-z0-9_]+$/i.test(value) ? value : void 0;
|
|
32068
|
+
}
|
|
32069
|
+
const SUPPORTED_TOKEN_AUTH_METHODS = [
|
|
32070
|
+
"client_secret_basic",
|
|
32071
|
+
"client_secret_post",
|
|
32072
|
+
"none"
|
|
32073
|
+
];
|
|
32074
|
+
function requireHttpsUrl(value, label) {
|
|
32075
|
+
const url = new URL(value);
|
|
32076
|
+
if (url.protocol !== "https:") throw new Error(`${label} must use HTTPS`);
|
|
32077
|
+
return url;
|
|
32078
|
+
}
|
|
32079
|
+
function validateRedirectUri(value) {
|
|
32080
|
+
const url = new URL(value);
|
|
32081
|
+
const isLocalhost = url.hostname === "localhost" || url.hostname === "127.0.0.1";
|
|
32082
|
+
if (url.protocol !== "https:" && !(url.protocol === "http:" && isLocalhost)) throw new Error("OAuth redirect URI must use HTTPS or HTTP localhost");
|
|
32083
|
+
}
|
|
32084
|
+
function validateMcpResource(mcpUrl, resourceUrl) {
|
|
32085
|
+
const serverUrl = new URL(mcpUrl);
|
|
32086
|
+
if (serverUrl.hash || resourceUrl.hash || resourceUrl.toString() !== serverUrl.toString()) throw new Error("MCP protected resource does not identify the requested MCP server");
|
|
32087
|
+
}
|
|
32088
|
+
function selectTokenEndpointAuthMethod(metadata) {
|
|
32089
|
+
const advertised = metadata.token_endpoint_auth_methods_supported;
|
|
32090
|
+
const supported = advertised?.length ? advertised : ["client_secret_basic"];
|
|
32091
|
+
const selected = SUPPORTED_TOKEN_AUTH_METHODS.find((method) => supported.includes(method));
|
|
32092
|
+
if (!selected) throw new Error(`MCP authorization server only supports unsupported token endpoint authentication methods: ${supported.join(", ")}`);
|
|
32093
|
+
return selected;
|
|
32094
|
+
}
|
|
32095
|
+
function validateAuthorizationCapabilities(metadata) {
|
|
32096
|
+
if (!metadata.response_types_supported?.includes("code")) throw new Error("MCP authorization server does not support the code response type");
|
|
32097
|
+
if (metadata.grant_types_supported?.length && !metadata.grant_types_supported.includes("authorization_code")) throw new Error("MCP authorization server does not support authorization_code");
|
|
32098
|
+
if (!metadata.code_challenge_methods_supported?.includes("S256")) throw new Error("MCP authorization server does not advertise PKCE S256 support");
|
|
32099
|
+
}
|
|
32100
|
+
function validateRegisteredClientInformation(clientInformation, requestedMethod, advertisedMethods) {
|
|
32101
|
+
const assignedMethod = clientInformation.token_endpoint_auth_method ?? requestedMethod;
|
|
32102
|
+
if (!SUPPORTED_TOKEN_AUTH_METHODS.includes(assignedMethod)) throw new Error(`MCP authorization server assigned unsupported token endpoint authentication method: ${assignedMethod}`);
|
|
32103
|
+
if (!advertisedMethods.includes(assignedMethod)) throw new Error(`MCP authorization server assigned an unadvertised token endpoint authentication method: ${assignedMethod}`);
|
|
32104
|
+
if (assignedMethod !== "none" && !clientInformation.client_secret?.trim()) throw new Error(`MCP authorization server assigned ${assignedMethod} without a client_secret`);
|
|
32105
|
+
return {
|
|
32106
|
+
...clientInformation,
|
|
32107
|
+
token_endpoint_auth_method: assignedMethod,
|
|
32108
|
+
registrationMode: "dcr"
|
|
32109
|
+
};
|
|
32110
|
+
}
|
|
31934
32111
|
/**
|
|
31935
32112
|
* Prefer CIMD (URL client_id) when the AS advertises support and we have an
|
|
31936
32113
|
* HTTPS metadata URL; otherwise DCR. Localhost HTTP cannot be a CIMD client_id
|
|
@@ -31941,58 +32118,141 @@ async function discoverMcpApp(url) {
|
|
|
31941
32118
|
*/
|
|
31942
32119
|
async function resolveMcpOAuthClientInformation(options) {
|
|
31943
32120
|
const supportsCimd = options.metadata.client_id_metadata_document_supported === true;
|
|
31944
|
-
|
|
32121
|
+
const supportsPublicClient = options.metadata.token_endpoint_auth_methods_supported?.includes("none") === true;
|
|
32122
|
+
if (supportsCimd && supportsPublicClient && Boolean(options.clientMetadataUrl) && isHttpsUrl(options.clientMetadataUrl) && options.clientMetadataUrl) return {
|
|
31945
32123
|
client_id: options.clientMetadataUrl,
|
|
31946
|
-
token_endpoint_auth_method: "none"
|
|
31947
|
-
|
|
31948
|
-
|
|
31949
|
-
|
|
31950
|
-
|
|
31951
|
-
|
|
31952
|
-
|
|
31953
|
-
|
|
31954
|
-
|
|
31955
|
-
|
|
31956
|
-
|
|
31957
|
-
|
|
31958
|
-
|
|
31959
|
-
|
|
32124
|
+
token_endpoint_auth_method: "none",
|
|
32125
|
+
registrationMode: "cimd"
|
|
32126
|
+
};
|
|
32127
|
+
if (options.metadata.registration_endpoint) {
|
|
32128
|
+
const grantTypes = ["authorization_code", ...options.metadata.grant_types_supported?.includes("refresh_token") ? ["refresh_token"] : []];
|
|
32129
|
+
const tokenEndpointAuthMethod = selectTokenEndpointAuthMethod(options.metadata);
|
|
32130
|
+
const currentlySupportedAuthMethods = options.metadata.token_endpoint_auth_methods_supported?.length ? options.metadata.token_endpoint_auth_methods_supported : ["client_secret_basic"];
|
|
32131
|
+
const existing = await getDecryptedOAuthAppBySlug(options.appSlug);
|
|
32132
|
+
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 {
|
|
32133
|
+
client_id: existing.clientId,
|
|
32134
|
+
...existing.clientSecret ? { client_secret: existing.clientSecret } : {},
|
|
32135
|
+
token_endpoint_auth_method: existing.metadata.tokenEndpointAuthMethod,
|
|
32136
|
+
registrationMode: "dcr"
|
|
32137
|
+
};
|
|
32138
|
+
let providerHttpStatus;
|
|
32139
|
+
try {
|
|
32140
|
+
const safeFetch = createPublicHttpFetch();
|
|
32141
|
+
return validateRegisteredClientInformation(await registerClient(options.authorizationServerUrl, {
|
|
32142
|
+
metadata: options.metadata,
|
|
32143
|
+
clientMetadata: {
|
|
32144
|
+
client_name: "Keystroke",
|
|
32145
|
+
redirect_uris: [options.redirectUri],
|
|
32146
|
+
grant_types: grantTypes,
|
|
32147
|
+
response_types: ["code"],
|
|
32148
|
+
token_endpoint_auth_method: tokenEndpointAuthMethod
|
|
32149
|
+
},
|
|
32150
|
+
scope: options.scope,
|
|
32151
|
+
fetchFn: async (input, init) => {
|
|
32152
|
+
const response = await safeFetch(input, init);
|
|
32153
|
+
providerHttpStatus = response.status;
|
|
32154
|
+
return response;
|
|
32155
|
+
}
|
|
32156
|
+
}), tokenEndpointAuthMethod, currentlySupportedAuthMethods);
|
|
32157
|
+
} catch (error) {
|
|
32158
|
+
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", {
|
|
32159
|
+
correlationId: options.correlationId,
|
|
32160
|
+
authorizationServerUrl: options.authorizationServerUrl,
|
|
32161
|
+
registrationEndpoint: options.metadata.registration_endpoint,
|
|
32162
|
+
grantTypes,
|
|
32163
|
+
tokenEndpointAuthMethod,
|
|
32164
|
+
...providerHttpStatus ? { providerHttpStatus } : {},
|
|
32165
|
+
...oauthErrorCode(error) ? { oauthError: oauthErrorCode(error) } : {}
|
|
32166
|
+
});
|
|
32167
|
+
}
|
|
32168
|
+
}
|
|
32169
|
+
if (supportsCimd) throw new Error("Authorization server supports Client ID Metadata Documents, but not Keystroke's public-client authentication or HTTPS metadata URL");
|
|
31960
32170
|
throw new Error("MCP authorization server does not support Client ID Metadata Documents or Dynamic Client Registration");
|
|
31961
32171
|
}
|
|
31962
32172
|
async function beginMcpOAuthConnect(options) {
|
|
31963
32173
|
const appUrl = options.app.url?.trim();
|
|
31964
32174
|
if (!appUrl || options.app.source !== "mcp" || options.app.authKind !== "oauth") throw new Error("App is not a direct MCP OAuth app");
|
|
31965
|
-
const
|
|
32175
|
+
const correlationId = crypto.randomUUID();
|
|
32176
|
+
let discovered;
|
|
32177
|
+
try {
|
|
32178
|
+
validateRedirectUri(options.redirectUri);
|
|
32179
|
+
requireHttpsUrl(appUrl, "MCP server URL");
|
|
32180
|
+
discovered = await discoverMcpOAuthServer(appUrl);
|
|
32181
|
+
} catch {
|
|
32182
|
+
throw new McpOAuthConnectError("resource_discovery", "Failed to discover MCP OAuth protected-resource metadata", { correlationId });
|
|
32183
|
+
}
|
|
31966
32184
|
const metadata = discovered.authorizationServerMetadata;
|
|
31967
|
-
|
|
32185
|
+
try {
|
|
32186
|
+
if (!metadata?.authorization_endpoint || !metadata.token_endpoint) throw new Error("MCP server does not expose OAuth authorization metadata");
|
|
32187
|
+
validateAuthorizationCapabilities(metadata);
|
|
32188
|
+
requireHttpsUrl(discovered.authorizationServerUrl, "OAuth authorization server URL");
|
|
32189
|
+
requireHttpsUrl(metadata.authorization_endpoint, "OAuth authorization endpoint");
|
|
32190
|
+
requireHttpsUrl(metadata.token_endpoint, "OAuth token endpoint");
|
|
32191
|
+
if (metadata.registration_endpoint) requireHttpsUrl(metadata.registration_endpoint, "OAuth registration endpoint");
|
|
32192
|
+
} catch {
|
|
32193
|
+
throw new McpOAuthConnectError("authorization_server_discovery", "MCP authorization server metadata is incompatible", {
|
|
32194
|
+
correlationId,
|
|
32195
|
+
authorizationServerUrl: discovered.authorizationServerUrl
|
|
32196
|
+
});
|
|
32197
|
+
}
|
|
32198
|
+
let resourceUrl;
|
|
32199
|
+
try {
|
|
32200
|
+
resourceUrl = requireHttpsUrl(discovered.resourceMetadata.resource, "MCP protected resource");
|
|
32201
|
+
if (resourceUrl.hash) throw new Error("MCP protected resource must not include a fragment");
|
|
32202
|
+
validateMcpResource(appUrl, resourceUrl);
|
|
32203
|
+
} catch {
|
|
32204
|
+
throw new McpOAuthConnectError("resource_discovery", "MCP protected-resource metadata contains an invalid resource", { correlationId });
|
|
32205
|
+
}
|
|
31968
32206
|
const oauth = {
|
|
31969
32207
|
issuer: metadata.issuer,
|
|
31970
32208
|
authorizationEndpoint: metadata.authorization_endpoint,
|
|
31971
32209
|
tokenEndpoint: metadata.token_endpoint,
|
|
31972
32210
|
registrationEndpoint: metadata.registration_endpoint,
|
|
31973
|
-
scopes:
|
|
31974
|
-
resource:
|
|
32211
|
+
scopes: discovered.challengeScope ? discovered.challengeScope.split(/\s+/).filter(Boolean) : discovered.resourceMetadata.scopes_supported ?? [],
|
|
32212
|
+
resource: resourceUrl.toString(),
|
|
31975
32213
|
resourceName: discovered.resourceMetadata?.resource_name?.trim() || void 0
|
|
31976
32214
|
};
|
|
31977
|
-
const
|
|
31978
|
-
const
|
|
31979
|
-
const
|
|
31980
|
-
|
|
31981
|
-
|
|
31982
|
-
|
|
31983
|
-
|
|
31984
|
-
|
|
31985
|
-
|
|
31986
|
-
|
|
31987
|
-
|
|
31988
|
-
|
|
31989
|
-
|
|
31990
|
-
|
|
31991
|
-
|
|
31992
|
-
|
|
31993
|
-
})
|
|
31994
|
-
|
|
32215
|
+
const requestedScopes = options.input.scopes?.map((value) => value.trim()).filter(Boolean) ?? [];
|
|
32216
|
+
const challengedScopes = discovered.challengeScope?.split(/\s+/).filter(Boolean) ?? [];
|
|
32217
|
+
const selectedScopes = challengedScopes.length > 0 ? [...new Set([...challengedScopes, ...requestedScopes])] : requestedScopes.length > 0 ? requestedScopes : discovered.resourceMetadata.scopes_supported ?? [];
|
|
32218
|
+
const scope = selectedScopes.length > 0 ? selectedScopes.join(" ") : void 0;
|
|
32219
|
+
let clientInformation;
|
|
32220
|
+
try {
|
|
32221
|
+
clientInformation = await resolveMcpOAuthClientInformation({
|
|
32222
|
+
appSlug: options.app.slug,
|
|
32223
|
+
correlationId,
|
|
32224
|
+
authorizationServerUrl: discovered.authorizationServerUrl,
|
|
32225
|
+
metadata,
|
|
32226
|
+
resource: resourceUrl.toString(),
|
|
32227
|
+
redirectUri: options.redirectUri,
|
|
32228
|
+
scope,
|
|
32229
|
+
clientMetadataUrl: options.clientMetadataUrl
|
|
32230
|
+
});
|
|
32231
|
+
} catch (error) {
|
|
32232
|
+
if (error instanceof McpOAuthConnectError) throw error;
|
|
32233
|
+
throw new McpOAuthConnectError("client_registration", "MCP authorization server does not support a compatible client registration", {
|
|
32234
|
+
correlationId,
|
|
32235
|
+
authorizationServerUrl: discovered.authorizationServerUrl
|
|
32236
|
+
});
|
|
32237
|
+
}
|
|
32238
|
+
try {
|
|
32239
|
+
await ensureOAuthApp({
|
|
32240
|
+
slug: options.app.slug,
|
|
32241
|
+
provider: "mcp",
|
|
32242
|
+
tokenStrategy: "refresh",
|
|
32243
|
+
clientId: clientInformation.client_id,
|
|
32244
|
+
clientSecret: oauthClientSecretForStorage(clientInformation.client_secret),
|
|
32245
|
+
metadata: oauthAppMetadata(oauth, appUrl, {
|
|
32246
|
+
tokenEndpointAuthMethod: clientInformation.token_endpoint_auth_method,
|
|
32247
|
+
clientRegistrationMode: clientInformation.registrationMode,
|
|
32248
|
+
redirectUri: options.redirectUri
|
|
32249
|
+
})
|
|
32250
|
+
});
|
|
32251
|
+
} catch {
|
|
32252
|
+
throw new McpOAuthConnectError("credential_persistence", "Failed to save MCP OAuth client registration", { correlationId });
|
|
32253
|
+
}
|
|
31995
32254
|
const statePayload = {
|
|
32255
|
+
correlationId,
|
|
31996
32256
|
codeVerifier: "",
|
|
31997
32257
|
appSlug: options.app.slug,
|
|
31998
32258
|
organizationId: options.organizationId,
|
|
@@ -32004,76 +32264,107 @@ async function beginMcpOAuthConnect(options) {
|
|
|
32004
32264
|
authorizationServerUrl: discovered.authorizationServerUrl,
|
|
32005
32265
|
resource: oauth.resource,
|
|
32006
32266
|
oauthMetadata: oauth,
|
|
32267
|
+
authorizationServerMetadata: metadata,
|
|
32007
32268
|
mcpUrl: appUrl,
|
|
32008
32269
|
redirectUri: options.redirectUri,
|
|
32009
32270
|
clientId: clientInformation.client_id,
|
|
32010
32271
|
clientSecret: clientInformation.client_secret,
|
|
32011
32272
|
tokenEndpointAuthMethod: clientInformation.token_endpoint_auth_method,
|
|
32273
|
+
clientRegistrationMode: clientInformation.registrationMode,
|
|
32012
32274
|
label: options.input.label,
|
|
32013
32275
|
credentialInstanceId: options.input.credentialInstanceId
|
|
32014
32276
|
};
|
|
32015
|
-
|
|
32016
|
-
|
|
32017
|
-
|
|
32018
|
-
|
|
32019
|
-
|
|
32020
|
-
|
|
32021
|
-
|
|
32277
|
+
let authorizationUrl;
|
|
32278
|
+
let codeVerifier;
|
|
32279
|
+
try {
|
|
32280
|
+
({authorizationUrl, codeVerifier} = await startAuthorization(discovered.authorizationServerUrl, {
|
|
32281
|
+
metadata,
|
|
32282
|
+
clientInformation,
|
|
32283
|
+
redirectUrl: options.redirectUri,
|
|
32284
|
+
scope,
|
|
32285
|
+
resource: resourceUrl
|
|
32286
|
+
}));
|
|
32287
|
+
} catch (error) {
|
|
32288
|
+
throw new McpOAuthConnectError("authorization_start", "Failed to start MCP authorization", {
|
|
32289
|
+
correlationId,
|
|
32290
|
+
authorizationServerUrl: discovered.authorizationServerUrl,
|
|
32291
|
+
...oauthErrorCode(error) ? { oauthError: oauthErrorCode(error) } : {}
|
|
32292
|
+
});
|
|
32293
|
+
}
|
|
32022
32294
|
statePayload.codeVerifier = codeVerifier;
|
|
32023
|
-
const state = encodeOAuthState(statePayload);
|
|
32295
|
+
const state = await encodeOAuthState(statePayload);
|
|
32024
32296
|
authorizationUrl.searchParams.set("state", state);
|
|
32025
32297
|
return { authorizeUrl: authorizationUrl.toString() };
|
|
32026
32298
|
}
|
|
32027
32299
|
async function completeMcpOAuthConnect(options) {
|
|
32028
|
-
const payload =
|
|
32029
|
-
const metadata = {
|
|
32030
|
-
issuer: payload.oauthMetadata.issuer ?? payload.authorizationServerUrl,
|
|
32031
|
-
authorization_endpoint: payload.oauthMetadata.authorizationEndpoint,
|
|
32032
|
-
token_endpoint: payload.oauthMetadata.tokenEndpoint,
|
|
32033
|
-
registration_endpoint: payload.oauthMetadata.registrationEndpoint,
|
|
32034
|
-
scopes_supported: payload.oauthMetadata.scopes,
|
|
32035
|
-
response_types_supported: ["code"],
|
|
32036
|
-
code_challenge_methods_supported: ["S256"]
|
|
32037
|
-
};
|
|
32300
|
+
const { payload } = options;
|
|
32038
32301
|
const resourceUrl = payload.resource ? new URL(payload.resource) : void 0;
|
|
32039
|
-
|
|
32040
|
-
|
|
32041
|
-
|
|
32042
|
-
|
|
32043
|
-
|
|
32044
|
-
|
|
32045
|
-
|
|
32046
|
-
|
|
32047
|
-
|
|
32048
|
-
|
|
32049
|
-
|
|
32050
|
-
|
|
32051
|
-
|
|
32052
|
-
|
|
32053
|
-
|
|
32054
|
-
|
|
32055
|
-
|
|
32056
|
-
|
|
32057
|
-
|
|
32058
|
-
|
|
32059
|
-
|
|
32060
|
-
|
|
32061
|
-
|
|
32062
|
-
|
|
32063
|
-
|
|
32064
|
-
|
|
32065
|
-
|
|
32066
|
-
|
|
32067
|
-
|
|
32068
|
-
|
|
32069
|
-
|
|
32070
|
-
|
|
32071
|
-
|
|
32072
|
-
|
|
32073
|
-
|
|
32074
|
-
|
|
32075
|
-
|
|
32076
|
-
|
|
32302
|
+
if (!resourceUrl) throw new McpOAuthConnectError("authorization_callback", "OAuth callback state is missing the MCP resource", { correlationId: payload.correlationId });
|
|
32303
|
+
let tokens;
|
|
32304
|
+
let providerHttpStatus;
|
|
32305
|
+
try {
|
|
32306
|
+
const safeFetch = createPublicHttpFetch();
|
|
32307
|
+
tokens = await exchangeAuthorization(payload.authorizationServerUrl, {
|
|
32308
|
+
metadata: payload.authorizationServerMetadata,
|
|
32309
|
+
clientInformation: {
|
|
32310
|
+
client_id: payload.clientId,
|
|
32311
|
+
...payload.clientSecret ? { client_secret: payload.clientSecret } : {},
|
|
32312
|
+
...payload.tokenEndpointAuthMethod ? { token_endpoint_auth_method: payload.tokenEndpointAuthMethod } : {}
|
|
32313
|
+
},
|
|
32314
|
+
authorizationCode: options.code,
|
|
32315
|
+
codeVerifier: payload.codeVerifier,
|
|
32316
|
+
redirectUri: payload.redirectUri,
|
|
32317
|
+
resource: resourceUrl,
|
|
32318
|
+
fetchFn: async (input, init) => {
|
|
32319
|
+
const response = await safeFetch(input, init);
|
|
32320
|
+
providerHttpStatus = response.status;
|
|
32321
|
+
return response;
|
|
32322
|
+
}
|
|
32323
|
+
});
|
|
32324
|
+
} catch (error) {
|
|
32325
|
+
throw new McpOAuthConnectError("token_exchange", "MCP OAuth token exchange failed", {
|
|
32326
|
+
correlationId: payload.correlationId,
|
|
32327
|
+
authorizationServerUrl: payload.authorizationServerUrl,
|
|
32328
|
+
...providerHttpStatus ? { providerHttpStatus } : {},
|
|
32329
|
+
...oauthErrorCode(error) ? { oauthError: oauthErrorCode(error) } : {}
|
|
32330
|
+
});
|
|
32331
|
+
}
|
|
32332
|
+
let oauthAppId;
|
|
32333
|
+
let connectionId;
|
|
32334
|
+
try {
|
|
32335
|
+
({id: oauthAppId} = await ensureOAuthApp({
|
|
32336
|
+
slug: payload.appSlug,
|
|
32337
|
+
provider: "mcp",
|
|
32338
|
+
tokenStrategy: "refresh",
|
|
32339
|
+
clientId: payload.clientId,
|
|
32340
|
+
clientSecret: oauthClientSecretForStorage(payload.clientSecret),
|
|
32341
|
+
metadata: oauthAppMetadata(payload.oauthMetadata, payload.mcpUrl, {
|
|
32342
|
+
tokenEndpointAuthMethod: payload.tokenEndpointAuthMethod,
|
|
32343
|
+
clientRegistrationMode: payload.clientRegistrationMode,
|
|
32344
|
+
redirectUri: payload.redirectUri
|
|
32345
|
+
})
|
|
32346
|
+
}));
|
|
32347
|
+
connectionId = await saveOAuthConnection({
|
|
32348
|
+
appId: oauthAppId,
|
|
32349
|
+
externalId: payload.userId,
|
|
32350
|
+
accessToken: tokens.access_token,
|
|
32351
|
+
refreshToken: tokens.refresh_token,
|
|
32352
|
+
accessTokenExpiresAt: accessTokenExpiresAt(tokens.expires_in),
|
|
32353
|
+
grantedScopes: grantedScopesFromToken(tokens.scope, payload.oauthMetadata.scopes),
|
|
32354
|
+
metadata: { mcpUrl: payload.oauthMetadata.resource }
|
|
32355
|
+
});
|
|
32356
|
+
await ensureOAuthCredentialInstance({
|
|
32357
|
+
credentialKey: payload.appSlug,
|
|
32358
|
+
connectionId,
|
|
32359
|
+
accountLabel: payload.label,
|
|
32360
|
+
externalId: payload.userId,
|
|
32361
|
+
userLabel: payload.label,
|
|
32362
|
+
targets: payload.scopeTargets,
|
|
32363
|
+
credentialInstanceId: payload.credentialInstanceId
|
|
32364
|
+
});
|
|
32365
|
+
} catch {
|
|
32366
|
+
throw new McpOAuthConnectError("credential_persistence", "Failed to save the MCP OAuth credential", { correlationId: payload.correlationId });
|
|
32367
|
+
}
|
|
32077
32368
|
return {
|
|
32078
32369
|
appSlug: payload.appSlug,
|
|
32079
32370
|
connectionId,
|
|
@@ -37704,6 +37995,6 @@ function minioStoragePlugin(options = {}) {
|
|
|
37704
37995
|
};
|
|
37705
37996
|
}
|
|
37706
37997
|
//#endregion
|
|
37707
|
-
export {
|
|
37998
|
+
export { ChannelPlatformSchema as $, TemplateKindSchema as $n, mapProjectSettings as $r, ListProjectDeploymentsResponseSchema as $t, decodeOAuthState as A, ProjectSlugAvailabilityResponseSchema as An, WorkspaceTriggerDetailSchema as Ar, GetTemplateResponseSchema as At, readCredentialInstanceSecret as B, SkillSummaryDetailResponseSchema as Bn, deriveCredentialInstanceSlug as Br, InviteProjectMembersResponseSchema as Bt, userAvatarStorageKey as C, PresignProjectSourceResponseSchema as Cn, WorkflowFormResponseSchema as Cr, ErrorResponseSchema as Ct, McpOAuthConnectError as D, ProjectResponseSchema as Dn, WorkflowSummaryDetailResponseSchema as Dr, GetAppCatalogEntryResponseSchema as Dt, cronPayloadSchema as E, ProjectReachabilityResponseSchema as En, WorkflowRunInputsSchema as Er, FinalizeCustomAppLogoResponseSchema as Et, isDiscoveryError as F, PublicModelsResponseSchema as Fn, WorkspaceWorkflowOverviewSchema as Fr, HistoryRunListQuerySchema as Ft, ActiveOrganizationResponseSchema as G, StartMcpOAuthConnectionInputSchema as Gn, jsonSchemaToWorkflowInputSchema as Gr, ListChannelPlatformsResponseSchema as Gt, setManagedServiceCredential as H, SkillSummarySchema as Hn, isAllowedChatAttachmentMediaType as Hr, ListAgentWorkspaceFilesResponseSchema as Ht, withCredentialAssignments as I, PublishedFormListResponseSchema as In, agentMemoryFileId as Ir, HistoryRunListResponseSchema as It, AgentSummaryListResponseSchema as J, SubmitMarketingContactRequestSchema as Jn, mapOrganizationMember as Jr, ListManagedServiceCredentialsResponseSchema as Jt, AgentMemoryFileSummarySchema as K, StartMcpOAuthConnectionResultSchema as Kn, listenPortFromPublicUrl as Kr, ListCredentialsPageQuerySchema as Kt, PublicHttpUrlError as L, PublishedFormSchema as Ln, agentWorkspaceFileId as Lr, InviteOrganizationMembersRequestSchema as Lt, discoverGraphqlApp as M, PublicFormMetadataSchema as Mn, WorkspaceTriggerListResponseSchema as Mr, GraphqlDiscoverResponseSchema as Mt, discoverMcpApp as N, PublicFormSubmitBodySchema as Nn, WorkspaceTriggerOverviewSchema as Nr, HistoryRunCancelResponseSchema as Nt, beginMcpOAuthConnect as O, ProjectSettingsResponseSchema as On, WorkflowSummaryListResponseSchema as Or, GetCredentialResponseSchema as Ot, discoverOpenApiApp as P, PublicFormSubmitResponseSchema as Pn, WorkspaceTriggerRunListResponseSchema as Pr, HistoryRunDetailResponseSchema as Pt, AppSlugAvailabilityResponseSchema as Q, TemplateFilesResponseSchema as Qn, mapProjectMember as Qr, ListOrganizationsResponseSchema as Qt, deleteCredentialInstanceSecret as R, RecentResourceListResponseSchema as Rn, buildCredentialInstanceLabel as Rr, InviteOrganizationMembersResponseSchema as Rt, publicKeystrokeAssetsObjectUrl as S, PresignProjectSourceRequestSchema as Sn, WorkflowCanvasSchema as Sr, DuplicateCredentialsResponseSchema as St, defaultSchedulerPlugin as T, PresignUserAvatarResponseSchema as Tn, WorkflowRunInputsPutBodySchema as Tr, FinalizeCustomAppLogoRequestSchema as Tt, ACTIVE_ORG_HEADER as U, SlugAvailabilityQuerySchema as Un, isHelloWorldTemplateSlug as Ur, ListApiKeysResponseSchema as Ut, setCredentialInstanceSecret as V, SkillSummaryListResponseSchema as Vn, displayCredentialAppName as Vr, ListAgentMemoryFilesResponseSchema as Vt, AcceptOrganizationInvitationResponseSchema as W, SlugAvailabilityResponseSchema as Wn, isLlmProviderSlug as Wr, ListAppsResponseSchema as Wt, AgentWorkspaceFileSummarySchema as X, SubmitTeamRequestRequestSchema as Xn, mapProjectArtifact as Xr, ListOrganizationMembersPageQuerySchema as Xt, AgentSummarySchema as Y, SubmitMarketingContactResponseSchema as Yn, mapProject as Yr, ListOrganizationInvitationsResponseSchema as Yt, AppSlugAvailabilityQuerySchema as Z, SubmitTeamRequestResponseSchema as Zn, mapProjectDeployment as Zr, ListOrganizationMembersPageResponseSchema as Zt, loadProjectSourceFiles as _, validationErrorResponse as _i, PresignChatAttachmentResponseSchema as _n, UserAvatarSchema as _r, DbProxyQueryRequestSchema as _t, ensureKeystrokeAssetsBucket as a, organizationSlugErrorCodeFromMessage as ai, MICRO_CREDITS_PER_CREDIT as an, UpdateCredentialRequestSchema as ar, CreateCredentialsResponseSchema as at, projectArtifactKey as b, __toESM as bi, PresignOrgLogoRequestSchema as bn, WorkflowCanvasCredentialBindingsSchema as br, DownloadActiveProjectSourceResponseSchema as bt, isChatAttachmentStorageKey as c, projectFileId as ci, McpDiscoverRequestSchema as cn, UpdateOrganizationMemberResponseSchema as cr, CreateOrganizationRequestSchema as ct, isOrgLogoStorageKey as d, resolveUniqueCredentialInstanceLabel as di, OpenApiDiscoverResponseSchema as dn, UpdateProjectMemberResponseSchema as dr, CreateProjectRequestSchema as dt, mapUserOrganization as ei, ListProjectFilesResponseSchema as en, TriggerAttachmentUpdateRequestSchema as er, CompleteProjectArtifactResponseSchema as et, isStorageBucketNotFoundError as f, schemaHasFileFields as fi, OrganizationSidebarBrandingPatchSchema as fn, UpdateProjectRequestSchema as fr, CreateProjectResponseSchema as ft, keystrokeAssetsOrgLogoKeyFromPublicUrl as g, validateWorkflowRunInputValues as gi, PresignChatAttachmentRequestSchema as gn, UserAvatarPatchSchema as gr, DEFAULT_WORKFLOW_OVERVIEW_MODEL as gt, keystrokeAssetsAvatarKeyFromPublicUrl as h, validateFormFieldConfig as hi, PROJECT_SLUG_TAKEN_MESSAGE as hn, UploadProjectSourceResponseSchema as hr, DEFAULT_WORKFLOW_CANVAS_MODEL as ht, createAssetsStorageClient as i, organizationInvitationAcceptPath as ii, ListTemplatesResponseSchema as in, TriggerRunListQuerySchema as ir, CreateCredentialsRequestSchema as it, describeCredentialBindings as j, ProjectSourceResourcesSchema as jn, WorkspaceTriggerFileSchema as jr, GraphqlDiscoverRequestSchema as jt, completeMcpOAuthConnect as k, ProjectSlugAvailabilityQuerySchema as kn, WorkflowSummarySchema as kr, GetCustomAppResponseSchema as kt, isKeystrokeAssetsAvatarPublicUrl as l, resolveExternalPlatformOrigin as li, McpDiscoverResponseSchema as ln, UpdateOrganizationRequestSchema as lr, CreateOrganizationResponseSchema as lt, isUserAvatarStorageKey as m, validateCredentialValueAgainstFields as mi, PLATFORM_RESOURCE_UNSUPPORTED_TEXT as mn, UploadProjectSourceManifestRequestSchema as mr, DEFAULT_TRIGGER_OVERVIEW_MODEL as mt, appLogoStorageKey as n, mergeUserPreferences as ni, ListProjectMetricsResponseSchema as nn, TriggerInvokeRequestSchema as nr, CreateApiKeyRequestSchema as nt, extractRouteManifestFromArtifact as o, parseAppSlug as oi, ManagedServiceCredentialSchema as on, UpdateManagedServiceCredentialRequestSchema as or, CreateCustomAppRequestSchema as ot, isStorageNotFoundError as p, schemaHasUnsupportedFormFields as pi, OrganizationSidebarBrandingSchema as pn, UpdateProjectSettingsRequestSchema as pr, DEFAULT_CLOUD_PLATFORM_ORIGIN as pt, AgentSummaryDetailResponseSchema as q, StoredProjectSourceManifestSchema as qn, mapOrganizationInvitation as qr, ListCredentialsPageResponseSchema as qt, chatAttachmentStorageKey as r, normalizeUserPreferences as ri, ListProjectsResponseSchema as rn, TriggerInvokeResponseSchema as rr, CreateApiKeyResponseSchema as rt, isAppLogoStorageKey as s, parseStoredRouteManifest as si, ManagedServiceKindSchema as sn, UpdateOrganizationMemberRequestSchema as sr, CreateCustomAppResponseSchema as st, RouteManifestNotFoundError as t, mcpEntityId as ti, ListProjectMembersResponseSchema as tn, TriggerInvokeInputsSchema as tr, ConnectManagedServiceCredentialRequestSchema as tt, isKeystrokeAssetsOrgLogoPublicUrl as u, resolvePublicFormFields as ui, OpenApiDiscoverRequestSchema as un, UpdateProjectMemberRequestSchema as ur, CreateProjectArtifactResponseSchema as ut, minioStoragePlugin as v, __commonJSMin as vi, PresignCustomAppLogoRequestSchema as vn, UserPreferencesPatchSchema as vr, DeclineOrganizationInvitationResponseSchema as vt, createJobQueue as w, PresignUserAvatarRequestSchema as wn, WorkflowFormUpsertBodySchema as wr, FilePartSchema as wt, projectSourceBlobKey as x, PresignOrgLogoResponseSchema as xn, WorkflowCanvasRunSchema as xr, DuplicateCredentialRequestSchema as xt, orgLogoStorageKey as y, __require as yi, PresignCustomAppLogoResponseSchema as yn, UserPreferencesSchema as yr, DownloadActiveProjectArtifactResponseSchema as yt, deleteManagedServiceCredential$1 as z, RecentResourceSchema as zn, chatAttachmentExtension as zr, InviteProjectMembersRequestSchema as zt };
|
|
37708
37999
|
|
|
37709
|
-
//# sourceMappingURL=dist-
|
|
38000
|
+
//# sourceMappingURL=dist-B2lPLfrR.mjs.map
|