@keystrokehq/platform 0.1.117 → 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-Dvoy0Jo4.cjs → awk2-LA3USKJP-C544FFGP.cjs} +2 -2
  2. package/dist/{awk2-LA3USKJP-Dvoy0Jo4.cjs.map → awk2-LA3USKJP-C544FFGP.cjs.map} +1 -1
  3. package/dist/{awk2-LA3USKJP-DpvnYjX2.mjs → awk2-LA3USKJP-OaTNLGfL.mjs} +2 -2
  4. package/dist/{awk2-LA3USKJP-DpvnYjX2.mjs.map → awk2-LA3USKJP-OaTNLGfL.mjs.map} +1 -1
  5. package/dist/{base64-C2AIWVNC-CTQAdSG0.cjs → base64-C2AIWVNC-BnyRxaRd.cjs} +2 -2
  6. package/dist/{base64-C2AIWVNC-CTQAdSG0.cjs.map → base64-C2AIWVNC-BnyRxaRd.cjs.map} +1 -1
  7. package/dist/{base64-C2AIWVNC-DNibLND0.mjs → base64-C2AIWVNC-DcAp1c2p.mjs} +2 -2
  8. package/dist/{base64-C2AIWVNC-DNibLND0.mjs.map → base64-C2AIWVNC-DcAp1c2p.mjs.map} +1 -1
  9. package/dist/{bash-YZ33HQZQ-CqiP9-IN.cjs → bash-YZ33HQZQ-BRMsK3RY.cjs} +2 -2
  10. package/dist/{bash-YZ33HQZQ-CqiP9-IN.cjs.map → bash-YZ33HQZQ-BRMsK3RY.cjs.map} +1 -1
  11. package/dist/{bash-YZ33HQZQ-BBhsNCSj.mjs → bash-YZ33HQZQ-DukphZlQ.mjs} +2 -2
  12. package/dist/{bash-YZ33HQZQ-BBhsNCSj.mjs.map → bash-YZ33HQZQ-DukphZlQ.mjs.map} +1 -1
  13. package/dist/{cat-TSFMZVYS-CzLIxs_Y.mjs → cat-TSFMZVYS-B9ZweZ0g.mjs} +3 -3
  14. package/dist/{cat-TSFMZVYS-CzLIxs_Y.mjs.map → cat-TSFMZVYS-B9ZweZ0g.mjs.map} +1 -1
  15. package/dist/{cat-TSFMZVYS-BqA9dC8-.cjs → cat-TSFMZVYS-KZgn9B7l.cjs} +3 -3
  16. package/dist/{cat-TSFMZVYS-BqA9dC8-.cjs.map → cat-TSFMZVYS-KZgn9B7l.cjs.map} +1 -1
  17. package/dist/{chunk-5H5SCKJM-bwO1_x66.mjs → chunk-5H5SCKJM-BaQNy7Uj.mjs} +2 -2
  18. package/dist/{chunk-5H5SCKJM-bwO1_x66.mjs.map → chunk-5H5SCKJM-BaQNy7Uj.mjs.map} +1 -1
  19. package/dist/{chunk-5H5SCKJM-DbJ6QWgq.cjs → chunk-5H5SCKJM-DjtB3NAz.cjs} +2 -2
  20. package/dist/{chunk-5H5SCKJM-DbJ6QWgq.cjs.map → chunk-5H5SCKJM-DjtB3NAz.cjs.map} +1 -1
  21. package/dist/{chunk-AQ6FYS2X-BlpUjVwc.mjs → chunk-AQ6FYS2X-CXdwzuuw.mjs} +2 -2
  22. package/dist/{chunk-AQ6FYS2X-BlpUjVwc.mjs.map → chunk-AQ6FYS2X-CXdwzuuw.mjs.map} +1 -1
  23. package/dist/{chunk-AQ6FYS2X-dyvh_3_k.cjs → chunk-AQ6FYS2X-CsoGKQ2j.cjs} +2 -2
  24. package/dist/{chunk-AQ6FYS2X-dyvh_3_k.cjs.map → chunk-AQ6FYS2X-CsoGKQ2j.cjs.map} +1 -1
  25. package/dist/{chunk-CHFEPBH4-PkR6Rg7k.cjs → chunk-CHFEPBH4-B7SK6y0J.cjs} +2 -2
  26. package/dist/{chunk-CHFEPBH4-PkR6Rg7k.cjs.map → chunk-CHFEPBH4-B7SK6y0J.cjs.map} +1 -1
  27. package/dist/{chunk-CHFEPBH4-B3-VFcQl.mjs → chunk-CHFEPBH4-DWsPJ6bE.mjs} +2 -2
  28. package/dist/{chunk-CHFEPBH4-B3-VFcQl.mjs.map → chunk-CHFEPBH4-DWsPJ6bE.mjs.map} +1 -1
  29. package/dist/{chunk-EBAPSGAO-CB7OXdxC.mjs → chunk-EBAPSGAO-Bo2g3Ra0.mjs} +2 -2
  30. package/dist/{chunk-EBAPSGAO-CB7OXdxC.mjs.map → chunk-EBAPSGAO-Bo2g3Ra0.mjs.map} +1 -1
  31. package/dist/{chunk-EBAPSGAO-Crn54yub.cjs → chunk-EBAPSGAO-DxcD_wN0.cjs} +2 -2
  32. package/dist/{chunk-EBAPSGAO-Crn54yub.cjs.map → chunk-EBAPSGAO-DxcD_wN0.cjs.map} +1 -1
  33. package/dist/{chunk-LEKBROJD-B3cLm6oa.mjs → chunk-LEKBROJD-CKOwe9-J.mjs} +2 -2
  34. package/dist/{chunk-LEKBROJD-B3cLm6oa.mjs.map → chunk-LEKBROJD-CKOwe9-J.mjs.map} +1 -1
  35. package/dist/{chunk-LEKBROJD-BAKGB8s6.cjs → chunk-LEKBROJD-lSH8qRL-.cjs} +2 -2
  36. package/dist/{chunk-LEKBROJD-BAKGB8s6.cjs.map → chunk-LEKBROJD-lSH8qRL-.cjs.map} +1 -1
  37. package/dist/{chunk-VPADYNBD-BuWaBJwi.cjs → chunk-VPADYNBD-Cjfz5Alm.cjs} +2 -2
  38. package/dist/{chunk-VPADYNBD-BuWaBJwi.cjs.map → chunk-VPADYNBD-Cjfz5Alm.cjs.map} +1 -1
  39. package/dist/{chunk-VPADYNBD-B902D9e8.mjs → chunk-VPADYNBD-D106m_2F.mjs} +2 -2
  40. package/dist/{chunk-VPADYNBD-B902D9e8.mjs.map → chunk-VPADYNBD-D106m_2F.mjs.map} +1 -1
  41. package/dist/{chunk-YCLFEX4T-Dn4vKiDg.cjs → chunk-YCLFEX4T-BKdilKg9.cjs} +2 -2
  42. package/dist/{chunk-YCLFEX4T-Dn4vKiDg.cjs.map → chunk-YCLFEX4T-BKdilKg9.cjs.map} +1 -1
  43. package/dist/{chunk-YCLFEX4T-LIwTH9SY.mjs → chunk-YCLFEX4T-BNcQm2wg.mjs} +2 -2
  44. package/dist/{chunk-YCLFEX4T-LIwTH9SY.mjs.map → chunk-YCLFEX4T-BNcQm2wg.mjs.map} +1 -1
  45. package/dist/{column-XT6UFXNQ-Boj04bYt.cjs → column-XT6UFXNQ-BE9ZFChf.cjs} +2 -2
  46. package/dist/{column-XT6UFXNQ-Boj04bYt.cjs.map → column-XT6UFXNQ-BE9ZFChf.cjs.map} +1 -1
  47. package/dist/{column-XT6UFXNQ-kaZr3ck1.mjs → column-XT6UFXNQ-Cv-T7URw.mjs} +2 -2
  48. package/dist/{column-XT6UFXNQ-kaZr3ck1.mjs.map → column-XT6UFXNQ-Cv-T7URw.mjs.map} +1 -1
  49. package/dist/{comm-VV2LDX2J-BcfPIK9n.mjs → comm-VV2LDX2J-CwlEnHpG.mjs} +2 -2
  50. package/dist/{comm-VV2LDX2J-BcfPIK9n.mjs.map → comm-VV2LDX2J-CwlEnHpG.mjs.map} +1 -1
  51. package/dist/{comm-VV2LDX2J-DgVwT105.cjs → comm-VV2LDX2J-DToPWFK0.cjs} +2 -2
  52. package/dist/{comm-VV2LDX2J-DgVwT105.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-D85tMW1Y.mjs → cp-BISAAS7A-Baa7jHjq.mjs} +2 -2
  56. package/dist/{cp-BISAAS7A-D85tMW1Y.mjs.map → cp-BISAAS7A-Baa7jHjq.mjs.map} +1 -1
  57. package/dist/{cp-BISAAS7A-Bcf_ba9y.cjs → cp-BISAAS7A-CkmJTroD.cjs} +2 -2
  58. package/dist/{cp-BISAAS7A-Bcf_ba9y.cjs.map → cp-BISAAS7A-CkmJTroD.cjs.map} +1 -1
  59. package/dist/{cut-OKARJCCV-B1JE4QQ8.mjs → cut-OKARJCCV-BB4GpDEw.mjs} +3 -3
  60. package/dist/{cut-OKARJCCV-B1JE4QQ8.mjs.map → cut-OKARJCCV-BB4GpDEw.mjs.map} +1 -1
  61. package/dist/{cut-OKARJCCV-JizvZoF6.cjs → cut-OKARJCCV-LjiQbogw.cjs} +3 -3
  62. package/dist/{cut-OKARJCCV-JizvZoF6.cjs.map → cut-OKARJCCV-LjiQbogw.cjs.map} +1 -1
  63. package/dist/{diff-MWJFIG7X-BMYp-iAk.cjs → diff-MWJFIG7X-4T0AtZb6.cjs} +2 -2
  64. package/dist/{diff-MWJFIG7X-BMYp-iAk.cjs.map → diff-MWJFIG7X-4T0AtZb6.cjs.map} +1 -1
  65. package/dist/{diff-MWJFIG7X-DNpSNYB2.mjs → diff-MWJFIG7X-CoLpB5r8.mjs} +2 -2
  66. package/dist/{diff-MWJFIG7X-DNpSNYB2.mjs.map → diff-MWJFIG7X-CoLpB5r8.mjs.map} +1 -1
  67. package/dist/{dist-bLC4LOvt.cjs → dist-1gAqMJCK.cjs} +4 -4
  68. package/dist/dist-1gAqMJCK.cjs.map +1 -0
  69. package/dist/{dist-Cj3RPKwD.mjs → dist-B2lPLfrR.mjs} +415 -158
  70. package/dist/dist-B2lPLfrR.mjs.map +1 -0
  71. package/dist/{dist-D7eFCDTR.mjs → dist-BBJhHiW3.mjs} +4 -4
  72. package/dist/dist-BBJhHiW3.mjs.map +1 -0
  73. package/dist/{dist-AKkRwuhE.cjs → dist-ZPZwDr3w.cjs} +414 -157
  74. package/dist/dist-ZPZwDr3w.cjs.map +1 -0
  75. package/dist/{du-572XNP42-BwvbhLB4.mjs → du-572XNP42-B4W75agS.mjs} +2 -2
  76. package/dist/{du-572XNP42-BwvbhLB4.mjs.map → du-572XNP42-B4W75agS.mjs.map} +1 -1
  77. package/dist/{du-572XNP42-tSkGjDhu.cjs → du-572XNP42-Bu2lK3XF.cjs} +2 -2
  78. package/dist/{du-572XNP42-tSkGjDhu.cjs.map → du-572XNP42-Bu2lK3XF.cjs.map} +1 -1
  79. package/dist/{env-36M5BO7M-BwKubobQ.cjs → env-36M5BO7M-Buj1j2Ha.cjs} +2 -2
  80. package/dist/{env-36M5BO7M-BwKubobQ.cjs.map → env-36M5BO7M-Buj1j2Ha.cjs.map} +1 -1
  81. package/dist/{env-36M5BO7M-ClR8f-u_.mjs → env-36M5BO7M-CzYSWBAm.mjs} +2 -2
  82. package/dist/{env-36M5BO7M-ClR8f-u_.mjs.map → env-36M5BO7M-CzYSWBAm.mjs.map} +1 -1
  83. package/dist/{expand-JSPG6VOP-BWU9TNYW.mjs → expand-JSPG6VOP-B3OiXvMy.mjs} +2 -2
  84. package/dist/{expand-JSPG6VOP-BWU9TNYW.mjs.map → expand-JSPG6VOP-B3OiXvMy.mjs.map} +1 -1
  85. package/dist/{expand-JSPG6VOP-BeHkk5Oo.cjs → expand-JSPG6VOP-Ydh9BD2_.cjs} +2 -2
  86. package/dist/{expand-JSPG6VOP-BeHkk5Oo.cjs.map → expand-JSPG6VOP-Ydh9BD2_.cjs.map} +1 -1
  87. package/dist/{expr-5JAACS4X-DjCkxQwm.mjs → expr-5JAACS4X-C4pTNZ3u.mjs} +2 -2
  88. package/dist/{expr-5JAACS4X-DjCkxQwm.mjs.map → expr-5JAACS4X-C4pTNZ3u.mjs.map} +1 -1
  89. package/dist/{expr-5JAACS4X-CuMpHcmU.cjs → expr-5JAACS4X-DhFIFxWY.cjs} +2 -2
  90. package/dist/{expr-5JAACS4X-CuMpHcmU.cjs.map → expr-5JAACS4X-DhFIFxWY.cjs.map} +1 -1
  91. package/dist/{find-INTH3OLC-ANEYvUZg.mjs → find-INTH3OLC-BXgosBN-.mjs} +3 -3
  92. package/dist/{find-INTH3OLC-ANEYvUZg.mjs.map → find-INTH3OLC-BXgosBN-.mjs.map} +1 -1
  93. package/dist/{find-INTH3OLC-CGo48GJL.cjs → find-INTH3OLC-CgGC1SmT.cjs} +3 -3
  94. package/dist/{find-INTH3OLC-CGo48GJL.cjs.map → find-INTH3OLC-CgGC1SmT.cjs.map} +1 -1
  95. package/dist/{fold-4TQNYMSW-C8GWRkk8.cjs → fold-4TQNYMSW-D9mL8Sn3.cjs} +2 -2
  96. package/dist/{fold-4TQNYMSW-C8GWRkk8.cjs.map → fold-4TQNYMSW-D9mL8Sn3.cjs.map} +1 -1
  97. package/dist/{fold-4TQNYMSW-BmpYm0H1.mjs → fold-4TQNYMSW-DMdiKJ06.mjs} +2 -2
  98. package/dist/{fold-4TQNYMSW-BmpYm0H1.mjs.map → fold-4TQNYMSW-DMdiKJ06.mjs.map} +1 -1
  99. package/dist/{grep-V3LQVMRQ-FFO9h2h8.mjs → grep-V3LQVMRQ-BKB3zi73.mjs} +4 -4
  100. package/dist/{grep-V3LQVMRQ-FFO9h2h8.mjs.map → grep-V3LQVMRQ-BKB3zi73.mjs.map} +1 -1
  101. package/dist/{grep-V3LQVMRQ-9V45Njd7.cjs → grep-V3LQVMRQ-DdECgTsM.cjs} +4 -4
  102. package/dist/{grep-V3LQVMRQ-9V45Njd7.cjs.map → grep-V3LQVMRQ-DdECgTsM.cjs.map} +1 -1
  103. package/dist/{gzip-O5ASJAFY-B43NZFRO.cjs → gzip-O5ASJAFY-DXYfhNMl.cjs} +2 -2
  104. package/dist/{gzip-O5ASJAFY-B43NZFRO.cjs.map → gzip-O5ASJAFY-DXYfhNMl.cjs.map} +1 -1
  105. package/dist/{gzip-O5ASJAFY-CRDFlLbr.mjs → gzip-O5ASJAFY-qGwUq87o.mjs} +2 -2
  106. package/dist/{gzip-O5ASJAFY-CRDFlLbr.mjs.map → gzip-O5ASJAFY-qGwUq87o.mjs.map} +1 -1
  107. package/dist/{head-442HYESI-CXxOStnC.mjs → head-442HYESI-C6Z7-vE9.mjs} +2 -2
  108. package/dist/{head-442HYESI-CXxOStnC.mjs.map → head-442HYESI-C6Z7-vE9.mjs.map} +1 -1
  109. package/dist/{head-442HYESI-CmVujDWk.cjs → head-442HYESI-j5KhFbpE.cjs} +2 -2
  110. package/dist/{head-442HYESI-CmVujDWk.cjs.map → head-442HYESI-j5KhFbpE.cjs.map} +1 -1
  111. package/dist/{help-HZ6M2CKN-DO23r8PQ.cjs → help-HZ6M2CKN-C8nI-RQW.cjs} +2 -2
  112. package/dist/{help-HZ6M2CKN-DO23r8PQ.cjs.map → help-HZ6M2CKN-C8nI-RQW.cjs.map} +1 -1
  113. package/dist/{help-HZ6M2CKN-_fBE8i_X.mjs → help-HZ6M2CKN-CZ6qTcLB.mjs} +2 -2
  114. package/dist/{help-HZ6M2CKN-_fBE8i_X.mjs.map → help-HZ6M2CKN-CZ6qTcLB.mjs.map} +1 -1
  115. package/dist/{html-to-markdown-JW4MSQZO-B_ZXZPwG.mjs → html-to-markdown-JW4MSQZO-DUhiVkMF.mjs} +3 -3
  116. package/dist/{html-to-markdown-JW4MSQZO-B_ZXZPwG.mjs.map → html-to-markdown-JW4MSQZO-DUhiVkMF.mjs.map} +1 -1
  117. package/dist/{html-to-markdown-JW4MSQZO-CaYVbaxu.cjs → html-to-markdown-JW4MSQZO-g6j8npLf.cjs} +3 -3
  118. package/dist/{html-to-markdown-JW4MSQZO-CaYVbaxu.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-BKh_m7Ck.cjs → join-TBRGI3LQ-CbBwIms1.cjs} +2 -2
  122. package/dist/{join-TBRGI3LQ-BKh_m7Ck.cjs.map → join-TBRGI3LQ-CbBwIms1.cjs.map} +1 -1
  123. package/dist/{join-TBRGI3LQ-Bryan1uc.mjs → join-TBRGI3LQ-CytgtxxD.mjs} +2 -2
  124. package/dist/{join-TBRGI3LQ-Bryan1uc.mjs.map → join-TBRGI3LQ-CytgtxxD.mjs.map} +1 -1
  125. package/dist/{jq-4XLYLOS5-DlA0DGTU.mjs → jq-4XLYLOS5-BhbSj1D9.mjs} +4 -4
  126. package/dist/{jq-4XLYLOS5-DlA0DGTU.mjs.map → jq-4XLYLOS5-BhbSj1D9.mjs.map} +1 -1
  127. package/dist/{jq-4XLYLOS5-BxFW6--8.cjs → jq-4XLYLOS5-C90BkvNt.cjs} +4 -4
  128. package/dist/{jq-4XLYLOS5-BxFW6--8.cjs.map → jq-4XLYLOS5-C90BkvNt.cjs.map} +1 -1
  129. package/dist/{js-exec-N5KEZBH7-1jBR3z1f.mjs → js-exec-N5KEZBH7-B2gt37yR.mjs} +3 -3
  130. package/dist/{js-exec-N5KEZBH7-1jBR3z1f.mjs.map → js-exec-N5KEZBH7-B2gt37yR.mjs.map} +1 -1
  131. package/dist/{js-exec-N5KEZBH7-hTtZY8cm.cjs → js-exec-N5KEZBH7-Mu2CT-LK.cjs} +3 -3
  132. package/dist/{js-exec-N5KEZBH7-hTtZY8cm.cjs.map → js-exec-N5KEZBH7-Mu2CT-LK.cjs.map} +1 -1
  133. package/dist/{lib-DEuFQ8jW.cjs → lib-B8audCXM.cjs} +2 -2
  134. package/dist/{lib-DEuFQ8jW.cjs.map → lib-B8audCXM.cjs.map} +1 -1
  135. package/dist/{lib-DLNAr9hM.mjs → lib-r4uXvKzY.mjs} +2 -2
  136. package/dist/{lib-DLNAr9hM.mjs.map → lib-r4uXvKzY.mjs.map} +1 -1
  137. package/dist/{ln-4LGSXXGD-DZ20jRcK.cjs → ln-4LGSXXGD-BwI1Ba1v.cjs} +2 -2
  138. package/dist/{ln-4LGSXXGD-DZ20jRcK.cjs.map → ln-4LGSXXGD-BwI1Ba1v.cjs.map} +1 -1
  139. package/dist/{ln-4LGSXXGD-DoMwqtWM.mjs → ln-4LGSXXGD-DK1HQ-Z7.mjs} +2 -2
  140. package/dist/{ln-4LGSXXGD-DoMwqtWM.mjs.map → ln-4LGSXXGD-DK1HQ-Z7.mjs.map} +1 -1
  141. package/dist/{ls-ZJGQER7M-Dethi67D.cjs → ls-ZJGQER7M-BH8enpfY.cjs} +2 -2
  142. package/dist/{ls-ZJGQER7M-Dethi67D.cjs.map → ls-ZJGQER7M-BH8enpfY.cjs.map} +1 -1
  143. package/dist/{ls-ZJGQER7M-B5gaVKxE.mjs → ls-ZJGQER7M-CDvVLwGN.mjs} +2 -2
  144. package/dist/{ls-ZJGQER7M-B5gaVKxE.mjs.map → ls-ZJGQER7M-CDvVLwGN.mjs.map} +1 -1
  145. package/dist/{lzma-O8OSBX-9.cjs → lzma-DRcwNt3i.cjs} +2 -2
  146. package/dist/{lzma-O8OSBX-9.cjs.map → lzma-DRcwNt3i.cjs.map} +1 -1
  147. package/dist/{md5sum-SPU24VSG-CAE_-OrT.mjs → md5sum-SPU24VSG-10wb8jSM.mjs} +3 -3
  148. package/dist/{md5sum-SPU24VSG-CAE_-OrT.mjs.map → md5sum-SPU24VSG-10wb8jSM.mjs.map} +1 -1
  149. package/dist/{md5sum-SPU24VSG-Dh6HTP0G.cjs → md5sum-SPU24VSG-e7geuGSr.cjs} +3 -3
  150. package/dist/{md5sum-SPU24VSG-Dh6HTP0G.cjs.map → md5sum-SPU24VSG-e7geuGSr.cjs.map} +1 -1
  151. package/dist/{mkdir-MEPGZOB6-D5whvinj.cjs → mkdir-MEPGZOB6-DHvBslz2.cjs} +2 -2
  152. package/dist/{mkdir-MEPGZOB6-D5whvinj.cjs.map → mkdir-MEPGZOB6-DHvBslz2.cjs.map} +1 -1
  153. package/dist/{mkdir-MEPGZOB6-BaXX8tym.mjs → mkdir-MEPGZOB6-KgCHTAGt.mjs} +2 -2
  154. package/dist/{mkdir-MEPGZOB6-BaXX8tym.mjs.map → mkdir-MEPGZOB6-KgCHTAGt.mjs.map} +1 -1
  155. package/dist/{mv-W5BIQ646-Bkt3Wkxb.cjs → mv-W5BIQ646-BvUigdVa.cjs} +2 -2
  156. package/dist/{mv-W5BIQ646-Bkt3Wkxb.cjs.map → mv-W5BIQ646-BvUigdVa.cjs.map} +1 -1
  157. package/dist/{mv-W5BIQ646-CwWkCaw1.mjs → mv-W5BIQ646-m6KvTj2j.mjs} +2 -2
  158. package/dist/{mv-W5BIQ646-CwWkCaw1.mjs.map → mv-W5BIQ646-m6KvTj2j.mjs.map} +1 -1
  159. package/dist/{nl-WSDW7I4O-DgLzrg9w.cjs → nl-WSDW7I4O-BHCgsxiV.cjs} +2 -2
  160. package/dist/{nl-WSDW7I4O-DgLzrg9w.cjs.map → nl-WSDW7I4O-BHCgsxiV.cjs.map} +1 -1
  161. package/dist/{nl-WSDW7I4O-DKNWPtTC.mjs → nl-WSDW7I4O-BOU_uI5i.mjs} +2 -2
  162. package/dist/{nl-WSDW7I4O-DKNWPtTC.mjs.map → nl-WSDW7I4O-BOU_uI5i.mjs.map} +1 -1
  163. package/dist/{od-WOKFDJTP-8pORtSkj.cjs → od-WOKFDJTP-CsiFbtX8.cjs} +2 -2
  164. package/dist/{od-WOKFDJTP-8pORtSkj.cjs.map → od-WOKFDJTP-CsiFbtX8.cjs.map} +1 -1
  165. package/dist/{od-WOKFDJTP-Ci-7AUKD.mjs → od-WOKFDJTP-D9CDg_0N.mjs} +2 -2
  166. package/dist/{od-WOKFDJTP-Ci-7AUKD.mjs.map → od-WOKFDJTP-D9CDg_0N.mjs.map} +1 -1
  167. package/dist/{paste-7JC6S4DX-By-QZFhH.mjs → paste-7JC6S4DX-BPZM8va6.mjs} +2 -2
  168. package/dist/{paste-7JC6S4DX-By-QZFhH.mjs.map → paste-7JC6S4DX-BPZM8va6.mjs.map} +1 -1
  169. package/dist/{paste-7JC6S4DX-CcluY3SW.cjs → paste-7JC6S4DX-DOfui9Os.cjs} +2 -2
  170. package/dist/{paste-7JC6S4DX-CcluY3SW.cjs.map → paste-7JC6S4DX-DOfui9Os.cjs.map} +1 -1
  171. package/dist/{printf-TWGXF445-BIL2LikJ.mjs → printf-TWGXF445-BFtTTFUx.mjs} +3 -3
  172. package/dist/{printf-TWGXF445-BIL2LikJ.mjs.map → printf-TWGXF445-BFtTTFUx.mjs.map} +1 -1
  173. package/dist/{printf-TWGXF445-B2JFcHkJ.cjs → printf-TWGXF445-CxEPw_qf.cjs} +3 -3
  174. package/dist/{printf-TWGXF445-B2JFcHkJ.cjs.map → printf-TWGXF445-CxEPw_qf.cjs.map} +1 -1
  175. package/dist/{python3-POMOR4OA-CRUFjgTB.mjs → python3-POMOR4OA-BrPhKjye.mjs} +3 -3
  176. package/dist/{python3-POMOR4OA-CRUFjgTB.mjs.map → python3-POMOR4OA-BrPhKjye.mjs.map} +1 -1
  177. package/dist/{python3-POMOR4OA-Bn9o5xa_.cjs → python3-POMOR4OA-C4csB3z_.cjs} +3 -3
  178. package/dist/{python3-POMOR4OA-Bn9o5xa_.cjs.map → python3-POMOR4OA-C4csB3z_.cjs.map} +1 -1
  179. package/dist/{rev-5EHFX4EJ-DupNIGct.cjs → rev-5EHFX4EJ-BDPraoKf.cjs} +2 -2
  180. package/dist/{rev-5EHFX4EJ-DupNIGct.cjs.map → rev-5EHFX4EJ-BDPraoKf.cjs.map} +1 -1
  181. package/dist/{rev-5EHFX4EJ-CVOJJds6.mjs → rev-5EHFX4EJ-DT84cm7e.mjs} +2 -2
  182. package/dist/{rev-5EHFX4EJ-CVOJJds6.mjs.map → rev-5EHFX4EJ-DT84cm7e.mjs.map} +1 -1
  183. package/dist/{rg-S4FXYXWB-DT3iZWlx.cjs → rg-S4FXYXWB-BOtIPQjO.cjs} +3 -3
  184. package/dist/{rg-S4FXYXWB-DT3iZWlx.cjs.map → rg-S4FXYXWB-BOtIPQjO.cjs.map} +1 -1
  185. package/dist/{rg-S4FXYXWB-CezCFXCC.mjs → rg-S4FXYXWB-DvLBW3FF.mjs} +3 -3
  186. package/dist/{rg-S4FXYXWB-CezCFXCC.mjs.map → rg-S4FXYXWB-DvLBW3FF.mjs.map} +1 -1
  187. package/dist/{rm-SSGETQVQ-DamSzyVi.mjs → rm-SSGETQVQ-CSmxrWHU.mjs} +2 -2
  188. package/dist/{rm-SSGETQVQ-DamSzyVi.mjs.map → rm-SSGETQVQ-CSmxrWHU.mjs.map} +1 -1
  189. package/dist/{rm-SSGETQVQ-Dpw1qQmO.cjs → rm-SSGETQVQ-mSI8N9e1.cjs} +2 -2
  190. package/dist/{rm-SSGETQVQ-Dpw1qQmO.cjs.map → rm-SSGETQVQ-mSI8N9e1.cjs.map} +1 -1
  191. package/dist/{rmdir-OC4ZLPYA-CjhUuzYY.mjs → rmdir-OC4ZLPYA-DBRCWWxY.mjs} +2 -2
  192. package/dist/{rmdir-OC4ZLPYA-CjhUuzYY.mjs.map → rmdir-OC4ZLPYA-DBRCWWxY.mjs.map} +1 -1
  193. package/dist/{rmdir-OC4ZLPYA-BgRhHhqc.cjs → rmdir-OC4ZLPYA-KewwQ5OQ.cjs} +2 -2
  194. package/dist/{rmdir-OC4ZLPYA-BgRhHhqc.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-W9sjT6JH.mjs → sed-S5UIK574-BPN7JI6S.mjs} +2 -2
  198. package/dist/{sed-S5UIK574-W9sjT6JH.mjs.map → sed-S5UIK574-BPN7JI6S.mjs.map} +1 -1
  199. package/dist/{sed-S5UIK574-CAB4O14o.cjs → sed-S5UIK574-D2fQ08wE.cjs} +2 -2
  200. package/dist/{sed-S5UIK574-CAB4O14o.cjs.map → sed-S5UIK574-D2fQ08wE.cjs.map} +1 -1
  201. package/dist/{sha1sum-2PTOAFR6-CQXvW7hE.cjs → sha1sum-2PTOAFR6-CUzO9jAy.cjs} +3 -3
  202. package/dist/{sha1sum-2PTOAFR6-CQXvW7hE.cjs.map → sha1sum-2PTOAFR6-CUzO9jAy.cjs.map} +1 -1
  203. package/dist/{sha1sum-2PTOAFR6-CjO1AnCs.mjs → sha1sum-2PTOAFR6-CaclrBG7.mjs} +3 -3
  204. package/dist/{sha1sum-2PTOAFR6-CjO1AnCs.mjs.map → sha1sum-2PTOAFR6-CaclrBG7.mjs.map} +1 -1
  205. package/dist/{sha256sum-NS7D3IXX-CfwCHZAO.cjs → sha256sum-NS7D3IXX-CyjoG_Fo.cjs} +3 -3
  206. package/dist/{sha256sum-NS7D3IXX-CfwCHZAO.cjs.map → sha256sum-NS7D3IXX-CyjoG_Fo.cjs.map} +1 -1
  207. package/dist/{sha256sum-NS7D3IXX-CUL2cnM9.mjs → sha256sum-NS7D3IXX-Dirjqo9R.mjs} +3 -3
  208. package/dist/{sha256sum-NS7D3IXX-CUL2cnM9.mjs.map → sha256sum-NS7D3IXX-Dirjqo9R.mjs.map} +1 -1
  209. package/dist/{sleep-X22JJINO-f7XVUQXn.cjs → sleep-X22JJINO-BmN15X75.cjs} +2 -2
  210. package/dist/{sleep-X22JJINO-f7XVUQXn.cjs.map → sleep-X22JJINO-BmN15X75.cjs.map} +1 -1
  211. package/dist/{sleep-X22JJINO-DterE54A.mjs → sleep-X22JJINO-C85vW9bl.mjs} +2 -2
  212. package/dist/{sleep-X22JJINO-DterE54A.mjs.map → sleep-X22JJINO-C85vW9bl.mjs.map} +1 -1
  213. package/dist/{sort-SW2YEO5B-CxI3IB8r.cjs → sort-SW2YEO5B-BXo_cCn8.cjs} +3 -3
  214. package/dist/{sort-SW2YEO5B-CxI3IB8r.cjs.map → sort-SW2YEO5B-BXo_cCn8.cjs.map} +1 -1
  215. package/dist/{sort-SW2YEO5B-Bwsz5nWP.mjs → sort-SW2YEO5B-OWnbfe9g.mjs} +3 -3
  216. package/dist/{sort-SW2YEO5B-Bwsz5nWP.mjs.map → sort-SW2YEO5B-OWnbfe9g.mjs.map} +1 -1
  217. package/dist/{split-4KKZZXXE-CbYicfn8.cjs → split-4KKZZXXE-BRZ9Onc5.cjs} +2 -2
  218. package/dist/{split-4KKZZXXE-CbYicfn8.cjs.map → split-4KKZZXXE-BRZ9Onc5.cjs.map} +1 -1
  219. package/dist/{split-4KKZZXXE-CSlaFM2x.mjs → split-4KKZZXXE-Do1z2dE5.mjs} +2 -2
  220. package/dist/{split-4KKZZXXE-CSlaFM2x.mjs.map → split-4KKZZXXE-Do1z2dE5.mjs.map} +1 -1
  221. package/dist/{sqlite3-CGOEFJAO-ZWNmR0V9.cjs → sqlite3-CGOEFJAO-B6nuurF0.cjs} +3 -3
  222. package/dist/{sqlite3-CGOEFJAO-ZWNmR0V9.cjs.map → sqlite3-CGOEFJAO-B6nuurF0.cjs.map} +1 -1
  223. package/dist/{sqlite3-CGOEFJAO-c1BPhcI3.mjs → sqlite3-CGOEFJAO-DrBY4xSR.mjs} +3 -3
  224. package/dist/{sqlite3-CGOEFJAO-c1BPhcI3.mjs.map → sqlite3-CGOEFJAO-DrBY4xSR.mjs.map} +1 -1
  225. package/dist/{start-MBSz5HQb.cjs → start-ClWb87N-.cjs} +180 -124
  226. package/dist/start-ClWb87N-.cjs.map +1 -0
  227. package/dist/{start-CKxh9Ozm.mjs → start-zbLIFKlv.mjs} +180 -124
  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-BdetudYk.cjs → strings-6WDHLGMX-Cja4C0R3.cjs} +2 -2
  232. package/dist/{strings-6WDHLGMX-BdetudYk.cjs.map → strings-6WDHLGMX-Cja4C0R3.cjs.map} +1 -1
  233. package/dist/{strings-6WDHLGMX-DiYPNtXb.mjs → strings-6WDHLGMX-DPcD3lVo.mjs} +2 -2
  234. package/dist/{strings-6WDHLGMX-DiYPNtXb.mjs.map → strings-6WDHLGMX-DPcD3lVo.mjs.map} +1 -1
  235. package/dist/{tac-2STMMJYW-B7OoWT_U.mjs → tac-2STMMJYW-Bap8fjvo.mjs} +2 -2
  236. package/dist/{tac-2STMMJYW-B7OoWT_U.mjs.map → tac-2STMMJYW-Bap8fjvo.mjs.map} +1 -1
  237. package/dist/{tac-2STMMJYW-BSY6Cwj8.cjs → tac-2STMMJYW-hqV9IWjO.cjs} +2 -2
  238. package/dist/{tac-2STMMJYW-BSY6Cwj8.cjs.map → tac-2STMMJYW-hqV9IWjO.cjs.map} +1 -1
  239. package/dist/{tail-R4PCA2C4-CLN95T7S.mjs → tail-R4PCA2C4-D8gTAJv4.mjs} +2 -2
  240. package/dist/{tail-R4PCA2C4-CLN95T7S.mjs.map → tail-R4PCA2C4-D8gTAJv4.mjs.map} +1 -1
  241. package/dist/{tail-R4PCA2C4-DjxLbbV-.cjs → tail-R4PCA2C4-DLYInTSg.cjs} +2 -2
  242. package/dist/{tail-R4PCA2C4-DjxLbbV-.cjs.map → tail-R4PCA2C4-DLYInTSg.cjs.map} +1 -1
  243. package/dist/{tar-STHHZTZ6-DF-n62Vs.mjs → tar-STHHZTZ6-BvaMjwan.mjs} +4 -4
  244. package/dist/{tar-STHHZTZ6-DF-n62Vs.mjs.map → tar-STHHZTZ6-BvaMjwan.mjs.map} +1 -1
  245. package/dist/{tar-STHHZTZ6-DvB6AkG2.cjs → tar-STHHZTZ6-C1coMUN-.cjs} +5 -5
  246. package/dist/{tar-STHHZTZ6-DvB6AkG2.cjs.map → tar-STHHZTZ6-C1coMUN-.cjs.map} +1 -1
  247. package/dist/{tee-YUZ2FKCJ-_l9qTJch.mjs → tee-YUZ2FKCJ-BeZbMeQg.mjs} +2 -2
  248. package/dist/{tee-YUZ2FKCJ-_l9qTJch.mjs.map → tee-YUZ2FKCJ-BeZbMeQg.mjs.map} +1 -1
  249. package/dist/{tee-YUZ2FKCJ-CksTNads.cjs → tee-YUZ2FKCJ-DZjg1j71.cjs} +2 -2
  250. package/dist/{tee-YUZ2FKCJ-CksTNads.cjs.map → tee-YUZ2FKCJ-DZjg1j71.cjs.map} +1 -1
  251. package/dist/{time-D4LNBSWX-40_1kPdP.mjs → time-D4LNBSWX-CwNJDX9k.mjs} +2 -2
  252. package/dist/{time-D4LNBSWX-40_1kPdP.mjs.map → time-D4LNBSWX-CwNJDX9k.mjs.map} +1 -1
  253. package/dist/{time-D4LNBSWX-DiI0vjvV.cjs → time-D4LNBSWX-D0o9WKnd.cjs} +2 -2
  254. package/dist/{time-D4LNBSWX-DiI0vjvV.cjs.map → time-D4LNBSWX-D0o9WKnd.cjs.map} +1 -1
  255. package/dist/{timeout-YDCRSLPQ-CUgf7efV.mjs → timeout-YDCRSLPQ-BYQu8FB_.mjs} +2 -2
  256. package/dist/{timeout-YDCRSLPQ-CUgf7efV.mjs.map → timeout-YDCRSLPQ-BYQu8FB_.mjs.map} +1 -1
  257. package/dist/{timeout-YDCRSLPQ-cmqLQn-O.cjs → timeout-YDCRSLPQ-gCL0dPir.cjs} +2 -2
  258. package/dist/{timeout-YDCRSLPQ-cmqLQn-O.cjs.map → timeout-YDCRSLPQ-gCL0dPir.cjs.map} +1 -1
  259. package/dist/{touch-UA33VN3N-02vOLkJx.mjs → touch-UA33VN3N-Clj615aH.mjs} +2 -2
  260. package/dist/{touch-UA33VN3N-02vOLkJx.mjs.map → touch-UA33VN3N-Clj615aH.mjs.map} +1 -1
  261. package/dist/{touch-UA33VN3N-B3rLDkVA.cjs → touch-UA33VN3N-W1buBQYM.cjs} +2 -2
  262. package/dist/{touch-UA33VN3N-B3rLDkVA.cjs.map → touch-UA33VN3N-W1buBQYM.cjs.map} +1 -1
  263. package/dist/{tr-36LHWFRQ-BwnDmJhv.mjs → tr-36LHWFRQ-DPz3syv0.mjs} +2 -2
  264. package/dist/{tr-36LHWFRQ-BwnDmJhv.mjs.map → tr-36LHWFRQ-DPz3syv0.mjs.map} +1 -1
  265. package/dist/{tr-36LHWFRQ-BfGf2mLy.cjs → tr-36LHWFRQ-DS2DvRpE.cjs} +2 -2
  266. package/dist/{tr-36LHWFRQ-BfGf2mLy.cjs.map → tr-36LHWFRQ-DS2DvRpE.cjs.map} +1 -1
  267. package/dist/{tree-YLD52CNT-DqLUz109.mjs → tree-YLD52CNT-BbMGKPvW.mjs} +2 -2
  268. package/dist/{tree-YLD52CNT-DqLUz109.mjs.map → tree-YLD52CNT-BbMGKPvW.mjs.map} +1 -1
  269. package/dist/{tree-YLD52CNT-B3eXfjPn.cjs → tree-YLD52CNT-BoQBXdSr.cjs} +2 -2
  270. package/dist/{tree-YLD52CNT-B3eXfjPn.cjs.map → tree-YLD52CNT-BoQBXdSr.cjs.map} +1 -1
  271. package/dist/{unexpand-CADSA4VO-VlwyRCQP.mjs → unexpand-CADSA4VO-C0IRoV5k.mjs} +2 -2
  272. package/dist/{unexpand-CADSA4VO-VlwyRCQP.mjs.map → unexpand-CADSA4VO-C0IRoV5k.mjs.map} +1 -1
  273. package/dist/{unexpand-CADSA4VO-CdhtwV2v.cjs → unexpand-CADSA4VO-DM36-Dne.cjs} +2 -2
  274. package/dist/{unexpand-CADSA4VO-CdhtwV2v.cjs.map → unexpand-CADSA4VO-DM36-Dne.cjs.map} +1 -1
  275. package/dist/{uniq-XSIZR6PB-DAXqaH8E.mjs → uniq-XSIZR6PB-DTNQOumC.mjs} +3 -3
  276. package/dist/{uniq-XSIZR6PB-DAXqaH8E.mjs.map → uniq-XSIZR6PB-DTNQOumC.mjs.map} +1 -1
  277. package/dist/{uniq-XSIZR6PB-Ch7QSVAZ.cjs → uniq-XSIZR6PB-cbqtNDFd.cjs} +3 -3
  278. package/dist/{uniq-XSIZR6PB-Ch7QSVAZ.cjs.map → uniq-XSIZR6PB-cbqtNDFd.cjs.map} +1 -1
  279. package/dist/{wc-LF7NU4LA-Ny3uANGM.cjs → wc-LF7NU4LA-CmxEf7a9.cjs} +3 -3
  280. package/dist/{wc-LF7NU4LA-Ny3uANGM.cjs.map → wc-LF7NU4LA-CmxEf7a9.cjs.map} +1 -1
  281. package/dist/{wc-LF7NU4LA-Q1EAygpb.mjs → wc-LF7NU4LA-CrZ2_f9J.mjs} +3 -3
  282. package/dist/{wc-LF7NU4LA-Q1EAygpb.mjs.map → wc-LF7NU4LA-CrZ2_f9J.mjs.map} +1 -1
  283. package/dist/{with-project-scope-BqDYOg9O.mjs → with-project-scope-5Gfc8263.mjs} +2 -2
  284. package/dist/{with-project-scope-BqDYOg9O.mjs.map → with-project-scope-5Gfc8263.mjs.map} +1 -1
  285. package/dist/{with-project-scope-CYWdNoND.cjs → with-project-scope-Hh6iqeoh.cjs} +2 -2
  286. package/dist/{with-project-scope-CYWdNoND.cjs.map → with-project-scope-Hh6iqeoh.cjs.map} +1 -1
  287. package/dist/{xan-Y6WF3IRG-QiEtoTG4.cjs → xan-Y6WF3IRG-CdBO57j3.cjs} +6 -6
  288. package/dist/{xan-Y6WF3IRG-QiEtoTG4.cjs.map → xan-Y6WF3IRG-CdBO57j3.cjs.map} +1 -1
  289. package/dist/{xan-Y6WF3IRG-unqwcLj2.mjs → xan-Y6WF3IRG-rLQOC4c5.mjs} +6 -6
  290. package/dist/{xan-Y6WF3IRG-unqwcLj2.mjs.map → xan-Y6WF3IRG-rLQOC4c5.mjs.map} +1 -1
  291. package/dist/{xan-view-HDVKHFC2-Dg8w1JPa.mjs → xan-view-HDVKHFC2-BLteyNnh.mjs} +3 -3
  292. package/dist/{xan-view-HDVKHFC2-Dg8w1JPa.mjs.map → xan-view-HDVKHFC2-BLteyNnh.mjs.map} +1 -1
  293. package/dist/{xan-view-HDVKHFC2-BuH-MKEl.cjs → xan-view-HDVKHFC2-CJxt0KHg.cjs} +3 -3
  294. package/dist/{xan-view-HDVKHFC2-BuH-MKEl.cjs.map → xan-view-HDVKHFC2-CJxt0KHg.cjs.map} +1 -1
  295. package/dist/{xargs-MGZPH7AX-BbxYcwaV.cjs → xargs-MGZPH7AX-BwI33_UH.cjs} +2 -2
  296. package/dist/{xargs-MGZPH7AX-BbxYcwaV.cjs.map → xargs-MGZPH7AX-BwI33_UH.cjs.map} +1 -1
  297. package/dist/{xargs-MGZPH7AX-2U3kL7dv.mjs → xargs-MGZPH7AX-zJMHUR_2.mjs} +2 -2
  298. package/dist/{xargs-MGZPH7AX-2U3kL7dv.mjs.map → xargs-MGZPH7AX-zJMHUR_2.mjs.map} +1 -1
  299. package/dist/{yq-4QJW3EQG-DNbPHGic.mjs → yq-4QJW3EQG-B_jhRTwa.mjs} +3 -3
  300. package/dist/{yq-4QJW3EQG-DNbPHGic.mjs.map → yq-4QJW3EQG-B_jhRTwa.mjs.map} +1 -1
  301. package/dist/{yq-4QJW3EQG-DxlASFGb.cjs → yq-4QJW3EQG-CpEslf6d.cjs} +3 -3
  302. package/dist/{yq-4QJW3EQG-DxlASFGb.cjs.map → yq-4QJW3EQG-CpEslf6d.cjs.map} +1 -1
  303. package/package.json +1 -1
  304. package/dist/dist-AKkRwuhE.cjs.map +0 -1
  305. package/dist/dist-Cj3RPKwD.mjs.map +0 -1
  306. package/dist/dist-D7eFCDTR.mjs.map +0 -1
  307. package/dist/dist-bLC4LOvt.cjs.map +0 -1
  308. package/dist/start-CKxh9Ozm.mjs.map +0 -1
  309. package/dist/start-MBSz5HQb.cjs.map +0 -1
