@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.
Files changed (309) hide show
  1. package/dist/{awk2-LA3USKJP-B6uw2Bt6.cjs → awk2-LA3USKJP-C544FFGP.cjs} +2 -2
  2. package/dist/{awk2-LA3USKJP-B6uw2Bt6.cjs.map → awk2-LA3USKJP-C544FFGP.cjs.map} +1 -1
  3. package/dist/{awk2-LA3USKJP-cJ-Z6J9j.mjs → awk2-LA3USKJP-OaTNLGfL.mjs} +2 -2
  4. package/dist/{awk2-LA3USKJP-cJ-Z6J9j.mjs.map → awk2-LA3USKJP-OaTNLGfL.mjs.map} +1 -1
  5. package/dist/{base64-C2AIWVNC-DYCurUAR.cjs → base64-C2AIWVNC-BnyRxaRd.cjs} +2 -2
  6. package/dist/{base64-C2AIWVNC-DYCurUAR.cjs.map → base64-C2AIWVNC-BnyRxaRd.cjs.map} +1 -1
  7. package/dist/{base64-C2AIWVNC-Cs404cyq.mjs → base64-C2AIWVNC-DcAp1c2p.mjs} +2 -2
  8. package/dist/{base64-C2AIWVNC-Cs404cyq.mjs.map → base64-C2AIWVNC-DcAp1c2p.mjs.map} +1 -1
  9. package/dist/{bash-YZ33HQZQ-C0VzjZ-L.cjs → bash-YZ33HQZQ-BRMsK3RY.cjs} +2 -2
  10. package/dist/{bash-YZ33HQZQ-C0VzjZ-L.cjs.map → bash-YZ33HQZQ-BRMsK3RY.cjs.map} +1 -1
  11. package/dist/{bash-YZ33HQZQ-WlueOlNq.mjs → bash-YZ33HQZQ-DukphZlQ.mjs} +2 -2
  12. package/dist/{bash-YZ33HQZQ-WlueOlNq.mjs.map → bash-YZ33HQZQ-DukphZlQ.mjs.map} +1 -1
  13. package/dist/{cat-TSFMZVYS-CkwNl54c.mjs → cat-TSFMZVYS-B9ZweZ0g.mjs} +3 -3
  14. package/dist/{cat-TSFMZVYS-CkwNl54c.mjs.map → cat-TSFMZVYS-B9ZweZ0g.mjs.map} +1 -1
  15. package/dist/{cat-TSFMZVYS-mZAwc0jT.cjs → cat-TSFMZVYS-KZgn9B7l.cjs} +3 -3
  16. package/dist/{cat-TSFMZVYS-mZAwc0jT.cjs.map → cat-TSFMZVYS-KZgn9B7l.cjs.map} +1 -1
  17. package/dist/{chunk-5H5SCKJM-CO858h-N.mjs → chunk-5H5SCKJM-BaQNy7Uj.mjs} +2 -2
  18. package/dist/{chunk-5H5SCKJM-CO858h-N.mjs.map → chunk-5H5SCKJM-BaQNy7Uj.mjs.map} +1 -1
  19. package/dist/{chunk-5H5SCKJM-DK56WXdS.cjs → chunk-5H5SCKJM-DjtB3NAz.cjs} +2 -2
  20. package/dist/{chunk-5H5SCKJM-DK56WXdS.cjs.map → chunk-5H5SCKJM-DjtB3NAz.cjs.map} +1 -1
  21. package/dist/{chunk-AQ6FYS2X-B-tU21b6.mjs → chunk-AQ6FYS2X-CXdwzuuw.mjs} +2 -2
  22. package/dist/{chunk-AQ6FYS2X-B-tU21b6.mjs.map → chunk-AQ6FYS2X-CXdwzuuw.mjs.map} +1 -1
  23. package/dist/{chunk-AQ6FYS2X-Bs7siMd-.cjs → chunk-AQ6FYS2X-CsoGKQ2j.cjs} +2 -2
  24. package/dist/{chunk-AQ6FYS2X-Bs7siMd-.cjs.map → chunk-AQ6FYS2X-CsoGKQ2j.cjs.map} +1 -1
  25. package/dist/{chunk-CHFEPBH4-u97K-hHE.cjs → chunk-CHFEPBH4-B7SK6y0J.cjs} +2 -2
  26. package/dist/{chunk-CHFEPBH4-u97K-hHE.cjs.map → chunk-CHFEPBH4-B7SK6y0J.cjs.map} +1 -1
  27. package/dist/{chunk-CHFEPBH4-B1dGi1Rp.mjs → chunk-CHFEPBH4-DWsPJ6bE.mjs} +2 -2
  28. package/dist/{chunk-CHFEPBH4-B1dGi1Rp.mjs.map → chunk-CHFEPBH4-DWsPJ6bE.mjs.map} +1 -1
  29. package/dist/{chunk-EBAPSGAO-bvBL5lI0.mjs → chunk-EBAPSGAO-Bo2g3Ra0.mjs} +2 -2
  30. package/dist/{chunk-EBAPSGAO-bvBL5lI0.mjs.map → chunk-EBAPSGAO-Bo2g3Ra0.mjs.map} +1 -1
  31. package/dist/{chunk-EBAPSGAO-DM-EDh0Q.cjs → chunk-EBAPSGAO-DxcD_wN0.cjs} +2 -2
  32. package/dist/{chunk-EBAPSGAO-DM-EDh0Q.cjs.map → chunk-EBAPSGAO-DxcD_wN0.cjs.map} +1 -1
  33. package/dist/{chunk-LEKBROJD-CFeNqItx.mjs → chunk-LEKBROJD-CKOwe9-J.mjs} +2 -2
  34. package/dist/{chunk-LEKBROJD-CFeNqItx.mjs.map → chunk-LEKBROJD-CKOwe9-J.mjs.map} +1 -1
  35. package/dist/{chunk-LEKBROJD-BxQr5osL.cjs → chunk-LEKBROJD-lSH8qRL-.cjs} +2 -2
  36. package/dist/{chunk-LEKBROJD-BxQr5osL.cjs.map → chunk-LEKBROJD-lSH8qRL-.cjs.map} +1 -1
  37. package/dist/{chunk-VPADYNBD-DMP8a1Df.cjs → chunk-VPADYNBD-Cjfz5Alm.cjs} +2 -2
  38. package/dist/{chunk-VPADYNBD-DMP8a1Df.cjs.map → chunk-VPADYNBD-Cjfz5Alm.cjs.map} +1 -1
  39. package/dist/{chunk-VPADYNBD-BEjilLRl.mjs → chunk-VPADYNBD-D106m_2F.mjs} +2 -2
  40. package/dist/{chunk-VPADYNBD-BEjilLRl.mjs.map → chunk-VPADYNBD-D106m_2F.mjs.map} +1 -1
  41. package/dist/{chunk-YCLFEX4T-CWA_wK0s.cjs → chunk-YCLFEX4T-BKdilKg9.cjs} +2 -2
  42. package/dist/{chunk-YCLFEX4T-CWA_wK0s.cjs.map → chunk-YCLFEX4T-BKdilKg9.cjs.map} +1 -1
  43. package/dist/{chunk-YCLFEX4T-DmvjyT00.mjs → chunk-YCLFEX4T-BNcQm2wg.mjs} +2 -2
  44. package/dist/{chunk-YCLFEX4T-DmvjyT00.mjs.map → chunk-YCLFEX4T-BNcQm2wg.mjs.map} +1 -1
  45. package/dist/{column-XT6UFXNQ-Dt98eUoT.cjs → column-XT6UFXNQ-BE9ZFChf.cjs} +2 -2
  46. package/dist/{column-XT6UFXNQ-Dt98eUoT.cjs.map → column-XT6UFXNQ-BE9ZFChf.cjs.map} +1 -1
  47. package/dist/{column-XT6UFXNQ-D6Fbpwt1.mjs → column-XT6UFXNQ-Cv-T7URw.mjs} +2 -2
  48. package/dist/{column-XT6UFXNQ-D6Fbpwt1.mjs.map → column-XT6UFXNQ-Cv-T7URw.mjs.map} +1 -1
  49. package/dist/{comm-VV2LDX2J-CiGWgPMT.mjs → comm-VV2LDX2J-CwlEnHpG.mjs} +2 -2
  50. package/dist/{comm-VV2LDX2J-CiGWgPMT.mjs.map → comm-VV2LDX2J-CwlEnHpG.mjs.map} +1 -1
  51. package/dist/{comm-VV2LDX2J-BgLYoDm3.cjs → comm-VV2LDX2J-DToPWFK0.cjs} +2 -2
  52. package/dist/{comm-VV2LDX2J-BgLYoDm3.cjs.map → comm-VV2LDX2J-DToPWFK0.cjs.map} +1 -1
  53. package/dist/config.cjs +2 -2
  54. package/dist/config.mjs +2 -2
  55. package/dist/{cp-BISAAS7A-CvK9sTBw.mjs → cp-BISAAS7A-Baa7jHjq.mjs} +2 -2
  56. package/dist/{cp-BISAAS7A-CvK9sTBw.mjs.map → cp-BISAAS7A-Baa7jHjq.mjs.map} +1 -1
  57. package/dist/{cp-BISAAS7A-tr7byIHy.cjs → cp-BISAAS7A-CkmJTroD.cjs} +2 -2
  58. package/dist/{cp-BISAAS7A-tr7byIHy.cjs.map → cp-BISAAS7A-CkmJTroD.cjs.map} +1 -1
  59. package/dist/{cut-OKARJCCV-5SkYB3UW.mjs → cut-OKARJCCV-BB4GpDEw.mjs} +3 -3
  60. package/dist/{cut-OKARJCCV-5SkYB3UW.mjs.map → cut-OKARJCCV-BB4GpDEw.mjs.map} +1 -1
  61. package/dist/{cut-OKARJCCV-CkKFeEW0.cjs → cut-OKARJCCV-LjiQbogw.cjs} +3 -3
  62. package/dist/{cut-OKARJCCV-CkKFeEW0.cjs.map → cut-OKARJCCV-LjiQbogw.cjs.map} +1 -1
  63. package/dist/{diff-MWJFIG7X-D8BfV9CZ.cjs → diff-MWJFIG7X-4T0AtZb6.cjs} +2 -2
  64. package/dist/{diff-MWJFIG7X-D8BfV9CZ.cjs.map → diff-MWJFIG7X-4T0AtZb6.cjs.map} +1 -1
  65. package/dist/{diff-MWJFIG7X-FpRPeBBI.mjs → diff-MWJFIG7X-CoLpB5r8.mjs} +2 -2
  66. package/dist/{diff-MWJFIG7X-FpRPeBBI.mjs.map → diff-MWJFIG7X-CoLpB5r8.mjs.map} +1 -1
  67. package/dist/{dist-mntRulD_.cjs → dist-1gAqMJCK.cjs} +19 -7
  68. package/dist/dist-1gAqMJCK.cjs.map +1 -0
  69. package/dist/{dist-06B__3tk.mjs → dist-B2lPLfrR.mjs} +455 -164
  70. package/dist/dist-B2lPLfrR.mjs.map +1 -0
  71. package/dist/{dist-Da9lzYN7.mjs → dist-BBJhHiW3.mjs} +19 -7
  72. package/dist/dist-BBJhHiW3.mjs.map +1 -0
  73. package/dist/{dist-CyAg630h.cjs → dist-ZPZwDr3w.cjs} +459 -162
  74. package/dist/dist-ZPZwDr3w.cjs.map +1 -0
  75. package/dist/{du-572XNP42-CHAO-EDI.mjs → du-572XNP42-B4W75agS.mjs} +2 -2
  76. package/dist/{du-572XNP42-CHAO-EDI.mjs.map → du-572XNP42-B4W75agS.mjs.map} +1 -1
  77. package/dist/{du-572XNP42-Bd6_2Wf2.cjs → du-572XNP42-Bu2lK3XF.cjs} +2 -2
  78. package/dist/{du-572XNP42-Bd6_2Wf2.cjs.map → du-572XNP42-Bu2lK3XF.cjs.map} +1 -1
  79. package/dist/{env-36M5BO7M-Cz62ZfWq.cjs → env-36M5BO7M-Buj1j2Ha.cjs} +2 -2
  80. package/dist/{env-36M5BO7M-Cz62ZfWq.cjs.map → env-36M5BO7M-Buj1j2Ha.cjs.map} +1 -1
  81. package/dist/{env-36M5BO7M-C9VWir-k.mjs → env-36M5BO7M-CzYSWBAm.mjs} +2 -2
  82. package/dist/{env-36M5BO7M-C9VWir-k.mjs.map → env-36M5BO7M-CzYSWBAm.mjs.map} +1 -1
  83. package/dist/{expand-JSPG6VOP-CEgbfGV6.mjs → expand-JSPG6VOP-B3OiXvMy.mjs} +2 -2
  84. package/dist/{expand-JSPG6VOP-CEgbfGV6.mjs.map → expand-JSPG6VOP-B3OiXvMy.mjs.map} +1 -1
  85. package/dist/{expand-JSPG6VOP-mLdVVa0I.cjs → expand-JSPG6VOP-Ydh9BD2_.cjs} +2 -2
  86. package/dist/{expand-JSPG6VOP-mLdVVa0I.cjs.map → expand-JSPG6VOP-Ydh9BD2_.cjs.map} +1 -1
  87. package/dist/{expr-5JAACS4X-KKuazyxt.mjs → expr-5JAACS4X-C4pTNZ3u.mjs} +2 -2
  88. package/dist/{expr-5JAACS4X-KKuazyxt.mjs.map → expr-5JAACS4X-C4pTNZ3u.mjs.map} +1 -1
  89. package/dist/{expr-5JAACS4X-Djnbsszh.cjs → expr-5JAACS4X-DhFIFxWY.cjs} +2 -2
  90. package/dist/{expr-5JAACS4X-Djnbsszh.cjs.map → expr-5JAACS4X-DhFIFxWY.cjs.map} +1 -1
  91. package/dist/{find-INTH3OLC-RdP-hsVF.mjs → find-INTH3OLC-BXgosBN-.mjs} +3 -3
  92. package/dist/{find-INTH3OLC-RdP-hsVF.mjs.map → find-INTH3OLC-BXgosBN-.mjs.map} +1 -1
  93. package/dist/{find-INTH3OLC-B0B0iGkl.cjs → find-INTH3OLC-CgGC1SmT.cjs} +3 -3
  94. package/dist/{find-INTH3OLC-B0B0iGkl.cjs.map → find-INTH3OLC-CgGC1SmT.cjs.map} +1 -1
  95. package/dist/{fold-4TQNYMSW-ytylbYbP.cjs → fold-4TQNYMSW-D9mL8Sn3.cjs} +2 -2
  96. package/dist/{fold-4TQNYMSW-ytylbYbP.cjs.map → fold-4TQNYMSW-D9mL8Sn3.cjs.map} +1 -1
  97. package/dist/{fold-4TQNYMSW-D_qTDJiB.mjs → fold-4TQNYMSW-DMdiKJ06.mjs} +2 -2
  98. package/dist/{fold-4TQNYMSW-D_qTDJiB.mjs.map → fold-4TQNYMSW-DMdiKJ06.mjs.map} +1 -1
  99. package/dist/{grep-V3LQVMRQ-DwK2lHc5.mjs → grep-V3LQVMRQ-BKB3zi73.mjs} +4 -4
  100. package/dist/{grep-V3LQVMRQ-DwK2lHc5.mjs.map → grep-V3LQVMRQ-BKB3zi73.mjs.map} +1 -1
  101. package/dist/{grep-V3LQVMRQ-BBKdYjFL.cjs → grep-V3LQVMRQ-DdECgTsM.cjs} +4 -4
  102. package/dist/{grep-V3LQVMRQ-BBKdYjFL.cjs.map → grep-V3LQVMRQ-DdECgTsM.cjs.map} +1 -1
  103. package/dist/{gzip-O5ASJAFY--t4Ce_9v.cjs → gzip-O5ASJAFY-DXYfhNMl.cjs} +2 -2
  104. package/dist/{gzip-O5ASJAFY--t4Ce_9v.cjs.map → gzip-O5ASJAFY-DXYfhNMl.cjs.map} +1 -1
  105. package/dist/{gzip-O5ASJAFY-CeiWqkFz.mjs → gzip-O5ASJAFY-qGwUq87o.mjs} +2 -2
  106. package/dist/{gzip-O5ASJAFY-CeiWqkFz.mjs.map → gzip-O5ASJAFY-qGwUq87o.mjs.map} +1 -1
  107. package/dist/{head-442HYESI-DtllcF1s.mjs → head-442HYESI-C6Z7-vE9.mjs} +2 -2
  108. package/dist/{head-442HYESI-DtllcF1s.mjs.map → head-442HYESI-C6Z7-vE9.mjs.map} +1 -1
  109. package/dist/{head-442HYESI-DQCuZDHN.cjs → head-442HYESI-j5KhFbpE.cjs} +2 -2
  110. package/dist/{head-442HYESI-DQCuZDHN.cjs.map → head-442HYESI-j5KhFbpE.cjs.map} +1 -1
  111. package/dist/{help-HZ6M2CKN-B_6MZaoj.cjs → help-HZ6M2CKN-C8nI-RQW.cjs} +2 -2
  112. package/dist/{help-HZ6M2CKN-B_6MZaoj.cjs.map → help-HZ6M2CKN-C8nI-RQW.cjs.map} +1 -1
  113. package/dist/{help-HZ6M2CKN-C9cpA_J5.mjs → help-HZ6M2CKN-CZ6qTcLB.mjs} +2 -2
  114. package/dist/{help-HZ6M2CKN-C9cpA_J5.mjs.map → help-HZ6M2CKN-CZ6qTcLB.mjs.map} +1 -1
  115. package/dist/{html-to-markdown-JW4MSQZO-DqeKb1nJ.mjs → html-to-markdown-JW4MSQZO-DUhiVkMF.mjs} +3 -3
  116. package/dist/{html-to-markdown-JW4MSQZO-DqeKb1nJ.mjs.map → html-to-markdown-JW4MSQZO-DUhiVkMF.mjs.map} +1 -1
  117. package/dist/{html-to-markdown-JW4MSQZO-DswlYeG4.cjs → html-to-markdown-JW4MSQZO-g6j8npLf.cjs} +3 -3
  118. package/dist/{html-to-markdown-JW4MSQZO-DswlYeG4.cjs.map → html-to-markdown-JW4MSQZO-g6j8npLf.cjs.map} +1 -1
  119. package/dist/internal.cjs +1 -1
  120. package/dist/internal.mjs +1 -1
  121. package/dist/{join-TBRGI3LQ-CMRDiRTo.cjs → join-TBRGI3LQ-CbBwIms1.cjs} +2 -2
  122. package/dist/{join-TBRGI3LQ-CMRDiRTo.cjs.map → join-TBRGI3LQ-CbBwIms1.cjs.map} +1 -1
  123. package/dist/{join-TBRGI3LQ-B30ZmR0Q.mjs → join-TBRGI3LQ-CytgtxxD.mjs} +2 -2
  124. package/dist/{join-TBRGI3LQ-B30ZmR0Q.mjs.map → join-TBRGI3LQ-CytgtxxD.mjs.map} +1 -1
  125. package/dist/{jq-4XLYLOS5-DQ6iLRD3.mjs → jq-4XLYLOS5-BhbSj1D9.mjs} +4 -4
  126. package/dist/{jq-4XLYLOS5-DQ6iLRD3.mjs.map → jq-4XLYLOS5-BhbSj1D9.mjs.map} +1 -1
  127. package/dist/{jq-4XLYLOS5-ooK5g6Fs.cjs → jq-4XLYLOS5-C90BkvNt.cjs} +4 -4
  128. package/dist/{jq-4XLYLOS5-ooK5g6Fs.cjs.map → jq-4XLYLOS5-C90BkvNt.cjs.map} +1 -1
  129. package/dist/{js-exec-N5KEZBH7-CjOi5GO8.mjs → js-exec-N5KEZBH7-B2gt37yR.mjs} +3 -3
  130. package/dist/{js-exec-N5KEZBH7-CjOi5GO8.mjs.map → js-exec-N5KEZBH7-B2gt37yR.mjs.map} +1 -1
  131. package/dist/{js-exec-N5KEZBH7-XVj9n9p1.cjs → js-exec-N5KEZBH7-Mu2CT-LK.cjs} +3 -3
  132. package/dist/{js-exec-N5KEZBH7-XVj9n9p1.cjs.map → js-exec-N5KEZBH7-Mu2CT-LK.cjs.map} +1 -1
  133. package/dist/{lib-CA1jBj20.cjs → lib-B8audCXM.cjs} +2 -2
  134. package/dist/{lib-CA1jBj20.cjs.map → lib-B8audCXM.cjs.map} +1 -1
  135. package/dist/{lib-C7W1TYft.mjs → lib-r4uXvKzY.mjs} +2 -2
  136. package/dist/{lib-C7W1TYft.mjs.map → lib-r4uXvKzY.mjs.map} +1 -1
  137. package/dist/{ln-4LGSXXGD-BE8ne5S9.cjs → ln-4LGSXXGD-BwI1Ba1v.cjs} +2 -2
  138. package/dist/{ln-4LGSXXGD-BE8ne5S9.cjs.map → ln-4LGSXXGD-BwI1Ba1v.cjs.map} +1 -1
  139. package/dist/{ln-4LGSXXGD-BjPc8rbU.mjs → ln-4LGSXXGD-DK1HQ-Z7.mjs} +2 -2
  140. package/dist/{ln-4LGSXXGD-BjPc8rbU.mjs.map → ln-4LGSXXGD-DK1HQ-Z7.mjs.map} +1 -1
  141. package/dist/{ls-ZJGQER7M-Bg2jOL21.cjs → ls-ZJGQER7M-BH8enpfY.cjs} +2 -2
  142. package/dist/{ls-ZJGQER7M-Bg2jOL21.cjs.map → ls-ZJGQER7M-BH8enpfY.cjs.map} +1 -1
  143. package/dist/{ls-ZJGQER7M-BeFruBgl.mjs → ls-ZJGQER7M-CDvVLwGN.mjs} +2 -2
  144. package/dist/{ls-ZJGQER7M-BeFruBgl.mjs.map → ls-ZJGQER7M-CDvVLwGN.mjs.map} +1 -1
  145. package/dist/{lzma-lNLOHHZi.cjs → lzma-DRcwNt3i.cjs} +2 -2
  146. package/dist/{lzma-lNLOHHZi.cjs.map → lzma-DRcwNt3i.cjs.map} +1 -1
  147. package/dist/{md5sum-SPU24VSG-AYgghvvm.mjs → md5sum-SPU24VSG-10wb8jSM.mjs} +3 -3
  148. package/dist/{md5sum-SPU24VSG-AYgghvvm.mjs.map → md5sum-SPU24VSG-10wb8jSM.mjs.map} +1 -1
  149. package/dist/{md5sum-SPU24VSG-BIlD5qo9.cjs → md5sum-SPU24VSG-e7geuGSr.cjs} +3 -3
  150. package/dist/{md5sum-SPU24VSG-BIlD5qo9.cjs.map → md5sum-SPU24VSG-e7geuGSr.cjs.map} +1 -1
  151. package/dist/{mkdir-MEPGZOB6-DykmapJj.cjs → mkdir-MEPGZOB6-DHvBslz2.cjs} +2 -2
  152. package/dist/{mkdir-MEPGZOB6-DykmapJj.cjs.map → mkdir-MEPGZOB6-DHvBslz2.cjs.map} +1 -1
  153. package/dist/{mkdir-MEPGZOB6-H0tBQtjo.mjs → mkdir-MEPGZOB6-KgCHTAGt.mjs} +2 -2
  154. package/dist/{mkdir-MEPGZOB6-H0tBQtjo.mjs.map → mkdir-MEPGZOB6-KgCHTAGt.mjs.map} +1 -1
  155. package/dist/{mv-W5BIQ646-BXi-ExY0.cjs → mv-W5BIQ646-BvUigdVa.cjs} +2 -2
  156. package/dist/{mv-W5BIQ646-BXi-ExY0.cjs.map → mv-W5BIQ646-BvUigdVa.cjs.map} +1 -1
  157. package/dist/{mv-W5BIQ646-BbhqKmzw.mjs → mv-W5BIQ646-m6KvTj2j.mjs} +2 -2
  158. package/dist/{mv-W5BIQ646-BbhqKmzw.mjs.map → mv-W5BIQ646-m6KvTj2j.mjs.map} +1 -1
  159. package/dist/{nl-WSDW7I4O-wPl2Yq0Y.cjs → nl-WSDW7I4O-BHCgsxiV.cjs} +2 -2
  160. package/dist/{nl-WSDW7I4O-wPl2Yq0Y.cjs.map → nl-WSDW7I4O-BHCgsxiV.cjs.map} +1 -1
  161. package/dist/{nl-WSDW7I4O-CNnDTT1z.mjs → nl-WSDW7I4O-BOU_uI5i.mjs} +2 -2
  162. package/dist/{nl-WSDW7I4O-CNnDTT1z.mjs.map → nl-WSDW7I4O-BOU_uI5i.mjs.map} +1 -1
  163. package/dist/{od-WOKFDJTP-C4-ghkBs.cjs → od-WOKFDJTP-CsiFbtX8.cjs} +2 -2
  164. package/dist/{od-WOKFDJTP-C4-ghkBs.cjs.map → od-WOKFDJTP-CsiFbtX8.cjs.map} +1 -1
  165. package/dist/{od-WOKFDJTP-D5s8wG2y.mjs → od-WOKFDJTP-D9CDg_0N.mjs} +2 -2
  166. package/dist/{od-WOKFDJTP-D5s8wG2y.mjs.map → od-WOKFDJTP-D9CDg_0N.mjs.map} +1 -1
  167. package/dist/{paste-7JC6S4DX-o6U9XjU7.mjs → paste-7JC6S4DX-BPZM8va6.mjs} +2 -2
  168. package/dist/{paste-7JC6S4DX-o6U9XjU7.mjs.map → paste-7JC6S4DX-BPZM8va6.mjs.map} +1 -1
  169. package/dist/{paste-7JC6S4DX-CJ9_DYYE.cjs → paste-7JC6S4DX-DOfui9Os.cjs} +2 -2
  170. package/dist/{paste-7JC6S4DX-CJ9_DYYE.cjs.map → paste-7JC6S4DX-DOfui9Os.cjs.map} +1 -1
  171. package/dist/{printf-TWGXF445-28RqQWhG.mjs → printf-TWGXF445-BFtTTFUx.mjs} +3 -3
  172. package/dist/{printf-TWGXF445-28RqQWhG.mjs.map → printf-TWGXF445-BFtTTFUx.mjs.map} +1 -1
  173. package/dist/{printf-TWGXF445-CHj81GwC.cjs → printf-TWGXF445-CxEPw_qf.cjs} +3 -3
  174. package/dist/{printf-TWGXF445-CHj81GwC.cjs.map → printf-TWGXF445-CxEPw_qf.cjs.map} +1 -1
  175. package/dist/{python3-POMOR4OA-y8l5MsiF.mjs → python3-POMOR4OA-BrPhKjye.mjs} +3 -3
  176. package/dist/{python3-POMOR4OA-y8l5MsiF.mjs.map → python3-POMOR4OA-BrPhKjye.mjs.map} +1 -1
  177. package/dist/{python3-POMOR4OA-CgFXvSVe.cjs → python3-POMOR4OA-C4csB3z_.cjs} +3 -3
  178. package/dist/{python3-POMOR4OA-CgFXvSVe.cjs.map → python3-POMOR4OA-C4csB3z_.cjs.map} +1 -1
  179. package/dist/{rev-5EHFX4EJ-DGFN700v.cjs → rev-5EHFX4EJ-BDPraoKf.cjs} +2 -2
  180. package/dist/{rev-5EHFX4EJ-DGFN700v.cjs.map → rev-5EHFX4EJ-BDPraoKf.cjs.map} +1 -1
  181. package/dist/{rev-5EHFX4EJ-DwXsQgcN.mjs → rev-5EHFX4EJ-DT84cm7e.mjs} +2 -2
  182. package/dist/{rev-5EHFX4EJ-DwXsQgcN.mjs.map → rev-5EHFX4EJ-DT84cm7e.mjs.map} +1 -1
  183. package/dist/{rg-S4FXYXWB-UN8eCHqJ.cjs → rg-S4FXYXWB-BOtIPQjO.cjs} +3 -3
  184. package/dist/{rg-S4FXYXWB-UN8eCHqJ.cjs.map → rg-S4FXYXWB-BOtIPQjO.cjs.map} +1 -1
  185. package/dist/{rg-S4FXYXWB-D81ZWHI9.mjs → rg-S4FXYXWB-DvLBW3FF.mjs} +3 -3
  186. package/dist/{rg-S4FXYXWB-D81ZWHI9.mjs.map → rg-S4FXYXWB-DvLBW3FF.mjs.map} +1 -1
  187. package/dist/{rm-SSGETQVQ-Dqrc3jE1.mjs → rm-SSGETQVQ-CSmxrWHU.mjs} +2 -2
  188. package/dist/{rm-SSGETQVQ-Dqrc3jE1.mjs.map → rm-SSGETQVQ-CSmxrWHU.mjs.map} +1 -1
  189. package/dist/{rm-SSGETQVQ-Cl2LnNzO.cjs → rm-SSGETQVQ-mSI8N9e1.cjs} +2 -2
  190. package/dist/{rm-SSGETQVQ-Cl2LnNzO.cjs.map → rm-SSGETQVQ-mSI8N9e1.cjs.map} +1 -1
  191. package/dist/{rmdir-OC4ZLPYA-CEJSJ6A1.mjs → rmdir-OC4ZLPYA-DBRCWWxY.mjs} +2 -2
  192. package/dist/{rmdir-OC4ZLPYA-CEJSJ6A1.mjs.map → rmdir-OC4ZLPYA-DBRCWWxY.mjs.map} +1 -1
  193. package/dist/{rmdir-OC4ZLPYA-BG3p2vpE.cjs → rmdir-OC4ZLPYA-KewwQ5OQ.cjs} +2 -2
  194. package/dist/{rmdir-OC4ZLPYA-BG3p2vpE.cjs.map → rmdir-OC4ZLPYA-KewwQ5OQ.cjs.map} +1 -1
  195. package/dist/run.cjs +1 -1
  196. package/dist/run.mjs +1 -1
  197. package/dist/{sed-S5UIK574-Chy3VxE9.mjs → sed-S5UIK574-BPN7JI6S.mjs} +2 -2
  198. package/dist/{sed-S5UIK574-Chy3VxE9.mjs.map → sed-S5UIK574-BPN7JI6S.mjs.map} +1 -1
  199. package/dist/{sed-S5UIK574-1h3qcNsZ.cjs → sed-S5UIK574-D2fQ08wE.cjs} +2 -2
  200. package/dist/{sed-S5UIK574-1h3qcNsZ.cjs.map → sed-S5UIK574-D2fQ08wE.cjs.map} +1 -1
  201. package/dist/{sha1sum-2PTOAFR6-B8LW6P2v.cjs → sha1sum-2PTOAFR6-CUzO9jAy.cjs} +3 -3
  202. package/dist/{sha1sum-2PTOAFR6-B8LW6P2v.cjs.map → sha1sum-2PTOAFR6-CUzO9jAy.cjs.map} +1 -1
  203. package/dist/{sha1sum-2PTOAFR6-DKC60eG9.mjs → sha1sum-2PTOAFR6-CaclrBG7.mjs} +3 -3
  204. package/dist/{sha1sum-2PTOAFR6-DKC60eG9.mjs.map → sha1sum-2PTOAFR6-CaclrBG7.mjs.map} +1 -1
  205. package/dist/{sha256sum-NS7D3IXX-CFLb9_WC.cjs → sha256sum-NS7D3IXX-CyjoG_Fo.cjs} +3 -3
  206. package/dist/{sha256sum-NS7D3IXX-CFLb9_WC.cjs.map → sha256sum-NS7D3IXX-CyjoG_Fo.cjs.map} +1 -1
  207. package/dist/{sha256sum-NS7D3IXX-Db_9vDzm.mjs → sha256sum-NS7D3IXX-Dirjqo9R.mjs} +3 -3
  208. package/dist/{sha256sum-NS7D3IXX-Db_9vDzm.mjs.map → sha256sum-NS7D3IXX-Dirjqo9R.mjs.map} +1 -1
  209. package/dist/{sleep-X22JJINO-CQbA47u6.cjs → sleep-X22JJINO-BmN15X75.cjs} +2 -2
  210. package/dist/{sleep-X22JJINO-CQbA47u6.cjs.map → sleep-X22JJINO-BmN15X75.cjs.map} +1 -1
  211. package/dist/{sleep-X22JJINO-CczkV6Jp.mjs → sleep-X22JJINO-C85vW9bl.mjs} +2 -2
  212. package/dist/{sleep-X22JJINO-CczkV6Jp.mjs.map → sleep-X22JJINO-C85vW9bl.mjs.map} +1 -1
  213. package/dist/{sort-SW2YEO5B-DtBL2mtr.cjs → sort-SW2YEO5B-BXo_cCn8.cjs} +3 -3
  214. package/dist/{sort-SW2YEO5B-DtBL2mtr.cjs.map → sort-SW2YEO5B-BXo_cCn8.cjs.map} +1 -1
  215. package/dist/{sort-SW2YEO5B-BixT2IGq.mjs → sort-SW2YEO5B-OWnbfe9g.mjs} +3 -3
  216. package/dist/{sort-SW2YEO5B-BixT2IGq.mjs.map → sort-SW2YEO5B-OWnbfe9g.mjs.map} +1 -1
  217. package/dist/{split-4KKZZXXE-XdGKmEtG.cjs → split-4KKZZXXE-BRZ9Onc5.cjs} +2 -2
  218. package/dist/{split-4KKZZXXE-XdGKmEtG.cjs.map → split-4KKZZXXE-BRZ9Onc5.cjs.map} +1 -1
  219. package/dist/{split-4KKZZXXE-D5nTYjy5.mjs → split-4KKZZXXE-Do1z2dE5.mjs} +2 -2
  220. package/dist/{split-4KKZZXXE-D5nTYjy5.mjs.map → split-4KKZZXXE-Do1z2dE5.mjs.map} +1 -1
  221. package/dist/{sqlite3-CGOEFJAO-C-uTzpm4.cjs → sqlite3-CGOEFJAO-B6nuurF0.cjs} +3 -3
  222. package/dist/{sqlite3-CGOEFJAO-C-uTzpm4.cjs.map → sqlite3-CGOEFJAO-B6nuurF0.cjs.map} +1 -1
  223. package/dist/{sqlite3-CGOEFJAO-DJBV9PV_.mjs → sqlite3-CGOEFJAO-DrBY4xSR.mjs} +3 -3
  224. package/dist/{sqlite3-CGOEFJAO-DJBV9PV_.mjs.map → sqlite3-CGOEFJAO-DrBY4xSR.mjs.map} +1 -1
  225. package/dist/{start-xlynNay5.cjs → start-ClWb87N-.cjs} +226 -115
  226. package/dist/start-ClWb87N-.cjs.map +1 -0
  227. package/dist/{start-B8JPSU7i.mjs → start-zbLIFKlv.mjs} +226 -115
  228. package/dist/start-zbLIFKlv.mjs.map +1 -0
  229. package/dist/start.cjs +1 -1
  230. package/dist/start.mjs +1 -1
  231. package/dist/{strings-6WDHLGMX-XF_GU89U.cjs → strings-6WDHLGMX-Cja4C0R3.cjs} +2 -2
  232. package/dist/{strings-6WDHLGMX-XF_GU89U.cjs.map → strings-6WDHLGMX-Cja4C0R3.cjs.map} +1 -1
  233. package/dist/{strings-6WDHLGMX-V2dSbxzd.mjs → strings-6WDHLGMX-DPcD3lVo.mjs} +2 -2
  234. package/dist/{strings-6WDHLGMX-V2dSbxzd.mjs.map → strings-6WDHLGMX-DPcD3lVo.mjs.map} +1 -1
  235. package/dist/{tac-2STMMJYW-BqghTfkz.mjs → tac-2STMMJYW-Bap8fjvo.mjs} +2 -2
  236. package/dist/{tac-2STMMJYW-BqghTfkz.mjs.map → tac-2STMMJYW-Bap8fjvo.mjs.map} +1 -1
  237. package/dist/{tac-2STMMJYW-G1amMMPZ.cjs → tac-2STMMJYW-hqV9IWjO.cjs} +2 -2
  238. package/dist/{tac-2STMMJYW-G1amMMPZ.cjs.map → tac-2STMMJYW-hqV9IWjO.cjs.map} +1 -1
  239. package/dist/{tail-R4PCA2C4-c0nW2CyO.mjs → tail-R4PCA2C4-D8gTAJv4.mjs} +2 -2
  240. package/dist/{tail-R4PCA2C4-c0nW2CyO.mjs.map → tail-R4PCA2C4-D8gTAJv4.mjs.map} +1 -1
  241. package/dist/{tail-R4PCA2C4-CvCjQ05N.cjs → tail-R4PCA2C4-DLYInTSg.cjs} +2 -2
  242. package/dist/{tail-R4PCA2C4-CvCjQ05N.cjs.map → tail-R4PCA2C4-DLYInTSg.cjs.map} +1 -1
  243. package/dist/{tar-STHHZTZ6-B96J4oRi.mjs → tar-STHHZTZ6-BvaMjwan.mjs} +4 -4
  244. package/dist/{tar-STHHZTZ6-B96J4oRi.mjs.map → tar-STHHZTZ6-BvaMjwan.mjs.map} +1 -1
  245. package/dist/{tar-STHHZTZ6-Dfjz4EC5.cjs → tar-STHHZTZ6-C1coMUN-.cjs} +5 -5
  246. package/dist/{tar-STHHZTZ6-Dfjz4EC5.cjs.map → tar-STHHZTZ6-C1coMUN-.cjs.map} +1 -1
  247. package/dist/{tee-YUZ2FKCJ-DuUbDRxw.mjs → tee-YUZ2FKCJ-BeZbMeQg.mjs} +2 -2
  248. package/dist/{tee-YUZ2FKCJ-DuUbDRxw.mjs.map → tee-YUZ2FKCJ-BeZbMeQg.mjs.map} +1 -1
  249. package/dist/{tee-YUZ2FKCJ-BwUNKs2X.cjs → tee-YUZ2FKCJ-DZjg1j71.cjs} +2 -2
  250. package/dist/{tee-YUZ2FKCJ-BwUNKs2X.cjs.map → tee-YUZ2FKCJ-DZjg1j71.cjs.map} +1 -1
  251. package/dist/{time-D4LNBSWX-BRz7RnVy.mjs → time-D4LNBSWX-CwNJDX9k.mjs} +2 -2
  252. package/dist/{time-D4LNBSWX-BRz7RnVy.mjs.map → time-D4LNBSWX-CwNJDX9k.mjs.map} +1 -1
  253. package/dist/{time-D4LNBSWX-CbsvG2z7.cjs → time-D4LNBSWX-D0o9WKnd.cjs} +2 -2
  254. package/dist/{time-D4LNBSWX-CbsvG2z7.cjs.map → time-D4LNBSWX-D0o9WKnd.cjs.map} +1 -1
  255. package/dist/{timeout-YDCRSLPQ-C9Veu7n5.mjs → timeout-YDCRSLPQ-BYQu8FB_.mjs} +2 -2
  256. package/dist/{timeout-YDCRSLPQ-C9Veu7n5.mjs.map → timeout-YDCRSLPQ-BYQu8FB_.mjs.map} +1 -1
  257. package/dist/{timeout-YDCRSLPQ-CycIyLJm.cjs → timeout-YDCRSLPQ-gCL0dPir.cjs} +2 -2
  258. package/dist/{timeout-YDCRSLPQ-CycIyLJm.cjs.map → timeout-YDCRSLPQ-gCL0dPir.cjs.map} +1 -1
  259. package/dist/{touch-UA33VN3N-C7WkFgl9.mjs → touch-UA33VN3N-Clj615aH.mjs} +2 -2
  260. package/dist/{touch-UA33VN3N-C7WkFgl9.mjs.map → touch-UA33VN3N-Clj615aH.mjs.map} +1 -1
  261. package/dist/{touch-UA33VN3N-t4veoaI7.cjs → touch-UA33VN3N-W1buBQYM.cjs} +2 -2
  262. package/dist/{touch-UA33VN3N-t4veoaI7.cjs.map → touch-UA33VN3N-W1buBQYM.cjs.map} +1 -1
  263. package/dist/{tr-36LHWFRQ-CGja3l0p.mjs → tr-36LHWFRQ-DPz3syv0.mjs} +2 -2
  264. package/dist/{tr-36LHWFRQ-CGja3l0p.mjs.map → tr-36LHWFRQ-DPz3syv0.mjs.map} +1 -1
  265. package/dist/{tr-36LHWFRQ-BS0pC6It.cjs → tr-36LHWFRQ-DS2DvRpE.cjs} +2 -2
  266. package/dist/{tr-36LHWFRQ-BS0pC6It.cjs.map → tr-36LHWFRQ-DS2DvRpE.cjs.map} +1 -1
  267. package/dist/{tree-YLD52CNT-DSyy-MaG.mjs → tree-YLD52CNT-BbMGKPvW.mjs} +2 -2
  268. package/dist/{tree-YLD52CNT-DSyy-MaG.mjs.map → tree-YLD52CNT-BbMGKPvW.mjs.map} +1 -1
  269. package/dist/{tree-YLD52CNT-CtMWTsYT.cjs → tree-YLD52CNT-BoQBXdSr.cjs} +2 -2
  270. package/dist/{tree-YLD52CNT-CtMWTsYT.cjs.map → tree-YLD52CNT-BoQBXdSr.cjs.map} +1 -1
  271. package/dist/{unexpand-CADSA4VO-BkAfFBwc.mjs → unexpand-CADSA4VO-C0IRoV5k.mjs} +2 -2
  272. package/dist/{unexpand-CADSA4VO-BkAfFBwc.mjs.map → unexpand-CADSA4VO-C0IRoV5k.mjs.map} +1 -1
  273. package/dist/{unexpand-CADSA4VO-BF9r6Hlz.cjs → unexpand-CADSA4VO-DM36-Dne.cjs} +2 -2
  274. package/dist/{unexpand-CADSA4VO-BF9r6Hlz.cjs.map → unexpand-CADSA4VO-DM36-Dne.cjs.map} +1 -1
  275. package/dist/{uniq-XSIZR6PB-Bqd4ELx5.mjs → uniq-XSIZR6PB-DTNQOumC.mjs} +3 -3
  276. package/dist/{uniq-XSIZR6PB-Bqd4ELx5.mjs.map → uniq-XSIZR6PB-DTNQOumC.mjs.map} +1 -1
  277. package/dist/{uniq-XSIZR6PB-CE3SlFfS.cjs → uniq-XSIZR6PB-cbqtNDFd.cjs} +3 -3
  278. package/dist/{uniq-XSIZR6PB-CE3SlFfS.cjs.map → uniq-XSIZR6PB-cbqtNDFd.cjs.map} +1 -1
  279. package/dist/{wc-LF7NU4LA-CYC8jmy9.cjs → wc-LF7NU4LA-CmxEf7a9.cjs} +3 -3
  280. package/dist/{wc-LF7NU4LA-CYC8jmy9.cjs.map → wc-LF7NU4LA-CmxEf7a9.cjs.map} +1 -1
  281. package/dist/{wc-LF7NU4LA-CtqoQj3c.mjs → wc-LF7NU4LA-CrZ2_f9J.mjs} +3 -3
  282. package/dist/{wc-LF7NU4LA-CtqoQj3c.mjs.map → wc-LF7NU4LA-CrZ2_f9J.mjs.map} +1 -1
  283. package/dist/{with-project-scope-CTrtQy8z.mjs → with-project-scope-5Gfc8263.mjs} +2 -2
  284. package/dist/{with-project-scope-CTrtQy8z.mjs.map → with-project-scope-5Gfc8263.mjs.map} +1 -1
  285. package/dist/{with-project-scope-DZDKeaiS.cjs → with-project-scope-Hh6iqeoh.cjs} +2 -2
  286. package/dist/{with-project-scope-DZDKeaiS.cjs.map → with-project-scope-Hh6iqeoh.cjs.map} +1 -1
  287. package/dist/{xan-Y6WF3IRG-DWQra2c5.cjs → xan-Y6WF3IRG-CdBO57j3.cjs} +6 -6
  288. package/dist/{xan-Y6WF3IRG-DWQra2c5.cjs.map → xan-Y6WF3IRG-CdBO57j3.cjs.map} +1 -1
  289. package/dist/{xan-Y6WF3IRG--gAjwdYb.mjs → xan-Y6WF3IRG-rLQOC4c5.mjs} +6 -6
  290. package/dist/{xan-Y6WF3IRG--gAjwdYb.mjs.map → xan-Y6WF3IRG-rLQOC4c5.mjs.map} +1 -1
  291. package/dist/{xan-view-HDVKHFC2-CFde5tqZ.mjs → xan-view-HDVKHFC2-BLteyNnh.mjs} +3 -3
  292. package/dist/{xan-view-HDVKHFC2-CFde5tqZ.mjs.map → xan-view-HDVKHFC2-BLteyNnh.mjs.map} +1 -1
  293. package/dist/{xan-view-HDVKHFC2-Pq5GdBxq.cjs → xan-view-HDVKHFC2-CJxt0KHg.cjs} +3 -3
  294. package/dist/{xan-view-HDVKHFC2-Pq5GdBxq.cjs.map → xan-view-HDVKHFC2-CJxt0KHg.cjs.map} +1 -1
  295. package/dist/{xargs-MGZPH7AX-CB3V2Mdc.cjs → xargs-MGZPH7AX-BwI33_UH.cjs} +2 -2
  296. package/dist/{xargs-MGZPH7AX-CB3V2Mdc.cjs.map → xargs-MGZPH7AX-BwI33_UH.cjs.map} +1 -1
  297. package/dist/{xargs-MGZPH7AX-BkmiflqU.mjs → xargs-MGZPH7AX-zJMHUR_2.mjs} +2 -2
  298. package/dist/{xargs-MGZPH7AX-BkmiflqU.mjs.map → xargs-MGZPH7AX-zJMHUR_2.mjs.map} +1 -1
  299. package/dist/{yq-4QJW3EQG-VXsgb_hI.mjs → yq-4QJW3EQG-B_jhRTwa.mjs} +3 -3
  300. package/dist/{yq-4QJW3EQG-VXsgb_hI.mjs.map → yq-4QJW3EQG-B_jhRTwa.mjs.map} +1 -1
  301. package/dist/{yq-4QJW3EQG-DErcLiTm.cjs → yq-4QJW3EQG-CpEslf6d.cjs} +3 -3
  302. package/dist/{yq-4QJW3EQG-DErcLiTm.cjs.map → yq-4QJW3EQG-CpEslf6d.cjs.map} +1 -1
  303. package/package.json +1 -1
  304. package/dist/dist-06B__3tk.mjs.map +0 -1
  305. package/dist/dist-CyAg630h.cjs.map +0 -1
  306. package/dist/dist-Da9lzYN7.mjs.map +0 -1
  307. package/dist/dist-mntRulD_.cjs.map +0 -1
  308. package/dist/start-B8JPSU7i.mjs.map +0 -1
  309. package/dist/start-xlynNay5.cjs.map +0 -1
