@uipath/flow-tool 1.201.0 → 1.202.0-preview.136

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 (234) hide show
  1. package/dist/{authoring-7r6g06c7.js → authoring-wpa6d0vf.js} +74 -48
  2. package/dist/binding-service-dh91hw9e.js +141 -0
  3. package/dist/{browser-strategy-rkcvc6tn.js → browser-strategy-6atc7v8s.js} +3 -3
  4. package/dist/connector-service-d9ph9kx1.js +948 -0
  5. package/dist/{conversion-H2VEEYLB-ng48mbf7.js → conversion-QANACVCM-zs0hhfjv.js} +39 -33
  6. package/dist/{de-5KVP66U6-f7knj511.js → de-5KVP66U6-1bnf4zt5.js} +52 -52
  7. package/dist/de-6U7ECGHH-xwsw33fk.js +35 -0
  8. package/dist/{de-5HU6GFWV-4EZK6G7N-yrh21f52.js → de-7XQXX2DK-IDWR6CAR-n4z245kt.js} +857 -845
  9. package/dist/{de-5HU6GFWV-zheyw6d2.js → de-7XQXX2DK-tqdy5n2b.js} +857 -845
  10. package/dist/{de-HKTOVV4H-d5yw5j21.js → de-HKTOVV4H-pe9w0xn8.js} +46 -46
  11. package/dist/{de-XLT4QPIP-0rtw349w.js → de-XLT4QPIP-kj81dxjc.js} +9 -9
  12. package/dist/debug-conversation-trigger-452frzyz.js +41 -0
  13. package/dist/debug-http-client-wd6xb8v4.js +31 -0
  14. package/dist/debug-service-fvyexnb1.js +58 -0
  15. package/dist/edge-service-e77bndbe.js +162 -0
  16. package/dist/{elk.bundled-pydbzeez.js → elk.bundled-vpsbxz0p.js} +3 -3
  17. package/dist/{en-MABQK6C4-REWE2WG2-8dp4cqdg.js → en-5ZGC5VQ3-EWX7ILY7-rmtj70fk.js} +898 -898
  18. package/dist/{en-MABQK6C4-nkzq2j8t.js → en-5ZGC5VQ3-h581y30k.js} +897 -897
  19. package/dist/en-EPWMLP2N-2wvge238.js +28 -0
  20. package/dist/{en-UNT7BE26-rhh65jry.js → en-LQHKFSEY-vvbe8ve9.js} +13 -11
  21. package/dist/{en-P4AS26D7-szrzfxz1.js → en-P4AS26D7-zptp77bm.js} +45 -45
  22. package/dist/{en-4KXU7N7B-66fntxa2.js → en-X3S6IZ5J-nhkg6pwn.js} +54 -60
  23. package/dist/{es-MX-H2EAXLYI-qwnqt48x.js → es-MX-H2EAXLYI-j42kfkxy.js} +46 -46
  24. package/dist/es-MX-NHTIP5YM-ar6zfx95.js +35 -0
  25. package/dist/{es-MX-OKNDG2NH-c1k1s1tg.js → es-MX-OKNDG2NH-tcac6j4g.js} +9 -9
  26. package/dist/{es-MX-POESXYP2-UW6VP5QI-cd3a79g9.js → es-MX-U2VN3SZW-KYAJ2ONK-kdram1g1.js} +857 -845
  27. package/dist/{es-MX-POESXYP2-9538722k.js → es-MX-U2VN3SZW-anynsmd8.js} +857 -845
  28. package/dist/{es-MX-XAVLOQW3-9b3cp9n8.js → es-MX-XAVLOQW3-q00km2y7.js} +52 -52
  29. package/dist/{es-NQICVYSQ-aa9z3nhs.js → es-NQICVYSQ-3dtqgget.js} +9 -9
  30. package/dist/{es-O4PAV2CR-jwfaawwk.js → es-O4PAV2CR-0g23ve3v.js} +46 -46
  31. package/dist/es-PQ3RA33Q-y4kxhjfr.js +35 -0
  32. package/dist/{es-VFPNVMP5-thm0z9sr.js → es-VFPNVMP5-bx2c337j.js} +52 -52
  33. package/dist/{es-LUTYN7U7-IY5QWOUF-k2aefzc0.js → es-ZGCPPOME-24PJEGPV-rn86z9kn.js} +857 -845
  34. package/dist/{es-LUTYN7U7-ye5zn4sn.js → es-ZGCPPOME-8gazspjj.js} +857 -845
  35. package/dist/flow-api-wv8p8xbd.js +36 -0
  36. package/dist/flow-debug-service-tfbefas6.js +741 -0
  37. package/dist/flow-eval-node-target-c6wea7rz.js +44 -0
  38. package/dist/flow-eval-run-service-01kdky72.js +961 -0
  39. package/dist/flow-eval-service-ft8e16jz.js +1338 -0
  40. package/dist/flow-init-service-mva4crty.js +35 -0
  41. package/dist/flow-io-r318sjrw.js +36 -0
  42. package/dist/flow-migrate-service-rwcdx60q.js +119 -0
  43. package/dist/flow-pack-service-p4hxyj9e.js +280 -0
  44. package/dist/flow-validate-service-j25pxpwz.js +57 -0
  45. package/dist/{fr-5YRGHXF5-q6b63yg0.js → fr-5YRGHXF5-kz1ywpv6.js} +46 -46
  46. package/dist/{fr-E5MDO4EG-exvrs7ge.js → fr-E5MDO4EG-c3mkty2t.js} +52 -52
  47. package/dist/{fr-PFHIL7YZ-cxnshwa8.js → fr-PFHIL7YZ-2n589p47.js} +9 -9
  48. package/dist/fr-R4L3OAWI-30khpsmn.js +35 -0
  49. package/dist/{fr-LJIK56LW-STG6QR3T-cextvv8q.js → fr-T3G5GZCT-TU4IKBEG-k6xz1s1f.js} +857 -845
  50. package/dist/{fr-LJIK56LW-xf3xf2kh.js → fr-T3G5GZCT-y3f7xb1q.js} +857 -845
  51. package/dist/governance-fetcher-j9cx4f1d.js +391 -0
  52. package/dist/headless-h1myzz32.js +177196 -0
  53. package/dist/hitl-service-kvt5wms4.js +256 -0
  54. package/dist/index-1kgxzh8x.js +143 -0
  55. package/dist/index-4zrwgb3c.js +111 -0
  56. package/dist/index-ev4mdg5y.js +4801 -0
  57. package/dist/{index-er6vy3jk.js → index-eybzsdcc.js} +295 -317
  58. package/dist/{index-hsadteg4.js → index-h8cph72k.js} +4 -4
  59. package/dist/{index-p50kx6jv.js → index-k5tbd184.js} +276 -276
  60. package/dist/index-n33np76r.js +630 -0
  61. package/dist/{index-9f8q2ege.js → index-p3vk57z7.js} +27 -27
  62. package/dist/{index-dhcd9b82.js → index-w0z4s69j.js} +166 -81
  63. package/dist/index.js +29 -32
  64. package/dist/{index.umd.min-drpc57vn.js → index.umd.min-fqefd9kn.js} +3 -3
  65. package/dist/init.js +24 -25
  66. package/dist/input-reader-6pwhtp8v.js +11 -0
  67. package/dist/{ja-FGEGLBJ3-w9byjhze.js → ja-BI5K3JDZ-77zat4z2.js} +857 -845
  68. package/dist/{ja-FGEGLBJ3-MG3BSWXD-vq19zt2p.js → ja-BI5K3JDZ-GTIHISTZ-s6n3r2ab.js} +857 -845
  69. package/dist/{ja-DPO5PPLO-s2a7j3nj.js → ja-DPO5PPLO-mysfmznx.js} +52 -52
  70. package/dist/{ja-P4OSE367-8ywxep9a.js → ja-P4OSE367-srr3qypg.js} +9 -9
  71. package/dist/{ja-SDAPAVCR-943p5gx7.js → ja-SDAPAVCR-kg39dfap.js} +46 -46
  72. package/dist/ja-ZHKCBE5W-x73w6x3e.js +35 -0
  73. package/dist/{js-yaml-cggj6w7q.js → js-yaml-87cdx6bm.js} +27 -19
  74. package/dist/known-types-a20evmmg.js +20 -0
  75. package/dist/ko-6W7OGLLB-mnmqc584.js +35 -0
  76. package/dist/{ko-ITOPNIYI-qz39kamf.js → ko-ITOPNIYI-hmxd2asd.js} +52 -52
  77. package/dist/{ko-TUAK3G3A-s25w0ckg.js → ko-JOBF5V7N-4bv0mjje.js} +857 -845
  78. package/dist/{ko-TUAK3G3A-TBEBKOTM-ns78t2rv.js → ko-JOBF5V7N-O7T4HKIE-ape840y0.js} +857 -845
  79. package/dist/{ko-NAGOZLC3-wb3y9yhh.js → ko-NAGOZLC3-gaxxsnd2.js} +46 -46
  80. package/dist/{ko-PYOS2KJP-5sbj5bp8.js → ko-PYOS2KJP-e7dshyxy.js} +9 -9
  81. package/dist/localization-h8a53z6p.js +47 -0
  82. package/dist/{node-gd4469ea.js → node-cnrcrrb0.js} +7973 -7166
  83. package/dist/node-service-8g5x5d2y.js +70 -0
  84. package/dist/{node-strategy-8gzp67xs.js → node-strategy-gc4sg6a2.js} +132 -16
  85. package/dist/node-sync-service-e2reh33c.js +42 -0
  86. package/dist/{packager-tool-9qecd4wb.js → packager-tool-0gctz400.js} +5 -2
  87. package/dist/{packager-tool-1cb0d5e0.js → packager-tool-0v3s8r01.js} +2 -2
  88. package/dist/{packager-tool-wckvcay0.js → packager-tool-1yh8g550.js} +9 -7
  89. package/dist/packager-tool-27avrkyk.js +15 -0
  90. package/dist/packager-tool-2wefykg9.js +106 -0
  91. package/dist/packager-tool-4fhgws0x.js +757 -0
  92. package/dist/{packager-tool-7yjpwj92.js → packager-tool-4hx14snw.js} +49 -48
  93. package/dist/{packager-tool-3wygxefb.js → packager-tool-58q3tvh7.js} +10 -10
  94. package/dist/{packager-tool-cvwr40ax.js → packager-tool-5qaxht3k.js} +1425 -550
  95. package/dist/packager-tool-5z1eg3ea.js +33289 -0
  96. package/dist/{packager-tool-17cn3xb7.js → packager-tool-6m078z5s.js} +13388 -19366
  97. package/dist/packager-tool-7b6tpg7y.js +77 -0
  98. package/dist/packager-tool-7exrv6w7.js +23 -0
  99. package/dist/packager-tool-8dszjcg5.js +4892 -0
  100. package/dist/packager-tool-8j92afwp.js +58 -0
  101. package/dist/packager-tool-94w17vf8.js +85 -0
  102. package/dist/{packager-tool-vdd02vns.js → packager-tool-9bec251q.js} +543 -1493
  103. package/dist/packager-tool-a1hbfmws.js +399 -0
  104. package/dist/{packager-tool-tq9q9m77.js → packager-tool-a42jnpy5.js} +3 -9
  105. package/dist/packager-tool-abbtfk2v.js +54 -0
  106. package/dist/packager-tool-cdwpc9fh.js +4945 -0
  107. package/dist/packager-tool-e0p2zsyc.js +97 -0
  108. package/dist/packager-tool-eebq62fq.js +540 -0
  109. package/dist/{packager-tool-m6x5sczh.js → packager-tool-em5r6g6j.js} +14 -21
  110. package/dist/packager-tool-eypvc2kv.js +23 -0
  111. package/dist/packager-tool-f0kd5kq4.js +2327 -0
  112. package/dist/packager-tool-fjaa8d3v.js +289 -0
  113. package/dist/packager-tool-g0eha8ge.js +121 -0
  114. package/dist/packager-tool-g9y14b10.js +54 -0
  115. package/dist/packager-tool-gbgfwx8f.js +2 -0
  116. package/dist/packager-tool-jc34wvrw.js +64 -0
  117. package/dist/packager-tool-k99nf3pq.js +25 -0
  118. package/dist/{packager-tool-hr0xg6q8.js → packager-tool-kn91khp6.js} +17 -13
  119. package/dist/{packager-tool-jysvpt8p.js → packager-tool-m3wkcxf5.js} +2 -2
  120. package/dist/{packager-tool-78a3szsp.js → packager-tool-m5qfverj.js} +1720 -2014
  121. package/dist/packager-tool-mwvbq6ef.js +79 -0
  122. package/dist/packager-tool-nq4rcqqg.js +87 -0
  123. package/dist/packager-tool-nxx8naxv.js +4234 -0
  124. package/dist/{packager-tool-3y0k15sv.js → packager-tool-p9stswjj.js} +2858 -19342
  125. package/dist/packager-tool-r0xpcqwg.js +188 -0
  126. package/dist/packager-tool-raq2wbwp.js +18 -0
  127. package/dist/{packager-tool-y3dezh8k.js → packager-tool-rs6jm14d.js} +6 -4
  128. package/dist/packager-tool-s9ff3kk4.js +6 -0
  129. package/dist/{packager-tool-pbsghbmj.js → packager-tool-sykgshez.js} +2 -2
  130. package/dist/packager-tool-tf3d2y8z.js +31 -0
  131. package/dist/packager-tool-tn5e7wnb.js +384 -0
  132. package/dist/packager-tool-v2rkcehq.js +457 -0
  133. package/dist/packager-tool-v86fdwvs.js +262 -0
  134. package/dist/packager-tool-v9psxdy5.js +8185 -0
  135. package/dist/packager-tool-v9rrz038.js +602 -0
  136. package/dist/packager-tool-vpqyvh4c.js +304 -0
  137. package/dist/packager-tool-wcha0e5r.js +443 -0
  138. package/dist/{packager-tool-1gt6js73.js → packager-tool-xhzfwa5p.js} +6 -4
  139. package/dist/{packager-tool-5arsyj36.js → packager-tool-yc4kw997.js} +4 -2
  140. package/dist/{packager-tool-pkq70dec.js → packager-tool-ywqc9rtf.js} +31 -3
  141. package/dist/{packager-tool-0567pxpm.js → packager-tool-z9bfhmm5.js} +10 -10
  142. package/dist/{packager-tool-gmrwvnyh.js → packager-tool-zfrp8ecz.js} +8 -58
  143. package/dist/{packager-tool-3vdpx9ng.js → packager-tool-zke08y39.js} +1121 -1846
  144. package/dist/packager-tool.js +17 -17
  145. package/dist/{pt-7TR74ZMB-1g8my56g.js → pt-7TR74ZMB-bmphh4x2.js} +46 -46
  146. package/dist/{pt-BR-7XGDXRDJ-TR5D7JYL-533wvy7p.js → pt-BR-7DYX2YPT-LZYH4YFD-bx43vx3z.js} +857 -845
  147. package/dist/{pt-BR-7XGDXRDJ-espnkgrj.js → pt-BR-7DYX2YPT-fqxqzqtf.js} +857 -845
  148. package/dist/{pt-BR-BXURWX4W-dqr4dnf9.js → pt-BR-BXURWX4W-bwfcwhk1.js} +52 -52
  149. package/dist/{pt-BR-DXXSYJDO-bn84ewp7.js → pt-BR-DXXSYJDO-a2tp13v7.js} +46 -46
  150. package/dist/pt-BR-UQCYHKMJ-q78n7q70.js +35 -0
  151. package/dist/{pt-BR-Z3TUDJHM-n7ngej6s.js → pt-BR-Z3TUDJHM-8v73x9s7.js} +9 -9
  152. package/dist/pt-D6A6MVB2-yvxca8vz.js +35 -0
  153. package/dist/{pt-TMVOOITK-myha14p9.js → pt-HTXGGX6Y-97t21dty.js} +857 -845
  154. package/dist/{pt-TMVOOITK-H2ADYHSD-ezpggv33.js → pt-HTXGGX6Y-ZHQSDFKI-vehfxadc.js} +857 -845
  155. package/dist/{pt-KSBWHAVQ-hd52bpsz.js → pt-KSBWHAVQ-mhvhgr2p.js} +9 -9
  156. package/dist/{pt-YI4VE4YQ-v7gjeg82.js → pt-YI4VE4YQ-wdkn2dcf.js} +52 -52
  157. package/dist/ro-4TMBHS5M-jz0anpt6.js +35 -0
  158. package/dist/{ro-BJFER5OI-334n28rj.js → ro-BJFER5OI-83tq8vxh.js} +46 -46
  159. package/dist/{ro-2VALF3S5-NXBJUEZN-nqw1zs33.js → ro-KTNQ3MNU-XIE6YPQN-gen8p82z.js} +857 -845
  160. package/dist/{ro-2VALF3S5-cdz5afkr.js → ro-KTNQ3MNU-y08n1x5g.js} +857 -845
  161. package/dist/{ro-RKXZUG7Z-cm3xn3fj.js → ro-RKXZUG7Z-nndrrsq7.js} +52 -52
  162. package/dist/{ro-VZUZTAMR-tccygznf.js → ro-VZUZTAMR-f4q0g3em.js} +9 -9
  163. package/dist/{ru-GSCT4ARZ-qj8dm4dp.js → ru-GSCT4ARZ-1sa9wbr8.js} +1 -1
  164. package/dist/{ru-GSCT4ARZ-FTVCGQTL-5nh4jf2e.js → ru-GSCT4ARZ-FTVCGQTL-gee86v14.js} +1 -1
  165. package/dist/{ru-T73OPRTC-mp5gn7gs.js → ru-T73OPRTC-4knxw497.js} +1 -1
  166. package/dist/{ru-WBLQ5B2U-awt245ky.js → ru-WBLQ5B2U-8r3c7v6d.js} +1 -1
  167. package/dist/ru-WBLQ5B2U-kdey8qa4.js +10 -0
  168. package/dist/{ru-WBLQ5B2U-57ezmxzz.js → ru-WBLQ5B2U-wemdzdqd.js} +1 -1
  169. package/dist/{serialization-GAW7UFOK-9hkdmmd2.js → serialization-J5QK3HPY-bgewpt6f.js} +158 -152
  170. package/dist/services/expression-validator.d.ts +28 -0
  171. package/dist/services/flow-eval-schema/types.d.ts +17 -0
  172. package/dist/services/flow-validate-service.d.ts +26 -0
  173. package/dist/services/node-validators/js-expression-syntax-validator.d.ts +6 -3
  174. package/dist/services/tidy-service.d.ts +26 -0
  175. package/dist/services/vars-reference-rule.d.ts +156 -0
  176. package/dist/shared-utils-8xdq6f04.js +20 -0
  177. package/dist/tidy-service-ashgyfwj.js +34 -0
  178. package/dist/tool.js +30 -33
  179. package/dist/{tr-AA6O2WSR-ga1xnymp.js → tr-AA6O2WSR-86ba4bdf.js} +52 -52
  180. package/dist/tr-GSQQ6SOT-hv1gyeaa.js +35 -0
  181. package/dist/{tr-RQTZ2DMS-bpgd4kma.js → tr-RQTZ2DMS-w3cwv8s4.js} +46 -46
  182. package/dist/{tr-W4AVRSQ4-bt3qqqdy.js → tr-W4AVRSQ4-hjr81xzk.js} +9 -9
  183. package/dist/{tr-RIFCEXFH-BZS7S7QK-q465b62g.js → tr-XHSSPNK7-GW5KVXR3-2w3f1ss6.js} +857 -845
  184. package/dist/{tr-RIFCEXFH-hgkb4g8y.js → tr-XHSSPNK7-cmqyc4wd.js} +857 -845
  185. package/dist/utils/handle-expansion.d.ts +16 -0
  186. package/dist/validation.js +47 -27
  187. package/dist/variable-service-er7ph4br.js +152 -0
  188. package/dist/wait-for-flow-job-45p1a444.js +134 -0
  189. package/dist/{zh-CN-IP3FMXWM-H3JI2XUM-ta4yac7h.js → zh-CN-2EHQT23P-T5XRQCVS-ac17dpc1.js} +857 -845
  190. package/dist/{zh-CN-IP3FMXWM-1cfarhcp.js → zh-CN-2EHQT23P-mr63c4xz.js} +857 -845
  191. package/dist/{zh-CN-6YRAN57T-j7jp34ws.js → zh-CN-6YRAN57T-rd7x2tqs.js} +9 -9
  192. package/dist/zh-CN-EDFRBU32-vvj7tmaq.js +35 -0
  193. package/dist/{zh-CN-R2KLHXQV-wttmznep.js → zh-CN-R2KLHXQV-agqr45ds.js} +52 -52
  194. package/dist/{zh-CN-ZC6LT4IN-vty9mvv8.js → zh-CN-ZC6LT4IN-kbzvvzz5.js} +46 -46
  195. package/dist/zh-TW-HAICM6DE-rh7k3cq7.js +35 -0
  196. package/dist/{zh-TW-AGIDXIPF-R4XZRDJZ-cgxxz5k4.js → zh-TW-MGZCE5BT-P6FLIUAR-zmq07vhs.js} +857 -845
  197. package/dist/{zh-TW-AGIDXIPF-n6r6w7vy.js → zh-TW-MGZCE5BT-c4ekmrz9.js} +857 -845
  198. package/dist/{zh-TW-R7Y5KVMU-q81f4z2p.js → zh-TW-R7Y5KVMU-m61y07e3.js} +46 -46
  199. package/dist/{zh-TW-RJGCQANM-gqn0aca0.js → zh-TW-RJGCQANM-w0x3qc1p.js} +52 -52
  200. package/dist/{zh-TW-SO2245GN-m5kh88bg.js → zh-TW-SO2245GN-n2bn1gg4.js} +9 -9
  201. package/package.json +2 -2
  202. package/dist/de-5KVP66U6-t37qr521.js +0 -161
  203. package/dist/de-WMKOGI7B-6dc1zdnp.js +0 -143
  204. package/dist/en-4KXU7N7B-24v330b5.js +0 -118
  205. package/dist/en-X4DLPKLJ-1h9gj5c1.js +0 -110
  206. package/dist/es-BVPGJUWA-0k59eqfv.js +0 -143
  207. package/dist/es-MX-U6YL5KQX-k4qvpgd4.js +0 -143
  208. package/dist/es-MX-XAVLOQW3-47a405kf.js +0 -161
  209. package/dist/es-VFPNVMP5-6sftsdxe.js +0 -161
  210. package/dist/fr-E5MDO4EG-f3x1jeqw.js +0 -161
  211. package/dist/fr-EKTTDR7Z-m2t68j0m.js +0 -143
  212. package/dist/ja-DPO5PPLO-fmbg7zt2.js +0 -161
  213. package/dist/ja-Y2YBTXNN-5sszk2zv.js +0 -143
  214. package/dist/ko-ITOPNIYI-aqy82jk8.js +0 -161
  215. package/dist/ko-S33XAV26-rfsv9myd.js +0 -143
  216. package/dist/packager-tool-0sz8se22.js +0 -10671
  217. package/dist/packager-tool-8mqydhz8.js +0 -9850
  218. package/dist/packager-tool-p9j43p8h.js +0 -115
  219. package/dist/packager-tool-v74yk918.js +0 -107
  220. package/dist/packager-tool-xj0agqpk.js +0 -11
  221. package/dist/pt-BR-BXURWX4W-xzyndmrx.js +0 -161
  222. package/dist/pt-BR-JO45SCNI-mt93s33c.js +0 -143
  223. package/dist/pt-W3NA4LIZ-fwd1q4j0.js +0 -143
  224. package/dist/pt-YI4VE4YQ-521681zf.js +0 -161
  225. package/dist/ro-RKXZUG7Z-pdztdafr.js +0 -161
  226. package/dist/ro-WLKX6HF5-b9tj8q67.js +0 -143
  227. package/dist/ru-WBLQ5B2U-8xd4gpv2.js +0 -10
  228. package/dist/ru-WBLQ5B2U-mswqs9wc.js +0 -10
  229. package/dist/tr-3U2W2XCA-43ptfc0m.js +0 -143
  230. package/dist/tr-AA6O2WSR-bj9n80k8.js +0 -161
  231. package/dist/zh-CN-IPZYQR3P-egjmvyjf.js +0 -143
  232. package/dist/zh-CN-R2KLHXQV-x6gnk2n0.js +0 -161
  233. package/dist/zh-TW-RJGCQANM-tt8j5wv2.js +0 -161
  234. package/dist/zh-TW-YPVSQVGT-b378ztph.js +0 -143