@@ -1,4 +1,4 @@
1
- const require_dist$3 = require("./dist-bLC4LOvt.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");
@@ -10224,6 +10224,7 @@ function mcpProbeToAppTemplate(probe) {
10224
10224
  };
10225
10225
  return {
10226
10226
  authKind: "api_key",
10227
+ credentialScheme: "NO_AUTH",
10227
10228
  credentialFields: {},
10228
10229
  oauthScopes: [],
10229
10230
  url
@@ -10724,10 +10725,10 @@ const CreateCredentialsRequestSchema = CredentialTargetsFieldsSchema.extend({
10724
10725
  message: "OAuth credentials are created via the OAuth callback",
10725
10726
  path: ["connectionKind"]
10726
10727
  });
10727
- if (input.connectionKind === "none") ctx.addIssue({
10728
+ if (input.connectionKind === "none" && input.value) ctx.addIssue({
10728
10729
  code: "custom",
10729
- message: "No-auth credentials are created via the connect dialog",
10730
- path: ["connectionKind"]
10730
+ message: "value is not allowed for no-auth connections",
10731
+ path: ["value"]
10731
10732
  });
10732
10733
  });
10733
10734
  /** Request body for `PATCH /api/credentials/:id`. */
@@ -13187,7 +13188,7 @@ function registerWorkflowRunGetter(fn) {
13187
13188
  }
13188
13189
  new node_async_hooks.AsyncLocalStorage();
13189
13190
  //#endregion
13190
- //#region ../../packages/credentials/dist/store-C6DRzb2o.mjs
13191
+ //#region ../../packages/credentials/dist/store-B7IWQPwD.mjs
13191
13192
  function normalizeRow(row) {
13192
13193
  const { projectId: _projectId, ...rest } = row;
13193
13194
  return rest;
@@ -24843,21 +24844,29 @@ var StreamableHTTPClientTransport = class {
24843
24844
  };
24844
24845
  //#endregion
24845
24846
  //#region ../../packages/mcp/dist/index.mjs
24846
- /** Union OAuth scope names from metadata sources, preserving first-seen order. */
24847
- function mergeOAuthScopes(...lists) {
24848
- const seen = /* @__PURE__ */ new Set();
24849
- const result = [];
24850
- for (const list of lists) {
24851
- if (!list?.length) continue;
24852
- for (const scope of list) {
24853
- const trimmed = scope.trim();
24854
- if (trimmed && !seen.has(trimmed)) {
24855
- seen.add(trimmed);
24856
- result.push(trimmed);
24857
- }
24858
- }
24859
- }
24860
- 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
+ };
24861
24870
  }
24862
24871
  /** Thrown when a URL is not safe for server-side outbound fetch (SSRF guard). */
24863
24872
  var PublicHttpUrlError = class extends Error {
@@ -24970,6 +24979,7 @@ function createPublicHttpFetch(fetchFn = fetch) {
24970
24979
  });
24971
24980
  };