@@ -1,4 +1,4 @@
1
- const require_dist$3 = require("./dist-mntRulD_.cjs");
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 when credentialFields are present. */
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 vs manual api-key entry). */
10623
- const AppCredentialConnectionKindSchema = zod.z.enum(["oauth", "manual"]);
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-C6DRzb2o.mjs
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
- /** Union OAuth scope names from metadata sources, preserving first-seen order. */
24835
- function mergeOAuthScopes(...lists) {
24836
- const seen = /* @__PURE__ */ new Set();
24837
- const result = [];
24838
- for (const list of lists) {
24839
- if (!list?.length) continue;
24840
- for (const scope of list) {
24841
- const trimmed = scope.trim();
24842
- if (trimmed && !seen.has(trimmed)) {
24843
- seen.add(trimmed);
24844
- result.push(trimmed);
24845
- }
24846
- }
24847
- }
24848
- return result;
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 serverUrl = new URL(url);
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 discoverOAuthServerInfo(serverUrl, {
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: mergeOAuthScopes(scopesFromMetadata(metadata), scopesFromMetadata(discovered.resourceMetadata)),
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("discoverOAuthServerInfo", error);
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
- function encodeOAuthState(payload) {
31874
- return (0, _keystrokehq_database.encryptCredentialPayload)(JSON.stringify(payload));
31875
- }
31876
- function decodeOAuthState(state) {
31877
- return JSON.parse((0, _keystrokehq_database.decryptCredentialPayload)(state));
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
- if (supportsCimd && Boolean(options.clientMetadataUrl) && isHttpsUrl(options.clientMetadataUrl) && options.clientMetadataUrl) return {
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
- if (options.metadata.registration_endpoint) return registerClient(options.authorizationServerUrl, {
31933
- metadata: options.metadata,
31934
- clientMetadata: {
31935
- client_name: "Keystroke",
31936
- redirect_uris: [options.redirectUri],
31937
- grant_types: ["authorization_code", "refresh_token"],
31938
- response_types: ["code"],
31939
- token_endpoint_auth_method: "client_secret_post"
31940
- },
31941
- scope: options.scope
31942
- });
31943
- if (supportsCimd) throw new Error("Authorization server requires Client ID Metadata Documents, but Keystroke has no HTTPS client metadata URL configured (set PUBLIC_PLATFORM_URL or PUBLIC_PLATFORM_PROXY_URL to an HTTPS origin)");
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 discovered = await discoverOAuthServerInfo(new URL(appUrl), {});
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
- if (!metadata?.authorization_endpoint || !metadata.token_endpoint) throw new Error("MCP server does not expose OAuth authorization metadata");
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: mergeOAuthScopes(metadata.scopes_supported, discovered.resourceMetadata?.scopes_supported, options.app.oauthScopes.map((scope) => scope.name)),
31958
- resource: discovered.resourceMetadata?.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 defaultScopeNames = options.app.oauthScopes.flatMap((entry) => entry.defaultSelected !== false ? [entry.name] : []);
31962
- const scope = options.input.scopes?.join(" ") || (defaultScopeNames.length > 0 ? defaultScopeNames.join(" ") : oauth.scopes.join(" "));
31963
- const clientInformation = await resolveMcpOAuthClientInformation({
31964
- authorizationServerUrl: discovered.authorizationServerUrl,
31965
- metadata,
31966
- redirectUri: options.redirectUri,
31967
- scope: scope || void 0,
31968
- clientMetadataUrl: options.clientMetadataUrl
31969
- });
31970
- await (0, _keystrokehq_platform_database.ensureOAuthApp)({
31971
- slug: options.app.slug,
31972
- provider: "mcp",
31973
- tokenStrategy: "refresh",
31974
- clientId: clientInformation.client_id,
31975
- clientSecret: oauthClientSecretForStorage(clientInformation.client_secret),
31976
- metadata: oauthAppMetadata(oauth, appUrl, { tokenEndpointAuthMethod: clientInformation.token_endpoint_auth_method })
31977
- });
31978
- const resourceUrl = oauth.resource ? new URL(oauth.resource) : new URL(appUrl);
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
- const { authorizationUrl, codeVerifier } = await startAuthorization(discovered.authorizationServerUrl, {
32000
- metadata,
32001
- clientInformation,
32002
- redirectUrl: options.redirectUri,
32003
- scope: scope || void 0,
32004
- resource: resourceUrl
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 = decodeOAuthState(options.state);
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
- const tokens = await exchangeAuthorization(payload.authorizationServerUrl, {
32024
- metadata,
32025
- clientInformation: {
32026
- client_id: payload.clientId,
32027
- ...payload.clientSecret ? { client_secret: payload.clientSecret } : {},
32028
- ...payload.tokenEndpointAuthMethod ? { token_endpoint_auth_method: payload.tokenEndpointAuthMethod } : {}
32029
- },
32030
- authorizationCode: options.code,
32031
- codeVerifier: payload.codeVerifier,
32032
- redirectUri: payload.redirectUri,
32033
- resource: resourceUrl
32034
- });
32035
- const { id: oauthAppId } = await (0, _keystrokehq_platform_database.ensureOAuthApp)({
32036
- slug: payload.appSlug,
32037
- provider: "mcp",
32038
- tokenStrategy: "refresh",
32039
- clientId: payload.clientId,
32040
- clientSecret: oauthClientSecretForStorage(payload.clientSecret),
32041
- metadata: oauthAppMetadata(payload.oauthMetadata, payload.mcpUrl, { tokenEndpointAuthMethod: payload.tokenEndpointAuthMethod })
32042
- });
32043
- const connectionId = await (0, _keystrokehq_platform_database.saveOAuthConnection)({
32044
- appId: oauthAppId,
32045
- externalId: payload.userId,
32046
- accessToken: tokens.access_token,
32047
- refreshToken: tokens.refresh_token,
32048
- accessTokenExpiresAt: accessTokenExpiresAt(tokens.expires_in),
32049
- grantedScopes: grantedScopesFromToken(tokens.scope, payload.oauthMetadata.scopes),
32050
- metadata: { mcpUrl: payload.oauthMetadata.resource }
32051
- });
32052
- await (0, _keystrokehq_database.ensureOAuthCredentialInstance)({
32053
- credentialKey: payload.appSlug,
32054
- connectionId,
32055
- accountLabel: payload.label,
32056
- externalId: payload.userId,
32057
- userLabel: payload.label,
32058
- targets: payload.scopeTargets,
32059
- credentialInstanceId: payload.credentialInstanceId
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-CyAg630h.cjs.map
39381
+ //# sourceMappingURL=dist-ZPZwDr3w.cjs.map