@@ -0,0 +1,948 @@
1
+ import {
2
+ isConnectorTriggerType,
3
+ isConnectorWaitForEventType,
4
+ isEventDrivenConnectorType,
5
+ scanDetailForCrossNodeBindings
6
+ } from "./packager-tool-2wefykg9.js";
7
+ import {
8
+ regenerateBindingsFile
9
+ } from "./packager-tool-v86fdwvs.js";
10
+ import"./packager-tool-jc34wvrw.js";
11
+ import"./packager-tool-4hx14snw.js";
12
+ import"./packager-tool-cdwpc9fh.js";
13
+ import"./packager-tool-g9y14b10.js";
14
+ import"./packager-tool-5z1eg3ea.js";
15
+ import"./packager-tool-v9rrz038.js";
16
+ import"./packager-tool-fjaa8d3v.js";
17
+ import {
18
+ ACTIVITY_VERSION_V4,
19
+ FilterNotSupportedError,
20
+ MANAGED_HTTP_CONNECTOR_KEY,
21
+ applySavedFilterTree,
22
+ assertActivityMetadataResolved,
23
+ buildActivityEssentialConfiguration,
24
+ buildInputMetadata,
25
+ buildManagedHttpEssentialConfiguration,
26
+ createConfiguredActivityClient,
27
+ extractMultipartParameters,
28
+ fetchConnectionInfo,
29
+ fetchConnectorActivityMetadataV4,
30
+ fetchConnectorMetadata,
31
+ inlineMultipartFileValues,
32
+ isListOperation,
33
+ isV4ActivityConfiguration,
34
+ normalizeHttpMethod,
35
+ substituteFilterVariables
36
+ } from "./packager-tool-v9psxdy5.js";
37
+ import"./packager-tool-ywqc9rtf.js";
38
+ import"./packager-tool-f0kd5kq4.js";
39
+ import"./packager-tool-0gctz400.js";
40
+ import"./packager-tool-qa9gftnj.js";
41
+ import"./packager-tool-yc4kw997.js";
42
+ import"./packager-tool-7exrv6w7.js";
43
+ import {
44
+ readFlowWorkflow,
45
+ writeFlowWorkflow
46
+ } from "./packager-tool-94w17vf8.js";
47
+ import"./packager-tool-6m078z5s.js";
48
+ import {
49
+ addBinding
50
+ } from "./packager-tool-tn5e7wnb.js";
51
+ import"./packager-tool-xhzfwa5p.js";
52
+ import"./packager-tool-nkrmjr3a.js";
53
+ import"./packager-tool-rs6jm14d.js";
54
+ import"./packager-tool-hk1gxnth.js";
55
+ import"./packager-tool-em5r6g6j.js";
56
+ import"./packager-tool-9bec251q.js";
57
+ import"./packager-tool-z9bfhmm5.js";
58
+ import"./packager-tool-6ejqwbw9.js";
59
+ import"./packager-tool-mcaf4ewf.js";
60
+ import"./packager-tool-eypvc2kv.js";
61
+ import {
62
+ catchError,
63
+ extractErrorMessageSync
64
+ } from "./packager-tool-5qaxht3k.js";
65
+ import {
66
+ getFileSystem
67
+ } from "./packager-tool-0v3s8r01.js";
68
+ import"./packager-tool-p9stswjj.js";
69
+ import"./packager-tool-vpqyvh4c.js";
70
+ import"./packager-tool-gbgfwx8f.js";
71
+ import"./packager-tool-58q3tvh7.js";
72
+ import"./packager-tool-sc961w0q.js";
73
+ import {
74
+ generateRandomId
75
+ } from "./packager-tool-m5qfverj.js";
76
+ import"./packager-tool-e0p2zsyc.js";
77
+ import"./packager-tool-a42jnpy5.js";
78
+ import"./packager-tool-c23zrhj8.js";
79
+ import"./packager-tool-1yh8g550.js";
80
+
81
+ // src/services/connector-service.ts
82
+ class InvalidDetailError extends Error {
83
+ constructor(message) {
84
+ super(message);
85
+ this.name = "InvalidDetailError";
86
+ }
87
+ }
88
+ function getModelContext(node, definitions) {
89
+ const nodeContext = node.model?.context;
90
+ if (nodeContext)
91
+ return nodeContext;
92
+ if (definitions) {
93
+ const def = definitions.find((d) => d.nodeType === node.type);
94
+ const defModel = def?.model;
95
+ return defModel?.context ?? [];
96
+ }
97
+ return [];
98
+ }
99
+ function getContextValue(context, name) {
100
+ return context.find((c) => c.name === name)?.value;
101
+ }
102
+ function extractActivityTypeId(context) {
103
+ const metadata = context.find((c) => c.name === "metadata");
104
+ const body = metadata?.body;
105
+ const dtm = body?.designTimeMetadata;
106
+ const ac = dtm?.activityConfig;
107
+ const raw = ac?.raw;
108
+ const activity = raw?.activity;
109
+ return activity?.uiPathActivityTypeId;
110
+ }
111
+ function findConnectorDetail(definitions, nodeType) {
112
+ const def = definitions.find((d) => d.nodeType === nodeType);
113
+ if (!def)
114
+ return;
115
+ const form = def.form;
116
+ const sections = form?.sections;
117
+ if (!sections)
118
+ return;
119
+ for (const section of sections) {
120
+ const fields = section.fields;
121
+ if (!fields)
122
+ continue;
123
+ for (const field of fields) {
124
+ const componentProps = field.componentProps;
125
+ const connectorDetail = componentProps?.connectorDetail;
126
+ if (connectorDetail)
127
+ return connectorDetail;
128
+ }
129
+ }
130
+ return;
131
+ }
132
+ function extractActivityTypeIdFromDefinition(definitions, nodeType) {
133
+ const cd = findConnectorDetail(definitions, nodeType);
134
+ return cd?.uiPathActivityTypeId;
135
+ }
136
+ function resolveObjectName(instanceParameters, context, config, connectorKey, definitions, nodeType) {
137
+ const isGeneric = instanceParameters.activityType === "Generic";
138
+ if (!isGeneric) {
139
+ const fromContext = getContextValue(context, "objectName");
140
+ if (typeof fromContext === "string" && fromContext) {
141
+ return fromContext;
142
+ }
143
+ if (typeof config.objectName === "string" && config.objectName) {
144
+ return config.objectName;
145
+ }
146
+ throw new InvalidDetailError(`objectName is missing from the manifest for "${nodeType}" and was not provided in --detail. ` + "Pass --detail.objectName explicitly, or check that the connector manifest includes an objectName context entry.");
147
+ }
148
+ if (typeof config.objectName === "string" && config.objectName) {
149
+ return config.objectName;
150
+ }
151
+ const cd = findConnectorDetail(definitions, nodeType);
152
+ const displayName = cd?.displayName ?? nodeType ?? "<unknown>";
153
+ const operation = typeof instanceParameters.operation === "string" ? instanceParameters.operation : "Create";
154
+ throw new InvalidDetailError(`objectName is required for the generic '${displayName}' activity. Run:
155
+ ` + ` uip is resources list ${connectorKey} --operation ${operation} --connection-id ${config.connectionId}
156
+ ` + `to enumerate valid object names, then pass it as --detail.objectName (e.g. "objectName": "Account").`);
157
+ }
158
+ function resolveTriggerObjectName(context, config, connectorKey, operation, nodeType) {
159
+ const fromContext = getContextValue(context, "objectName");
160
+ if (typeof fromContext === "string" && fromContext) {
161
+ return fromContext;
162
+ }
163
+ if (typeof config.objectName === "string" && config.objectName) {
164
+ return config.objectName;
165
+ }
166
+ throw new InvalidDetailError(`objectName is required for the trigger "${nodeType}" — its manifest does not carry one (generic triggers are shared across every object the connector exposes). Run:
167
+ ` + ` uip is triggers objects ${connectorKey} ${operation} --connection-id ${config.connectionId}
168
+ ` + `to enumerate valid object names, then pass it as --detail.objectName (e.g. "objectName": "MyEntity").`);
169
+ }
170
+ function extractInstanceParameters(definitions, nodeType) {
171
+ const cd = findConnectorDetail(definitions, nodeType);
172
+ const configStr = cd?.configuration;
173
+ if (!configStr)
174
+ return;
175
+ try {
176
+ return JSON.parse(configStr);
177
+ } catch (err) {
178
+ throw new Error(`Malformed configuration JSON in definition for '${nodeType}': ${err instanceof Error ? err.message : String(err)}`);
179
+ }
180
+ }
181
+ function ensureConnectionBindings(workflow, connectorKey, connectionId, folderKey) {
182
+ const liveConnectionKeys = collectConfiguredConnectionKeys(workflow);
183
+ upsertConnectionResourceBinding(workflow, {
184
+ name: `${connectorKey} connection`,
185
+ propertyAttribute: "ConnectionId",
186
+ resourceKey: connectionId,
187
+ default: connectionId
188
+ }, liveConnectionKeys);
189
+ upsertConnectionResourceBinding(workflow, {
190
+ name: "FolderKey",
191
+ propertyAttribute: "FolderKey",
192
+ resourceKey: connectionId,
193
+ default: folderKey
194
+ }, liveConnectionKeys);
195
+ }
196
+ function collectConfiguredConnectionKeys(workflow) {
197
+ const keys = new Set;
198
+ const collect = (nodes) => {
199
+ for (const node of nodes ?? []) {
200
+ const detail = node.inputs?.detail;
201
+ const key = detail?.connectionResourceId;
202
+ if (typeof key === "string" && key.length > 0)
203
+ keys.add(key);
204
+ }
205
+ };
206
+ collect(workflow.nodes);
207
+ const subflows = workflow.subflows;
208
+ for (const entry of Object.values(subflows ?? {})) {
209
+ collect(entry?.nodes);
210
+ }
211
+ return keys;
212
+ }
213
+ function upsertConnectionResourceBinding(workflow, spec, liveConnectionKeys) {
214
+ const bindings = workflow.bindings ?? [];
215
+ const sameSlot = bindings.filter((b) => b.name === spec.name && b.resource?.toLowerCase() === "connection" && b.propertyAttribute === spec.propertyAttribute);
216
+ const exact = sameSlot.find((b) => b.resourceKey === spec.resourceKey);
217
+ if (exact) {
218
+ exact.resource = "connection";
219
+ exact.default = spec.default;
220
+ return;
221
+ }
222
+ const claimable = sameSlot.find((b) => !b.resourceKey) ?? sameSlot.find((b) => !liveConnectionKeys.has(b.resourceKey));
223
+ if (claimable) {
224
+ claimable.resource = "connection";
225
+ claimable.resourceKey = spec.resourceKey;
226
+ claimable.default = spec.default;
227
+ return;
228
+ }
229
+ const fresh = {
230
+ id: `b${generateRandomId(8)}`,
231
+ name: spec.name,
232
+ type: "string",
233
+ resource: "connection",
234
+ resourceKey: spec.resourceKey,
235
+ default: spec.default,
236
+ propertyAttribute: spec.propertyAttribute
237
+ };
238
+ addBinding(workflow, fresh);
239
+ }
240
+ function addManualModeImplicitBindings(workflow, connectorKey) {
241
+ const connBinding = {
242
+ id: `b${generateRandomId(8)}`,
243
+ name: `${connectorKey} connection`,
244
+ type: "string",
245
+ resource: "connection",
246
+ resourceKey: "",
247
+ default: "ImplicitConnection",
248
+ propertyAttribute: "ConnectionId"
249
+ };
250
+ const folderBinding = {
251
+ id: `b${generateRandomId(8)}`,
252
+ name: "FolderKey",
253
+ type: "string",
254
+ resource: "connection",
255
+ resourceKey: "",
256
+ propertyAttribute: "FolderKey"
257
+ };
258
+ addBinding(workflow, connBinding);
259
+ addBinding(workflow, folderBinding);
260
+ }
261
+ async function createConnectionResourceFile(fs, flowFilePath, connectionId, connectorKey) {
262
+ const projectDir = fs.path.dirname(fs.path.resolve(flowFilePath));
263
+ const solutionDir = fs.path.resolve(projectDir, "..");
264
+ const [fetchErr, connInfo] = await catchError(fetchConnectionInfo(connectionId));
265
+ const connectionName = fetchErr ? connectionId : connInfo.name;
266
+ const connectorName = fetchErr ? connectorKey : connInfo.connectorName;
267
+ const connectorVersion = fetchErr ? null : connInfo.connectorVersion;
268
+ const pollingInterval = fetchErr ? null : connInfo.pollingInterval;
269
+ const resourceDir = fs.path.join(solutionDir, "resources", "solution_folder", "connection", connectorKey);
270
+ const resourcePath = fs.path.join(resourceDir, `${connectionName}.json`);
271
+ if (await fs.exists(resourcePath)) {
272
+ return;
273
+ }
274
+ await fs.mkdir(resourceDir, { recursive: true });
275
+ const resourceFile = {
276
+ docVersion: "1.0.0",
277
+ resource: {
278
+ name: connectionName,
279
+ kind: "connection",
280
+ type: connectorKey,
281
+ apiVersion: "integrationservice.uipath.com/v1",
282
+ isOverridable: true,
283
+ dependencies: [],
284
+ runtimeDependencies: [],
285
+ files: [],
286
+ folders: [{ fullyQualifiedName: "solution_folder" }],
287
+ spec: {
288
+ connectorName,
289
+ name: connectionName,
290
+ description: null,
291
+ authenticationType: "AuthenticateAfterDeployment",
292
+ ...connectorVersion ? { connectorVersion } : {},
293
+ connectorKey,
294
+ ...pollingInterval != null ? { pollingInterval } : {}
295
+ },
296
+ locks: [],
297
+ key: connectionId
298
+ }
299
+ };
300
+ await fs.writeFile(resourcePath, JSON.stringify(resourceFile, null, 2));
301
+ }
302
+ var VALID_DETAIL_KEYS = new Set([
303
+ "connectionId",
304
+ "folderKey",
305
+ "method",
306
+ "endpoint",
307
+ "objectName",
308
+ "bodyParameters",
309
+ "queryParameters",
310
+ "pathParameters",
311
+ "filter",
312
+ "customFieldsRequestDetails"
313
+ ]);
314
+ var VALID_CUSTOM_FIELDS_KEYS = new Set([
315
+ "objectActionName",
316
+ "parameterValues"
317
+ ]);
318
+ function validateJsonObjectKeys(config, keys, errors) {
319
+ for (const key of keys) {
320
+ const val = config[key];
321
+ if (val !== undefined && (typeof val !== "object" || val === null || Array.isArray(val))) {
322
+ errors.push(`${key} must be a JSON object`);
323
+ }
324
+ }
325
+ }
326
+ function validateCustomFieldsRequestDetails(value, errors) {
327
+ if (typeof value !== "object" || value === null || Array.isArray(value)) {
328
+ errors.push("customFieldsRequestDetails must be a JSON object with `objectActionName` (string) and `parameterValues` (array of [key, value] tuples)");
329
+ return;
330
+ }
331
+ const cfrd = value;
332
+ const unknownKeys = Object.keys(cfrd).filter((k) => !VALID_CUSTOM_FIELDS_KEYS.has(k));
333
+ if (unknownKeys.length > 0) {
334
+ errors.push(`customFieldsRequestDetails has unknown keys: ${unknownKeys.join(", ")}. Valid keys: ${[...VALID_CUSTOM_FIELDS_KEYS].join(", ")}. ` + "Note: keys are camelCase (Studio Web convention), not PascalCase.");
335
+ }
336
+ if (typeof cfrd.objectActionName !== "string" || cfrd.objectActionName === "") {
337
+ errors.push("customFieldsRequestDetails.objectActionName must be a non-empty string");
338
+ }
339
+ if (cfrd.parameterValues === undefined) {
340
+ errors.push("customFieldsRequestDetails.parameterValues is required (array of [key, value] tuples)");
341
+ } else if (!Array.isArray(cfrd.parameterValues)) {
342
+ errors.push("customFieldsRequestDetails.parameterValues must be an array of [key, value] tuples, not an object map. " + "Studio Web emits Maps as `Array.from(entries())`; the runtime expects this form. " + 'Example: `[["list_id", "abc"], ["subscriber_hash", null]]`.');
343
+ } else {
344
+ for (let i = 0;i < cfrd.parameterValues.length; i++) {
345
+ const tuple = cfrd.parameterValues[i];
346
+ if (!Array.isArray(tuple) || tuple.length !== 2) {
347
+ errors.push(`customFieldsRequestDetails.parameterValues[${i}] must be a 2-element [key, value] tuple`);
348
+ continue;
349
+ }
350
+ const [k, v] = tuple;
351
+ if (typeof k !== "string" || k === "") {
352
+ errors.push(`customFieldsRequestDetails.parameterValues[${i}][0] must be a non-empty string`);
353
+ }
354
+ if (v !== null && typeof v !== "string") {
355
+ errors.push(`customFieldsRequestDetails.parameterValues[${i}][1] must be a string or null`);
356
+ }
357
+ }
358
+ }
359
+ }
360
+ function validateConnectorDetail(config) {
361
+ const errors = [];
362
+ if (typeof config.connectionId !== "string" || !config.connectionId) {
363
+ errors.push("connectionId is required (non-empty string)");
364
+ }
365
+ if (typeof config.folderKey !== "string" || !config.folderKey) {
366
+ errors.push("folderKey is required (non-empty string)");
367
+ }
368
+ if (typeof config.method !== "string" || !config.method) {
369
+ errors.push("method is required (HTTP method from connectorMethodInfo, e.g. GET, POST)");
370
+ }
371
+ if (typeof config.endpoint !== "string" || !config.endpoint || !config.endpoint.startsWith("/")) {
372
+ errors.push("endpoint is required (path from connectorMethodInfo, e.g. /ConversationsInfo/{conversationsInfoId})");
373
+ }
374
+ if (config.objectName !== undefined && (typeof config.objectName !== "string" || !config.objectName)) {
375
+ errors.push("objectName must be a non-empty string (required for Generic-type connector activities; ignored for Curated)");
376
+ }
377
+ validateJsonObjectKeys(config, ["bodyParameters", "queryParameters", "pathParameters"], errors);
378
+ if (config.filter !== undefined && (typeof config.filter !== "object" || config.filter === null || Array.isArray(config.filter))) {
379
+ errors.push("filter must be a JSON object (FilterTree)");
380
+ }
381
+ if (config.filter !== undefined && typeof config.queryParameters === "object" && config.queryParameters !== null && !Array.isArray(config.queryParameters) && "where" in config.queryParameters) {
382
+ errors.push("queryParameters.where is derived from `filter` and cannot be set alongside it. " + "Drop one of the two — prefer `filter` so Studio Web can re-render the filter widget.");
383
+ }
384
+ if (config.customFieldsRequestDetails !== undefined) {
385
+ validateCustomFieldsRequestDetails(config.customFieldsRequestDetails, errors);
386
+ }
387
+ if ("ceqlExpression" in config) {
388
+ errors.push("ceqlExpression is derived from the filter tree and cannot be provided directly");
389
+ }
390
+ const unknownKeys = Object.keys(config).filter((k) => !VALID_DETAIL_KEYS.has(k) && k !== "ceqlExpression");
391
+ if (unknownKeys.length > 0) {
392
+ errors.push(`Unknown keys: ${unknownKeys.join(", ")}. Valid keys: ${[...VALID_DETAIL_KEYS].join(", ")}`);
393
+ }
394
+ if (errors.length > 0) {
395
+ throw new InvalidDetailError(`Invalid --detail:
396
+ - ${errors.join(`
397
+ - `)}`);
398
+ }
399
+ return config;
400
+ }
401
+ var VALID_TRIGGER_DETAIL_KEYS = new Set([
402
+ "connectionId",
403
+ "folderKey",
404
+ "eventMode",
405
+ "objectName",
406
+ "eventParameters",
407
+ "queryParameters",
408
+ "pathParameters",
409
+ "filter"
410
+ ]);
411
+ function validateConnectorTriggerDetail(config) {
412
+ const errors = [];
413
+ if (typeof config.connectionId !== "string" || !config.connectionId) {
414
+ errors.push("connectionId is required (non-empty string)");
415
+ }
416
+ if (typeof config.folderKey !== "string" || !config.folderKey) {
417
+ errors.push("folderKey is required (non-empty string)");
418
+ }
419
+ if (typeof config.eventMode !== "string" || !config.eventMode) {
420
+ errors.push("eventMode is required (e.g. 'webhooks' or 'polling')");
421
+ }
422
+ if (config.objectName !== undefined && (typeof config.objectName !== "string" || !config.objectName)) {
423
+ errors.push("objectName must be a non-empty string (required for Generic-type connector triggers; ignored for Curated)");
424
+ }
425
+ validateJsonObjectKeys(config, ["eventParameters", "queryParameters", "pathParameters"], errors);
426
+ if ("filterExpression" in config) {
427
+ errors.push("filterExpression is derived from the filter tree and cannot be provided directly. " + "Pass a structured `filter` (FilterTree) instead.");
428
+ }
429
+ if (config.filter !== undefined && (typeof config.filter !== "object" || config.filter === null || Array.isArray(config.filter))) {
430
+ errors.push("filter must be a JSON object (FilterTree)");
431
+ }
432
+ const unknownKeys = Object.keys(config).filter((k) => !VALID_TRIGGER_DETAIL_KEYS.has(k) && k !== "filterExpression");
433
+ if (unknownKeys.length > 0) {
434
+ errors.push(`Unknown keys: ${unknownKeys.join(", ")}. Valid keys: ${[...VALID_TRIGGER_DETAIL_KEYS].join(", ")}`);
435
+ }
436
+ if (errors.length > 0) {
437
+ throw new InvalidDetailError(`Invalid --detail:
438
+ - ${errors.join(`
439
+ - `)}`);
440
+ }
441
+ return config;
442
+ }
443
+ function isManagedHttpType(nodeType) {
444
+ return nodeType === "core.action.http.v2";
445
+ }
446
+ var VALID_HTTP_METHODS = new Set([
447
+ "GET",
448
+ "POST",
449
+ "PUT",
450
+ "PATCH",
451
+ "DELETE",
452
+ "OPTIONS",
453
+ "HEAD"
454
+ ]);
455
+ var VALID_MANAGED_HTTP_KEYS = new Set([
456
+ "authentication",
457
+ "method",
458
+ "url",
459
+ "connectionId",
460
+ "folderKey",
461
+ "targetConnector",
462
+ "headers",
463
+ "query",
464
+ "body"
465
+ ]);
466
+ function validateManagedHttpDetail(config) {
467
+ const errors = [];
468
+ const auth = config.authentication;
469
+ if (auth !== "connector" && auth !== "manual") {
470
+ errors.push('authentication is required ("connector" or "manual")');
471
+ }
472
+ if (typeof config.method !== "string" || !VALID_HTTP_METHODS.has(config.method)) {
473
+ errors.push(`method must be one of: ${[...VALID_HTTP_METHODS].join(", ")}`);
474
+ }
475
+ if (auth === "connector") {
476
+ if (typeof config.connectionId !== "string" || !config.connectionId) {
477
+ errors.push("connectionId is required for connector mode");
478
+ }
479
+ if (typeof config.folderKey !== "string" || !config.folderKey) {
480
+ errors.push("folderKey is required for connector mode");
481
+ }
482
+ if (typeof config.targetConnector !== "string" || !config.targetConnector) {
483
+ errors.push("targetConnector is required for connector mode");
484
+ }
485
+ if (config.url !== undefined && typeof config.url !== "string") {
486
+ errors.push("url must be a string");
487
+ }
488
+ } else if (auth === "manual") {
489
+ if (typeof config.url !== "string" || !config.url) {
490
+ errors.push("url is required for manual mode");
491
+ }
492
+ }
493
+ for (const key of ["headers", "query"]) {
494
+ const val = config[key];
495
+ if (val !== undefined && (typeof val !== "object" || val === null || Array.isArray(val))) {
496
+ errors.push(`${key} must be a JSON object`);
497
+ }
498
+ }
499
+ const unknownKeys = Object.keys(config).filter((k) => !VALID_MANAGED_HTTP_KEYS.has(k));
500
+ if (unknownKeys.length > 0) {
501
+ errors.push(`Unknown keys: ${unknownKeys.join(", ")}. Valid keys: ${[...VALID_MANAGED_HTTP_KEYS].join(", ")}`);
502
+ }
503
+ if (errors.length > 0) {
504
+ throw new InvalidDetailError(`Invalid --detail:
505
+ - ${errors.join(`
506
+ - `)}`);
507
+ }
508
+ return config;
509
+ }
510
+ function configureManagedHttp(workflow, node, config) {
511
+ const definitions = workflow.definitions ?? [];
512
+ const context = getModelContext(node, definitions);
513
+ const activityTypeId = extractActivityTypeId(context) ?? extractActivityTypeIdFromDefinition(definitions, node.type ?? "");
514
+ const bodyParameters = {
515
+ authentication: config.authentication,
516
+ method: config.method
517
+ };
518
+ if (config.authentication === "connector") {
519
+ bodyParameters.targetConnector = config.targetConnector;
520
+ bodyParameters.connection = config.connectionId;
521
+ if (config.url !== undefined) {
522
+ bodyParameters.path = config.url;
523
+ bodyParameters.url = config.url;
524
+ }
525
+ } else {
526
+ bodyParameters.url = config.url;
527
+ }
528
+ if (config.headers !== undefined)
529
+ bodyParameters.headers = config.headers;
530
+ if (config.query !== undefined)
531
+ bodyParameters.query = config.query;
532
+ if (config.body !== undefined)
533
+ bodyParameters.body = config.body;
534
+ const detail = {
535
+ connector: MANAGED_HTTP_CONNECTOR_KEY,
536
+ connectionId: config.authentication === "connector" ? config.connectionId : "ImplicitConnection",
537
+ connectionResourceId: config.authentication === "connector" ? config.connectionId : null,
538
+ connectionFolderKey: config.authentication === "connector" ? config.folderKey : null,
539
+ method: "POST",
540
+ endpoint: "/http-request",
541
+ bodyParameters,
542
+ configuration: `=jsonString:${JSON.stringify(buildManagedHttpEssentialConfiguration())}`,
543
+ ...activityTypeId ? { uiPathActivityTypeId: activityTypeId } : {},
544
+ errorState: { issues: [] },
545
+ telemetryData: {
546
+ connectorKey: MANAGED_HTTP_CONNECTOR_KEY,
547
+ connectorName: "HTTP",
548
+ operationType: "create",
549
+ objectName: "http-request",
550
+ objectDisplayName: "HTTP Request",
551
+ primaryKeyName: ""
552
+ }
553
+ };
554
+ node.inputs = { ...node.inputs ?? {}, detail };
555
+ if (config.authentication === "connector") {
556
+ ensureConnectionBindings(workflow, MANAGED_HTTP_CONNECTOR_KEY, config.connectionId, config.folderKey);
557
+ } else {
558
+ addManualModeImplicitBindings(workflow, MANAGED_HTTP_CONNECTOR_KEY);
559
+ }
560
+ }
561
+ function hasFileResponseField(metadata, method) {
562
+ const fieldsObj = metadata?.fields ?? {};
563
+ const fields = Array.isArray(fieldsObj) ? fieldsObj : Object.values(fieldsObj);
564
+ return fields.some((field) => {
565
+ const methodInfo = field.method?.[method];
566
+ if (!methodInfo)
567
+ return false;
568
+ const isResponse = methodInfo.response === true || methodInfo.responseCurated === true;
569
+ if (!isResponse)
570
+ return false;
571
+ return field.type === "file" || field.type === "octet-stream";
572
+ });
573
+ }
574
+ function patchOutputType(definitions, nodeType, type) {
575
+ const def = definitions.find((d) => d.nodeType === nodeType);
576
+ if (def?.outputDefinition?.output) {
577
+ def.outputDefinition.output.type = type;
578
+ }
579
+ }
580
+ function buildAgentToolParamsFromMetadata(metadata, method) {
581
+ const fieldsRaw = metadata.fields ?? {};
582
+ const fields = Array.isArray(fieldsRaw) ? fieldsRaw : Object.values(fieldsRaw);
583
+ const httpMethod = normalizeHttpMethod(method);
584
+ const methodMap = metadata.metadata?.method ?? {};
585
+ const methodInfo = methodMap[method] ?? Object.values(methodMap).find((m) => m.method === httpMethod);
586
+ const prompt = (f) => `{{prompt: "${f.description || f.displayName || f.name}"}}`;
587
+ const bodyParameters = {};
588
+ for (const field of fields) {
589
+ const fm = field.method?.[method] ?? field.method?.[httpMethod];
590
+ if (!fm || !fm.request && !fm.requestCurated)
591
+ continue;
592
+ const enumArr = field.enum && Array.isArray(field.enum) ? field.enum : [];
593
+ if (enumArr.length === 1) {
594
+ const only = enumArr[0];
595
+ bodyParameters[field.name] = typeof only === "string" ? only : only.value ?? only.name;
596
+ } else {
597
+ bodyParameters[field.name] = prompt(field);
598
+ }
599
+ }
600
+ const queryParameters = {};
601
+ const pathParameters = {};
602
+ for (const param of methodInfo?.parameters ?? []) {
603
+ if (param.type !== "query" && param.type !== "path")
604
+ continue;
605
+ const value = param.defaultValue != null && param.defaultValue !== "" ? param.defaultValue : prompt(param);
606
+ (param.type === "query" ? queryParameters : pathParameters)[param.name] = value;
607
+ }
608
+ return { bodyParameters, queryParameters, pathParameters };
609
+ }
610
+ var UNRESOLVABLE_FILTER_MARKER = "${=js:";
611
+ var MANGLED_FILTER_FRAGMENT = "${";
612
+ var DANGLING_TRAILING_OPERATOR = /(?:^|\s)(?:AND|OR)\s*$/i;
613
+ var DANGLING_LEADING_OPERATOR = /^\s*(?:AND|OR)(?:\s|$)/i;
614
+ var DOUBLED_OPERATOR = /(?:^|\s)(?:AND|OR)\s+(?:AND|OR)(?:\s|$)/i;
615
+ function collectFilterFieldIds(tree) {
616
+ const ids = (tree.filters ?? []).map((condition) => condition.id);
617
+ for (const group of tree.groups ?? []) {
618
+ ids.push(...collectFilterFieldIds(group));
619
+ }
620
+ return ids;
621
+ }
622
+ function assertCompiledFilterResolvable(compiled, filterParamName, authoredTree) {
623
+ if (compiled.includes(MANGLED_FILTER_FRAGMENT)) {
624
+ throw new Error(`Refusing to persist the compiled filter for '${filterParamName}': it embeds a '\${…}' fragment, which the runtime never resolves — the fragment reaches the connector as literal text and the filter silently matches nothing. Cause: either a dynamic operand escaped placeholder substitution, or the design-time client mis-marked a literal value as an expression (widget-metadata defect ENGCE-60123). Workaround: author the whole filter as one '=js:' template under --detail.queryParameters.${filterParamName} (activities), or re-author the filter with values the connector's picker supports (triggers).`);
625
+ }
626
+ if (!authoredTree)
627
+ return;
628
+ const fieldIds = collectFilterFieldIds(authoredTree);
629
+ if (fieldIds.length === 0)
630
+ return;
631
+ const isEmpty = compiled.trim() === "";
632
+ const isMalformed = DANGLING_TRAILING_OPERATOR.test(compiled) || DANGLING_LEADING_OPERATOR.test(compiled) || DOUBLED_OPERATOR.test(compiled);
633
+ if (!isEmpty && !isMalformed)
634
+ return;
635
+ const outcome = isEmpty ? "The compiled expression is empty, so the filter disappears and the query returns every record." : `The compiled expression is broken: '${compiled}'. It holds a stray logical operator, so the connector faults at run time.`;
636
+ const names = [...new Set(fieldIds)].map((id) => `'${id}'`).join(", ");
637
+ throw new InvalidDetailError(`Refusing to persist the compiled filter for '${filterParamName}': the connector dropped at least one condition of --detail.filter. ${outcome} The filter tree names these fields: ${names}. Cause: a field id does not match the entity schema, or a condition has no operator. Field id matching is case-sensitive. Fix: read the supported field ids, then re-send --detail.filter with the exact ids. Run 'uip df entities get <ENTITY_ID> --output json' for a Data Service entity, or 'uip maestro flow registry get <NODE_TYPE> --connection-id <CONNECTION_ID> --output json' and read filterFields for a connector.`);
638
+ }
639
+ function assertLiteralEventParameters(eventParameters, nodeType) {
640
+ const dynamic = Object.entries(eventParameters).filter(([, value]) => typeof value === "string" && value.startsWith("=js:")).map(([name]) => `'${name}'`);
641
+ if (dynamic.length === 0)
642
+ return;
643
+ const params = dynamic.join(", ");
644
+ if (isConnectorTriggerType(nodeType)) {
645
+ throw new InvalidDetailError(`Event parameter(s) ${params} on start trigger "${nodeType}" hold a '=js:' expression, but event parameters on a start trigger cannot reference flow variables: the trigger is evaluated before any flow run exists, so there are no variables to read. Pass a literal value.`);
646
+ }
647
+ throw new InvalidDetailError(`Event parameter(s) ${params} on wait-for event "${nodeType}" hold a '=js:' expression, but dynamic values are not supported on mandatory event parameters. Pass a literal value here and move the dynamic condition to --detail.filter, where it compiles to a '{var_…}' placeholder plus detail.filterVariables that the runtime resolves mid-run.`);
648
+ }
649
+ function substituteDetailFilter(tree) {
650
+ try {
651
+ return substituteFilterVariables(tree);
652
+ } catch (error) {
653
+ if (error instanceof FilterNotSupportedError) {
654
+ throw new InvalidDetailError(error.message);
655
+ }
656
+ throw error;
657
+ }
658
+ }
659
+ async function configureActivity(workflow, node, config) {
660
+ const definitions = workflow.definitions ?? [];
661
+ const context = getModelContext(node, definitions);
662
+ const connectorKey = getContextValue(context, "connectorKey") ?? "";
663
+ const activityTypeId = extractActivityTypeId(context) ?? extractActivityTypeIdFromDefinition(definitions, node.type ?? "");
664
+ const instanceParameters = extractInstanceParameters(definitions, node.type ?? "");
665
+ if (!instanceParameters) {
666
+ throw new Error(`No instanceParameters found in definition for "${node.type}" — cannot build configuration`);
667
+ }
668
+ const isV4Activity = isV4ActivityConfiguration(instanceParameters);
669
+ let objectName;
670
+ if (isV4Activity) {
671
+ const activityName = instanceParameters.activityName;
672
+ if (typeof activityName !== "string" || !activityName) {
673
+ throw new InvalidDetailError(`"${node.type}" is a 4.0.0 activity but its definition's configuration carries no activityName — the local registry copy may be stale. Run 'uip maestro flow registry pull --force', delete the definitions[] entry, and re-add the node.`);
674
+ }
675
+ objectName = activityName;
676
+ } else {
677
+ objectName = resolveObjectName(instanceParameters, context, config, connectorKey, definitions, node.type ?? "");
678
+ }
679
+ const detail = {
680
+ connector: connectorKey,
681
+ connectionId: config.connectionId,
682
+ connectionResourceId: config.connectionId,
683
+ connectionFolderKey: config.folderKey,
684
+ ...isV4Activity && {
685
+ activityContext: {
686
+ version: ACTIVITY_VERSION_V4,
687
+ scriptRef: objectName
688
+ }
689
+ },
690
+ method: normalizeHttpMethod(config.method),
691
+ endpoint: config.endpoint
692
+ };
693
+ if (isV4Activity) {
694
+ const v4Body = {};
695
+ if (config.bodyParameters)
696
+ v4Body.body = config.bodyParameters;
697
+ if (config.queryParameters)
698
+ v4Body.query = config.queryParameters;
699
+ if (config.pathParameters)
700
+ v4Body.pathParameters = config.pathParameters;
701
+ detail.bodyParameters = v4Body;
702
+ } else {
703
+ if (config.bodyParameters)
704
+ detail.bodyParameters = config.bodyParameters;
705
+ if (config.queryParameters)
706
+ detail.queryParameters = config.queryParameters;
707
+ if (config.pathParameters)
708
+ detail.pathParameters = config.pathParameters;
709
+ }
710
+ if (activityTypeId)
711
+ detail.uiPathActivityTypeId = activityTypeId;
712
+ detail.errorState = { issues: [] };
713
+ const isGeneric = instanceParameters.activityType === "Generic";
714
+ const resolvedInstanceParameters = isV4Activity ? { ...instanceParameters } : {
715
+ ...instanceParameters,
716
+ objectName
717
+ };
718
+ if (isGeneric && typeof instanceParameters.operation === "string") {
719
+ resolvedInstanceParameters.operation = instanceParameters.operation.toLowerCase();
720
+ }
721
+ const [metaError, metadata] = await catchError(isV4Activity ? fetchConnectorActivityMetadataV4(connectorKey, objectName) : fetchConnectorMetadata(connectorKey, objectName, config.connectionId));
722
+ if (metaError) {
723
+ throw new Error(`Failed to fetch IS metadata for ${connectorKey}/${objectName}: ${extractErrorMessageSync(metaError)}`);
724
+ }
725
+ const methodMap = metadata?.metadata?.method ?? {};
726
+ const methodInfo = methodMap[config.method] ?? Object.values(methodMap).find((m) => m.method === config.method);
727
+ if (methodInfo) {
728
+ let filterInputName = null;
729
+ let filterVariables = {};
730
+ if (isV4Activity) {
731
+ if (config.filter && config.filter.groupOperator !== null) {
732
+ throw new InvalidDetailError(`--detail.filter is not supported for the 4.0.0 activity "${node.type}" — the design-time filter compiler reads v3 metadata only. Drop \`filter\` from --detail.`);
733
+ }
734
+ if (config.customFieldsRequestDetails) {
735
+ throw new InvalidDetailError(`customFieldsRequestDetails is not supported for the 4.0.0 activity "${node.type}" — design-time ObjectActions are v3-only. Drop it from --detail.`);
736
+ }
737
+ detail.configuration = `=jsonString:${JSON.stringify(buildActivityEssentialConfiguration(resolvedInstanceParameters, methodInfo))}`;
738
+ } else {
739
+ const filterBuilderParam = (methodInfo.parameters ?? []).find((p) => p.design?.component === "FilterBuilder");
740
+ let rawJsFilterParamName = null;
741
+ if (filterBuilderParam && !config.filter && config.queryParameters && filterBuilderParam.name in config.queryParameters) {
742
+ const rawValue = config.queryParameters[filterBuilderParam.name];
743
+ if (typeof rawValue === "string" && rawValue.startsWith("=js:")) {
744
+ if (rawValue.includes(UNRESOLVABLE_FILTER_MARKER)) {
745
+ throw new InvalidDetailError(`--detail.queryParameters.${filterBuilderParam.name} embeds '\${=js:', which the runtime never resolves — the filter would be sent as literal text and silently match nothing. Reference the value directly inside the outer '=js:' expression, or pass a structured tree under --detail.filter.`);
746
+ }
747
+ rawJsFilterParamName = filterBuilderParam.name;
748
+ } else {
749
+ throw new InvalidDetailError(`'${filterBuilderParam.name}' is a FilterBuilder parameter on activity "${node.type}" — pass a structured filter tree under --detail.filter, not a raw string under --detail.queryParameters.${filterBuilderParam.name}. Studio Web reads essentialConfiguration.savedFilterTrees.${filterBuilderParam.name} to render the filter UI; only --detail.filter populates it. See the CEQL filter-tree contract in the uipath-platform skill (integration-service/activities.md).`);
750
+ }
751
+ }
752
+ let savedFilterTrees = null;
753
+ let authoredFilterTree = null;
754
+ if (config.filter && config.filter.groupOperator !== null) {
755
+ if (!filterBuilderParam) {
756
+ throw new InvalidDetailError(`Activity "${node.type}" does not declare a FilterBuilder parameter — server-side filtering is not supported by this operation. Drop \`filter\` from --detail.`);
757
+ }
758
+ filterInputName = filterBuilderParam.name;
759
+ authoredFilterTree = config.filter;
760
+ const substituted = substituteDetailFilter(config.filter);
761
+ filterVariables = substituted.variables;
762
+ savedFilterTrees = { [filterInputName]: substituted.tree };
763
+ }
764
+ const fieldValues = {
765
+ ...detail.bodyParameters,
766
+ ...detail.queryParameters,
767
+ ...detail.pathParameters
768
+ };
769
+ if (rawJsFilterParamName !== null) {
770
+ delete fieldValues[rawJsFilterParamName];
771
+ }
772
+ const activityClient = await createConfiguredActivityClient({
773
+ instanceParameters: resolvedInstanceParameters,
774
+ connectionId: config.connectionId,
775
+ savedFilterTrees,
776
+ customFieldsRequestDetails: config.customFieldsRequestDetails ?? null,
777
+ fieldValues
778
+ });
779
+ assertActivityMetadataResolved(activityClient.getEssentialConfiguration().essentialConfiguration, config.connectionId);
780
+ if (filterInputName && authoredFilterTree) {
781
+ const compiledFilter = activityClient.getCompiledFilter(filterInputName);
782
+ assertCompiledFilterResolvable(compiledFilter, filterInputName, authoredFilterTree);
783
+ detail.queryParameters = {
784
+ ...detail.queryParameters ?? {},
785
+ [filterInputName]: compiledFilter
786
+ };
787
+ if (Object.keys(filterVariables).length > 0) {
788
+ detail.filterVariables = filterVariables;
789
+ await applySavedFilterTree(activityClient, filterInputName, authoredFilterTree);
790
+ }
791
+ }
792
+ const { essentialConfiguration } = activityClient.getEssentialConfiguration();
793
+ detail.configuration = `=jsonString:${JSON.stringify({ essentialConfiguration })}`;
794
+ }
795
+ if ((node.type ?? "").startsWith("uipath.agent.resource.tool.connector.")) {
796
+ const { bodyParameters, queryParameters, pathParameters } = buildAgentToolParamsFromMetadata(metadata, config.method);
797
+ if (!detail.bodyParameters && Object.keys(bodyParameters).length > 0)
798
+ detail.bodyParameters = bodyParameters;
799
+ if (!detail.queryParameters && Object.keys(queryParameters).length > 0)
800
+ detail.queryParameters = queryParameters;
801
+ if (!detail.pathParameters && Object.keys(pathParameters).length > 0)
802
+ detail.pathParameters = pathParameters;
803
+ }
804
+ const params = methodInfo.parameters ?? [];
805
+ const rawMultipartParams = extractMultipartParameters(params);
806
+ const { multipartParams, bodyParameters: cleanedBodyParameters } = inlineMultipartFileValues(rawMultipartParams, detail.bodyParameters);
807
+ if (multipartParams.length > 0) {
808
+ detail.multipartParameters = multipartParams;
809
+ }
810
+ if (cleanedBodyParameters) {
811
+ detail.bodyParameters = cleanedBodyParameters;
812
+ } else {
813
+ delete detail.bodyParameters;
814
+ }
815
+ const inputMeta = buildInputMetadata(multipartParams, methodInfo.operation, methodInfo.pagination?.maxPageSize, filterInputName && Object.keys(filterVariables).length > 0 ? [filterInputName] : undefined);
816
+ if (inputMeta) {
817
+ detail.inputMetadata = inputMeta;
818
+ }
819
+ patchOutputType(definitions, node.type ?? "", hasFileResponseField(metadata, config.method) ? "file" : isListOperation(methodInfo.operation) ? "array" : "object");
820
+ } else {
821
+ throw new Error(`IS metadata for ${connectorKey}/${objectName} has no entry for method "${config.method}" — cannot build configuration`);
822
+ }
823
+ node.inputs = { ...node.inputs ?? {}, detail };
824
+ ensureConnectionBindings(workflow, connectorKey, config.connectionId, config.folderKey);
825
+ }
826
+ async function configureTrigger(workflow, node, config) {
827
+ const definitions = workflow.definitions ?? [];
828
+ const context = getModelContext(node, definitions);
829
+ const connectorKey = getContextValue(context, "connectorKey") ?? "";
830
+ const operation = getContextValue(context, "operation") ?? "";
831
+ const objectName = resolveTriggerObjectName(context, config, connectorKey, operation, node.type ?? "");
832
+ const activityTypeId = extractActivityTypeIdFromDefinition(definitions, node.type ?? "");
833
+ const instanceParameters = extractInstanceParameters(definitions, node.type ?? "");
834
+ if (!instanceParameters) {
835
+ throw new Error(`No instanceParameters found in definition for trigger "${node.type}" — cannot build configuration`);
836
+ }
837
+ if (isConnectorWaitForEventType(node.type ?? "")) {
838
+ instanceParameters.activityType = "CuratedWaitFor";
839
+ }
840
+ const resolvedInstanceParameters = {
841
+ ...instanceParameters,
842
+ objectName
843
+ };
844
+ const eventParameters = config.eventParameters ?? {};
845
+ assertLiteralEventParameters(eventParameters, node.type ?? "");
846
+ const filterTree = config.filter && config.filter.groupOperator !== null ? config.filter : null;
847
+ const substitutedFilter = filterTree ? substituteDetailFilter(filterTree) : null;
848
+ const filterVariables = substitutedFilter?.variables ?? {};
849
+ const detail = {
850
+ connector: connectorKey,
851
+ connectionId: config.connectionId,
852
+ connectionResourceId: config.connectionId,
853
+ connectionFolderKey: config.folderKey,
854
+ eventParameters,
855
+ objectName,
856
+ eventType: operation,
857
+ eventMode: config.eventMode
858
+ };
859
+ if (config.queryParameters)
860
+ detail.queryParameters = config.queryParameters;
861
+ if (config.pathParameters)
862
+ detail.pathParameters = config.pathParameters;
863
+ const triggerClient = await createConfiguredActivityClient({
864
+ instanceParameters: resolvedInstanceParameters,
865
+ connectionId: config.connectionId,
866
+ savedFilterTrees: substitutedFilter ? { filter: substitutedFilter.tree } : null,
867
+ fieldValues: eventParameters
868
+ });
869
+ assertActivityMetadataResolved(triggerClient.getEssentialConfiguration().essentialConfiguration, config.connectionId);
870
+ const compiledTriggerFilter = triggerClient.getCompiledFilter("filter");
871
+ assertCompiledFilterResolvable(compiledTriggerFilter, "filter", filterTree);
872
+ detail.filterExpression = compiledTriggerFilter;
873
+ if (filterTree && Object.keys(filterVariables).length > 0) {
874
+ detail.filterVariables = filterVariables;
875
+ await applySavedFilterTree(triggerClient, "filter", filterTree);
876
+ }
877
+ const { essentialConfiguration } = triggerClient.getEssentialConfiguration();
878
+ detail.configuration = `=jsonString:${JSON.stringify({ essentialConfiguration })}`;
879
+ if (activityTypeId)
880
+ detail.uiPathActivityTypeId = activityTypeId;
881
+ detail.errorState = { issues: [] };
882
+ node.inputs = { ...node.inputs ?? {}, detail };
883
+ ensureConnectionBindings(workflow, connectorKey, config.connectionId, config.folderKey);
884
+ }
885
+ async function configureConnectorNode(filePath, nodeId, rawDetail) {
886
+ const { workflow, refMap } = await readFlowWorkflow(filePath);
887
+ const node = workflow.nodes.find((n) => n.id === nodeId);
888
+ if (!node)
889
+ throw new Error(`Node '${nodeId}' not found`);
890
+ const nodeType = node.type ?? "";
891
+ const nodeIds = new Set(workflow.nodes.map((n) => n.id));
892
+ if (isManagedHttpType(nodeType)) {
893
+ const config = validateManagedHttpDetail(rawDetail);
894
+ configureManagedHttp(workflow, node, config);
895
+ await writeFlowWorkflow(filePath, workflow, refMap);
896
+ const fs2 = getFileSystem();
897
+ await regenerateBindingsFile(fs2, filePath);
898
+ if (config.authentication === "connector") {
899
+ await createConnectionResourceFile(fs2, filePath, config.connectionId, config.targetConnector);
900
+ }
901
+ return {
902
+ bindingsCreated: workflow.bindings.length,
903
+ detailPopulated: true,
904
+ ...crossNodeBindingWarnings(node, nodeIds)
905
+ };
906
+ }
907
+ if (!nodeType.startsWith("uipath.connector") && !nodeType.startsWith("uipath.agent.resource.tool.connector.")) {
908
+ throw new Error(`Node '${nodeId}' is not a connector type node, no operation done.`);
909
+ }
910
+ if (isEventDrivenConnectorType(nodeType)) {
911
+ const config = validateConnectorTriggerDetail(rawDetail);
912
+ await configureTrigger(workflow, node, config);
913
+ } else {
914
+ const config = validateConnectorDetail(rawDetail);
915
+ await configureActivity(workflow, node, config);
916
+ }
917
+ await writeFlowWorkflow(filePath, workflow, refMap);
918
+ const fs = getFileSystem();
919
+ await regenerateBindingsFile(fs, filePath);
920
+ const connectionId = rawDetail.connectionId;
921
+ const defs = workflow.definitions ?? [];
922
+ const connectorKey = getContextValue(getModelContext(node, defs), "connectorKey");
923
+ if (connectionId && connectorKey) {
924
+ await createConnectionResourceFile(fs, filePath, connectionId, connectorKey);
925
+ }
926
+ return {
927
+ bindingsCreated: workflow.bindings.length,
928
+ detailPopulated: true,
929
+ ...isEventDrivenConnectorType(nodeType) ? {} : crossNodeBindingWarnings(node, nodeIds)
930
+ };
931
+ }
932
+ function crossNodeBindingWarnings(node, nodeIds) {
933
+ const detail = node.inputs?.detail;
934
+ const issues = scanDetailForCrossNodeBindings(detail, nodeIds, "warning");
935
+ if (issues.length === 0)
936
+ return {};
937
+ return { warnings: issues.map((i) => `[${i.path}] ${i.message}`) };
938
+ }
939
+ export {
940
+ InvalidDetailError,
941
+ buildAgentToolParamsFromMetadata,
942
+ configureConnectorNode,
943
+ validateConnectorDetail,
944
+ validateConnectorTriggerDetail,
945
+ validateManagedHttpDetail
946
+ };
947
+
948
+ //# debugId=A0238AA222C5EF2164756E2164756E21