24972
24981
  }
24982
+ const MCP_AUTHORIZATION_PROTOCOL_VERSION = "2025-11-25";
24973
24983
  function resourceNameFromMetadata(metadata) {
24974
24984
  return metadata?.resource_name?.trim() || void 0;
24975
24985
  }
@@ -24989,6 +24999,74 @@ async function probeUnauthenticatedStatus(url, fetchFn) {
24989
24999
  return {};
24990
25000
  }
24991
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
+ }
24992
25070
  function scopesFromMetadata(metadata) {
24993
25071
  if (!metadata?.scopes_supported?.length) return [];
24994
25072
  return metadata.scopes_supported;
@@ -25001,68 +25079,37 @@ function logProbeFallback(phase, error) {
25001
25079
  async function probeMcpAuth(url, fetchFn = fetch) {
25002
25080
  assertPublicHttpUrl(url);
25003
25081
  const safeFetch = createPublicHttpFetch(fetchFn);
25004
- const serverUrl = new URL(url);
25005
- const { status, wwwAuthenticate } = await probeUnauthenticatedStatus(url, safeFetch);
25006
- let resourceMetadataUrl;
25007
- if (wwwAuthenticate) {
25008
- resourceMetadataUrl = extractWWWAuthenticateParams(new Response(null, { headers: { "www-authenticate": wwwAuthenticate } })).resourceMetadataUrl?.toString();
25009
- if (resourceMetadataUrl) assertPublicHttpUrl(resourceMetadataUrl);
25010
- }
25082
+ const initial = await probeUnauthenticatedStatus(url, safeFetch);
25011
25083
  try {
25012
- const discovered = await discoverOAuthServerInfo(serverUrl, {
25013
- fetchFn: safeFetch,
25014
- ...resourceMetadataUrl ? { resourceMetadataUrl: new URL(resourceMetadataUrl) } : {}
25015
- });
25084
+ const discovered = await discoverMcpOAuthServerFromProbe(url, safeFetch, initial);
25016
25085
  const metadata = discovered.authorizationServerMetadata;
25017
25086
  if (metadata?.authorization_endpoint && metadata.token_endpoint) return {
25018
25087
  url,
25019
25088
  mode: "oauth",
25020
- unauthenticatedStatus: status,
25089
+ unauthenticatedStatus: initial.status,
25021
25090
  oauth: {
25022
25091
  issuer: metadata.issuer,
25023
25092
  authorizationEndpoint: metadata.authorization_endpoint,
25024
25093
  tokenEndpoint: metadata.token_endpoint,
25025
25094
  registrationEndpoint: metadata.registration_endpoint,
25026
- scopes: mergeOAuthScopes(scopesFromMetadata(metadata), scopesFromMetadata(discovered.resourceMetadata)),
25095
+ scopes: discovered.challengeScope ? discovered.challengeScope.split(/\s+/).filter(Boolean) : scopesFromMetadata(discovered.resourceMetadata),
25027
25096
  resource: discovered.resourceMetadata?.resource,
25028
25097
  resourceName: resourceNameFromMetadata(discovered.resourceMetadata)
25029
25098
  }
25030
25099
  };
25031
25100
  } catch (error) {
25032
- logProbeFallback("discoverOAuthServerInfo", error);
25033
- }
25034
- try {
25035
- const protectedResource = await discoverOAuthProtectedResourceMetadata(serverUrl, {}, safeFetch);
25036
- const authorizationServerUrl = protectedResource.authorization_servers?.[0] ?? serverUrl.origin;
25037
- assertPublicHttpUrl(authorizationServerUrl);
25038
- const metadata = await discoverAuthorizationServerMetadata(authorizationServerUrl, { fetchFn: safeFetch });
25039
- if (metadata?.authorization_endpoint && metadata.token_endpoint) return {
25040
- url,
25041
- mode: "oauth",
25042
- unauthenticatedStatus: status,
25043
- oauth: {
25044
- issuer: metadata.issuer,
25045
- authorizationEndpoint: metadata.authorization_endpoint,
25046
- tokenEndpoint: metadata.token_endpoint,
25047
- registrationEndpoint: metadata.registration_endpoint,
25048
- scopes: mergeOAuthScopes(scopesFromMetadata(metadata), scopesFromMetadata(protectedResource)),
25049
- resource: protectedResource.resource,
25050
- resourceName: resourceNameFromMetadata(protectedResource)
25051
- }
25052
- };
25053
- } catch (error) {
25054
- logProbeFallback("discoverOAuthProtectedResourceMetadata", error);
25101
+ logProbeFallback("discoverMcpOAuthServer", error);
25055
25102
  }
25056
- if (status === 401 || status === 403) return {
25103
+ if (initial.status === 401 || initial.status === 403) return {
25057
25104
  url,
25058
25105
  mode: "token",
25059
- unauthenticatedStatus: status,
25106
+ unauthenticatedStatus: initial.status,
25060
25107
  scheme: "BEARER_TOKEN"
25061
25108
  };
25062
25109
  return {
25063
25110
  url,
25064
25111
  mode: "none",
25065
- unauthenticatedStatus: status
25112
+ unauthenticatedStatus: initial.status
25066
25113
  };
25067
25114
  }
25068
25115
  /** Best-effort server metadata for no-auth MCP servers (initialize handshake). */
@@ -31882,11 +31929,70 @@ async function describeCredentialBindings(requirements, context) {
31882
31929
  preload
31883
31930
  }, preload));
31884
31931
  }
31885
- function encodeOAuthState(payload) {
31886
- return (0, _keystrokehq_database.encryptCredentialPayload)(JSON.stringify(payload));
31887
- }
31888
- function decodeOAuthState(state) {
31889
- 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
+ }
31890
31996
  }
31891
31997
  function oauthAppMetadata(oauth, mcpUrl, options) {
31892
31998
  return {
@@ -31897,7 +32003,9 @@ function oauthAppMetadata(oauth, mcpUrl, options) {
31897
32003
  resource: oauth.resource,
31898
32004
  issuer: oauth.issuer,
31899
32005
  scopes: oauth.scopes,
31900
- ...options?.tokenEndpointAuthMethod ? { tokenEndpointAuthMethod: options.tokenEndpointAuthMethod } : {}
32006
+ ...options?.tokenEndpointAuthMethod ? { tokenEndpointAuthMethod: options.tokenEndpointAuthMethod } : {},
32007
+ ...options?.clientRegistrationMode ? { clientRegistrationMode: options.clientRegistrationMode } : {},
32008
+ ...options?.redirectUri ? { redirectUri: options.redirectUri } : {}
31901
32009
  };
31902
32010
  }
31903
32011
  function oauthClientSecretForStorage(clientSecret) {
@@ -31928,14 +32036,62 @@ async function discoverMcpApp(url) {
31928
32036
  };
31929
32037
  }
31930
32038
  var McpOAuthConnectError = class extends Error {
32039
+ phase;
31931
32040
  diagnostics;
31932
- phase = "dynamic_client_registration";
31933
- constructor(cause, diagnostics) {
31934
- super(cause instanceof Error ? cause.message : "Dynamic client registration failed", { cause });
32041
+ constructor(phase, message, diagnostics = {}) {
32042
+ super(message);
32043
+ this.phase = phase;
31935
32044
  this.diagnostics = diagnostics;
31936
32045
  this.name = "McpOAuthConnectError";
31937
32046
  }
31938
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
+ }
31939
32095
  /**
31940
32096
  * Prefer CIMD (URL client_id) when the AS advertises support and we have an
31941
32097
  * HTTPS metadata URL; otherwise DCR. Localhost HTTP cannot be a CIMD client_id
@@ -31946,15 +32102,27 @@ var McpOAuthConnectError = class extends Error {
31946
32102
  */
31947
32103
  async function resolveMcpOAuthClientInformation(options) {
31948
32104
  const supportsCimd = options.metadata.client_id_metadata_document_supported === true;
31949
- 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 {
31950
32107
  client_id: options.clientMetadataUrl,
31951
- token_endpoint_auth_method: "none"
32108
+ token_endpoint_auth_method: "none",
32109
+ registrationMode: "cimd"
31952
32110
  };
31953
32111
  if (options.metadata.registration_endpoint) {
31954
- const grantTypes = ["authorization_code", "refresh_token"];
31955
- const tokenEndpointAuthMethod = "client_secret_post";
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;
31956
32123
  try {
31957
- return await registerClient(options.authorizationServerUrl, {
32124
+ const safeFetch = createPublicHttpFetch();
32125
+ return validateRegisteredClientInformation(await registerClient(options.authorizationServerUrl, {
31958
32126
  metadata: options.metadata,
31959
32127
  clientMetadata: {
31960
32128
  client_name: "Keystroke",
@@ -31963,54 +32131,112 @@ async function resolveMcpOAuthClientInformation(options) {
31963
32131
  response_types: ["code"],
31964
32132
  token_endpoint_auth_method: tokenEndpointAuthMethod
31965
32133
  },
31966
- scope: options.scope
31967
- });
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);
31968
32141
  } catch (error) {
31969
- throw new McpOAuthConnectError(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,
31970
32144
  authorizationServerUrl: options.authorizationServerUrl,
31971
32145
  registrationEndpoint: options.metadata.registration_endpoint,
31972
32146
  grantTypes,
31973
- tokenEndpointAuthMethod
32147
+ tokenEndpointAuthMethod,
32148
+ ...providerHttpStatus ? { providerHttpStatus } : {},
32149
+ ...oauthErrorCode(error) ? { oauthError: oauthErrorCode(error) } : {}
31974
32150
  });
31975
32151
  }
31976
32152
  }
31977
- 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)");
32153
+ if (supportsCimd) throw new Error("Authorization server supports Client ID Metadata Documents, but not Keystroke's public-client authentication or HTTPS metadata URL");
31978
32154
  throw new Error("MCP authorization server does not support Client ID Metadata Documents or Dynamic Client Registration");
31979
32155
  }
31980
32156
  async function beginMcpOAuthConnect(options) {
31981
32157
  const appUrl = options.app.url?.trim();
31982
32158
  if (!appUrl || options.app.source !== "mcp" || options.app.authKind !== "oauth") throw new Error("App is not a direct MCP OAuth app");
31983
- 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
+ }
31984
32168
  const metadata = discovered.authorizationServerMetadata;
31985
- 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
+ }
31986
32190
  const oauth = {
31987
32191
  issuer: metadata.issuer,
31988
32192
  authorizationEndpoint: metadata.authorization_endpoint,
31989
32193
  tokenEndpoint: metadata.token_endpoint,
31990
32194
  registrationEndpoint: metadata.registration_endpoint,
31991
- scopes: mergeOAuthScopes(metadata.scopes_supported, discovered.resourceMetadata?.scopes_supported, options.app.oauthScopes.map((scope) => scope.name)),
31992
- resource: discovered.resourceMetadata?.resource,
32195
+ scopes: discovered.challengeScope ? discovered.challengeScope.split(/\s+/).filter(Boolean) : discovered.resourceMetadata.scopes_supported ?? [],
32196
+ resource: resourceUrl.toString(),
31993
32197
  resourceName: discovered.resourceMetadata?.resource_name?.trim() || void 0
31994
32198
  };
31995
- const defaultScopeNames = options.app.oauthScopes.flatMap((entry) => entry.defaultSelected !== false ? [entry.name] : []);
31996
- const scope = options.input.scopes?.join(" ") || (defaultScopeNames.length > 0 ? defaultScopeNames.join(" ") : oauth.scopes.join(" "));
31997
- const clientInformation = await resolveMcpOAuthClientInformation({
31998
- authorizationServerUrl: discovered.authorizationServerUrl,
31999
- metadata,
32000
- redirectUri: options.redirectUri,
32001
- scope: scope || void 0,
32002
- clientMetadataUrl: options.clientMetadataUrl
32003
- });
32004
- await (0, _keystrokehq_platform_database.ensureOAuthApp)({
32005
- slug: options.app.slug,
32006
- provider: "mcp",
32007
- tokenStrategy: "refresh",
32008
- clientId: clientInformation.client_id,
32009
- clientSecret: oauthClientSecretForStorage(clientInformation.client_secret),
32010
- metadata: oauthAppMetadata(oauth, appUrl, { tokenEndpointAuthMethod: clientInformation.token_endpoint_auth_method })
32011
- });
32012
- 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
+ }
32013
32238
  const statePayload = {
32239
+ correlationId,
32014
32240
  codeVerifier: "",
32015
32241
  appSlug: options.app.slug,
32016
32242
  organizationId: options.organizationId,
@@ -32022,76 +32248,107 @@ async function beginMcpOAuthConnect(options) {
32022
32248
  authorizationServerUrl: discovered.authorizationServerUrl,
32023
32249
  resource: oauth.resource,
32024
32250
  oauthMetadata: oauth,
32251
+ authorizationServerMetadata: metadata,
32025
32252
  mcpUrl: appUrl,
32026
32253
  redirectUri: options.redirectUri,
32027
32254
  clientId: clientInformation.client_id,
32028
32255
  clientSecret: clientInformation.client_secret,
32029
32256
  tokenEndpointAuthMethod: clientInformation.token_endpoint_auth_method,
32257
+ clientRegistrationMode: clientInformation.registrationMode,
32030
32258
  label: options.input.label,
32031
32259
  credentialInstanceId: options.input.credentialInstanceId
32032
32260
  };
32033
- const { authorizationUrl, codeVerifier } = await startAuthorization(discovered.authorizationServerUrl, {
32034
- metadata,
32035
- clientInformation,
32036
- redirectUrl: options.redirectUri,
32037
- scope: scope || void 0,
32038
- resource: resourceUrl
32039
- });
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
+ }
32040
32278
  statePayload.codeVerifier = codeVerifier;
32041
- const state = encodeOAuthState(statePayload);
32279
+ const state = await encodeOAuthState(statePayload);
32042
32280
  authorizationUrl.searchParams.set("state", state);
32043
32281
  return { authorizeUrl: authorizationUrl.toString() };
32044
32282
  }
32045
32283
  async function completeMcpOAuthConnect(options) {
32046
- const payload = decodeOAuthState(options.state);
32047
- const metadata = {
32048
- issuer: payload.oauthMetadata.issuer ?? payload.authorizationServerUrl,
32049
- authorization_endpoint: payload.oauthMetadata.authorizationEndpoint,
32050
- token_endpoint: payload.oauthMetadata.tokenEndpoint,
32051
- registration_endpoint: payload.oauthMetadata.registrationEndpoint,
32052
- scopes_supported: payload.oauthMetadata.scopes,
32053
- response_types_supported: ["code"],
32054
- code_challenge_methods_supported: ["S256"]
32055
- };
32284
+ const { payload } = options;
32056
32285
  const resourceUrl = payload.resource ? new URL(payload.resource) : void 0;
32057
- const tokens = await exchangeAuthorization(payload.authorizationServerUrl, {
32058
- metadata,
32059
- clientInformation: {
32060
- client_id: payload.clientId,
32061
- ...payload.clientSecret ? { client_secret: payload.clientSecret } : {},
32062
- ...payload.tokenEndpointAuthMethod ? { token_endpoint_auth_method: payload.tokenEndpointAuthMethod } : {}
32063
- },
32064
- authorizationCode: options.code,
32065
- codeVerifier: payload.codeVerifier,
32066
- redirectUri: payload.redirectUri,
32067
- resource: resourceUrl
32068
- });
32069
- const { id: oauthAppId } = await (0, _keystrokehq_platform_database.ensureOAuthApp)({
32070
- slug: payload.appSlug,
32071
- provider: "mcp",
32072
- tokenStrategy: "refresh",
32073
- clientId: payload.clientId,
32074
- clientSecret: oauthClientSecretForStorage(payload.clientSecret),
32075
- metadata: oauthAppMetadata(payload.oauthMetadata, payload.mcpUrl, { tokenEndpointAuthMethod: payload.tokenEndpointAuthMethod })
32076
- });
32077
- const connectionId = await (0, _keystrokehq_platform_database.saveOAuthConnection)({
32078
- appId: oauthAppId,
32079
- externalId: payload.userId,
32080
- accessToken: tokens.access_token,
32081
- refreshToken: tokens.refresh_token,
32082
- accessTokenExpiresAt: accessTokenExpiresAt(tokens.expires_in),
32083
- grantedScopes: grantedScopesFromToken(tokens.scope, payload.oauthMetadata.scopes),
32084
- metadata: { mcpUrl: payload.oauthMetadata.resource }
32085
- });
32086
- await (0, _keystrokehq_database.ensureOAuthCredentialInstance)({
32087
- credentialKey: payload.appSlug,
32088
- connectionId,
32089
- accountLabel: payload.label,
32090
- externalId: payload.userId,
32091
- userLabel: payload.label,
32092
- targets: payload.scopeTargets,
32093
- credentialInstanceId: payload.credentialInstanceId
32094
- });
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
+ }
32095
32352
  return {
32096
32353
  appSlug: payload.appSlug,
32097
32354
  connectionId,
@@ -39121,4 +39378,4 @@ Object.defineProperty(exports, "withCredentialAssignments", {
39121
39378
  }
39122
39379
  });
39123
39380
 
39124
- //# sourceMappingURL=dist-AKkRwuhE.cjs.map
39381
+ //# sourceMappingURL=dist-ZPZwDr3w.cjs.map