@uipath/flow-tool 1.205.0-preview.276 → 1.206.0-preview.279
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +14 -12
- package/dist/THIRD-PARTY-NOTICES.md +77 -49
- package/dist/applicationinsights-web-8m26566f.js +17209 -0
- package/dist/authoring-x84r2a2j.js +23 -0
- package/dist/binding-service-s0wvr2xm.js +114 -0
- package/dist/{browser-strategy-6atc7v8s.js → browser-strategy-gnftxwsf.js} +5 -6
- package/dist/connector-library-1yw5r47w.js +99 -0
- package/dist/{connector-service-m08dysc2.js → connector-service-r86mtxwn.js} +270 -275
- package/dist/{conversion-FQTRFHRX-e5wr281j.js → conversion-7O2PDOQB-3wwppx87.js} +477 -472
- package/dist/{de-FGHEJRCI-PK6WALXW-0dnvnmke.js → de-2BEKRUMY-MD7L477H-rj1rmtav.js} +425 -37
- package/dist/{de-WLW6KWOJ-2qnsqdtw.js → de-2BEKRUMY-x4dx0nn9.js} +190 -10
- package/dist/{de-VMMG2MN7-2ecwpg1b.js → de-3CU65EDB-r7r10am9.js} +82 -7
- package/dist/{de-UZI7FJDO-awjpqfz0.js → de-AI7ML6JM-km47f8k4.js} +20 -5
- package/dist/{de-B3EKCNFC-zdwybhh7.js → de-VQWT6L5Y-mch4qwyv.js} +38 -5
- package/dist/{de-XNTCMP5Z-xfkfqg20.js → de-XNTCMP5Z-nd4scb43.js} +1 -4
- package/dist/debug-conversation-trigger-3wzy90kj.js +23 -0
- package/dist/debug-http-client-zydr7tna.js +31 -0
- package/dist/debug-service-hdktqeek.js +60 -0
- package/dist/edge-service-zck3s9ss.js +267 -0
- package/dist/{elk.bundled-vpsbxz0p.js → elk.bundled-phy0zc81.js} +6860 -6860
- package/dist/{embedded-file-reader-r66242ey.js → embedded-file-reader-0228j82a.js} +1 -4
- package/dist/en-LAVDF7IQ-ba7wzsxp.js +254 -0
- package/dist/en-LQHKFSEY-zf6a2myg.js +24 -0
- package/dist/en-U2NSIIZN-whenw6wh.js +58 -0
- package/dist/en-WPCQ4JKF-t3x07ggr.js +148 -0
- package/dist/en-X6T4SP2Y-FPGCJIFV-qdfapfzs.js +2756 -0
- package/dist/en-X6T4SP2Y-xe57av1w.js +2752 -0
- package/dist/{es-5THCNRFN-tqwyrdgy.js → es-7ZTQTGKN-11sj0yjx.js} +190 -10
- package/dist/{es-KR3ZSNMP-QLWVVWKJ-5egs0gj9.js → es-7ZTQTGKN-TXQBFYRA-bzh1e1gq.js} +422 -34
- package/dist/{es-EKHIPSW6-ya88nvm0.js → es-EKHIPSW6-asfceac2.js} +1 -4
- package/dist/{es-KEBF3AIM-g5rszh8f.js → es-EP563JWQ-1agj5n4e.js} +38 -5
- package/dist/{es-WY6FZ3HO-zksnn6dp.js → es-KHVY67FO-natcvmmm.js} +82 -7
- package/dist/{es-MX-5RELIXKI-jtjbcxbb.js → es-MX-7KJZPEQN-1fq0a9jr.js} +20 -5
- package/dist/{es-MX-ZP2LJ3V7-k4brnfa9.js → es-MX-F7ZEHSNE-gxpm47vv.js} +82 -7
- package/dist/{es-MX-XXZJGC4R-W6EEIHXR-c2m4yjpj.js → es-MX-IHGRIEWH-23X37OPS-7cqdzpcy.js} +425 -37
- package/dist/{es-MX-TWZBRAXK-gqd9swzw.js → es-MX-IHGRIEWH-g63p0gb4.js} +191 -11
- package/dist/{es-MX-OR6G2SFR-7yykk5ma.js → es-MX-OR6G2SFR-02t13sen.js} +1 -4
- package/dist/{es-MX-EL3CDS3F-sh84yvjr.js → es-MX-S2RFDGDE-x9r0tv30.js} +38 -5
- package/dist/{es-4UBUTCQA-t7hsackg.js → es-SPNKTD5Y-vw5cbgv5.js} +20 -5
- package/dist/filter-engine-dh9s90gb.js +10 -0
- package/dist/first-party-service-ahcc6xc6.js +8 -0
- package/dist/flow-api-d4dvmadm.js +38 -0
- package/dist/{flow-debug-service-gc2ky1ve.js → flow-debug-service-hy21ddd9.js} +151 -195
- package/dist/flow-eval-node-target-tdrwqca7.js +29 -0
- package/dist/flow-eval-run-api-w4j8ra60.js +9 -0
- package/dist/{flow-eval-run-service-2cbr0jtw.js → flow-eval-run-service-5en4ahyn.js} +125 -149
- package/dist/{flow-eval-service-24jbkhhz.js → flow-eval-service-2j28ect1.js} +57 -81
- package/dist/{flow-init-sdk-source-xvdvkq7d.js → flow-init-sdk-source-xnr4bg25.js} +8 -11
- package/dist/flow-init-service-bj3ev9bz.js +26 -0
- package/dist/flow-io-9q6xk473.js +24 -0
- package/dist/{flow-migrate-service-t3pnd2r3.js → flow-migrate-service-dkx85jj5.js} +33 -54
- package/dist/{flow-pack-service-b910q207.js → flow-pack-service-58m51sp8.js} +79 -103
- package/dist/flow-validate-service-9a3zate4.js +46 -0
- package/dist/{fr-DPD4GHX3-exeypjwk.js → fr-7LK3QUWT-a94yejcs.js} +38 -5
- package/dist/{fr-Y6NPVODW-AS7T42TR-v4qe2tha.js → fr-7ZDL4MVO-CXMRZDOF-qjkg6y2r.js} +425 -37
- package/dist/{fr-CERONSRC-edpxhbmb.js → fr-7ZDL4MVO-pd27vwh6.js} +191 -11
- package/dist/{fr-VBM5WRC2-707ha692.js → fr-AXJGUT53-hdg3pmd4.js} +20 -5
- package/dist/{fr-PRMYCRDC-0bk078by.js → fr-I42FODC5-p80x5v4b.js} +83 -8
- package/dist/{fr-IHD66TVT-vfvmefbx.js → fr-IHD66TVT-eq8h0d6c.js} +1 -4
- package/dist/{governance-fetcher-ffvbtwbd.js → governance-fetcher-h8hpcwyh.js} +17 -21
- package/dist/{headless-4x4v3sy6.js → headless-41t9wwb7.js} +2395 -43269
- package/dist/{hitl-service-3m4ce3mt.js → hitl-service-hccqhm63.js} +22 -42
- package/dist/index-4e3w8x62.js +31 -0
- package/dist/{index-fyc0k5dd.js → index-5pzp2qeb.js} +5350 -3271
- package/dist/index-5xh0cjag.js +82 -0
- package/dist/index-7fet3f0s.js +10 -0
- package/dist/index-d4bdedx3.js +32 -0
- package/dist/index-f5kq7265.js +24 -0
- package/dist/index-g2p2ww34.js +39 -0
- package/dist/index-ng011fzs.js +974 -0
- package/dist/{index-h8cph72k.js → index-nzr4mx5p.js} +2 -22
- package/dist/{index-1b2je9n2.js → index-px95xmkg.js} +290 -268
- package/dist/index-tdwpejt6.js +22 -0
- package/dist/index-z2qk2qn6.js +24 -0
- package/dist/index.js +19 -28
- package/dist/index.umd.min-ttg1qc0x.js +7814 -0
- package/dist/init.js +22 -43
- package/dist/inline-entity-resolver-0neh2b43.js +25 -0
- package/dist/input-reader-zqaep7k7.js +11 -0
- package/dist/{ja-43QL7CGO-c3q8gre9.js → ja-C7GZV6YP-hvtbngr5.js} +20 -5
- package/dist/{ja-HFEQKCZF-hb2f25p8.js → ja-GI3OUHPZ-28fy60r0.js} +83 -8
- package/dist/{ja-JE5ZL7EY-hacj2m31.js → ja-JE5ZL7EY-607k4c7p.js} +1 -4
- package/dist/{ja-Q5PXKJ2V-BR5GRIDQ-fgqqpryf.js → ja-LGAM5HKR-NTPKIZEM-nv67917s.js} +422 -34
- package/dist/{ja-U2MCNHGT-gz0ap1jk.js → ja-LGAM5HKR-sgrtjqjh.js} +190 -10
- package/dist/ja-WY2W6733-ayr36h1f.js +71 -0
- package/dist/{jmespath-e4a59c8w.js → jmespath-wwym30dp.js} +1 -1
- package/dist/{js-yaml-87cdx6bm.js → js-yaml-a2bk27p6.js} +1 -3
- package/dist/known-types-v9sxcq1c.js +13 -0
- package/dist/{ko-AYBDSRZG-G43C3XUW-kng13fsg.js → ko-7B4SUZB7-2SLI636D-grbtfrcv.js} +424 -36
- package/dist/{ko-XAUYQWDR-zp81gjp4.js → ko-7B4SUZB7-c8wr20sc.js} +190 -10
- package/dist/{ko-DJJRKCG5-5h3k9csc.js → ko-DJJRKCG5-4fekzjn4.js} +1 -4
- package/dist/{ko-LA5OSS5P-mq5h8sbk.js → ko-H2RGQWKJ-9696w762.js} +38 -5
- package/dist/{ko-TLL6Z6CD-wrt3n8a9.js → ko-Q24HSSL4-5vn55pte.js} +20 -5
- package/dist/{ko-B4SEC7QX-thq2wt6a.js → ko-RYKAL74T-10m4z8vw.js} +83 -8
- package/dist/localization-skqjy9nr.js +45 -0
- package/dist/maestro-automate-entry-d1v5q5mv.js +14 -0
- package/dist/{node-xqc0h091.js → node-0jy3qx5b.js} +69 -638
- package/dist/node-service-2nxpk751.js +64 -0
- package/dist/{node-strategy-1dmmhvf3.js → node-strategy-wrjxmbzt.js} +9 -12
- package/dist/node-sync-service-68vq10je.js +56 -0
- package/dist/packager-tool-14rdgz3c.js +55 -0
- package/dist/packager-tool-1rhch6b5.js +496 -0
- package/dist/packager-tool-21t17xzz.js +5073 -0
- package/dist/{packager-tool-pvhx9e12.js → packager-tool-2b0tn4p4.js} +58 -176
- package/dist/{packager-tool-f9jxca9z.js → packager-tool-368bft50.js} +11 -11
- package/dist/{packager-tool-a5afh1dc.js → packager-tool-4fv0sq2h.js} +61 -67
- package/dist/packager-tool-4g87fbz6.js +273 -0
- package/dist/packager-tool-4zt1s51a.js +53 -0
- package/dist/{packager-tool-frjt46rb.js → packager-tool-508ka40b.js} +23 -23
- package/dist/{packager-tool-gbv6f0ac.js → packager-tool-5104bnpv.js} +22 -21
- package/dist/packager-tool-5dgpfh5e.js +1274 -0
- package/dist/packager-tool-5ve5ms3b.js +2393 -0
- package/dist/{packager-tool-dxgrhfq5.js → packager-tool-64r7e4ek.js} +8 -8
- package/dist/{packager-tool-h6pf3qxq.js → packager-tool-65yf8zqb.js} +180 -1237
- package/dist/{packager-tool-1yh8g550.js → packager-tool-6an893wm.js} +12 -3
- package/dist/{packager-tool-htrt75v4.js → packager-tool-6jpvvxyb.js} +27 -22
- package/dist/packager-tool-6vhefpmq.js +461 -0
- package/dist/{packager-tool-1nfbzy0h.js → packager-tool-72xwbsmw.js} +441 -556
- package/dist/packager-tool-7atc775f.js +30 -0
- package/dist/packager-tool-7mxn3e7j.js +27 -0
- package/dist/{packager-tool-wvmtp8zt.js → packager-tool-7qtnffkc.js} +8 -7
- package/dist/{packager-tool-ymma2s85.js → packager-tool-8ba22j6n.js} +9 -6
- package/dist/{packager-tool-apawc11t.js → packager-tool-8ed52y5r.js} +1584 -1261
- package/dist/{packager-tool-v11fm907.js → packager-tool-8n4bdvke.js} +13 -13
- package/dist/{packager-tool-p8gab24q.js → packager-tool-8qypzm9v.js} +424 -404
- package/dist/packager-tool-9217bxm2.js +6 -0
- package/dist/{packager-tool-zfrp8ecz.js → packager-tool-951nhh3e.js} +82 -82
- package/dist/{packager-tool-ap0zt7de.js → packager-tool-99d2kj94.js} +8 -11
- package/dist/{packager-tool-z21c6mbp.js → packager-tool-a1h0q79w.js} +48 -48
- package/dist/{packager-tool-xk78j7dz.js → packager-tool-ac6rvny7.js} +52 -57
- package/dist/{packager-tool-1d64q5s5.js → packager-tool-b2pkwwj1.js} +1273 -1300
- package/dist/{packager-tool-yetpbbey.js → packager-tool-bbkkxbyq.js} +9 -8
- package/dist/{packager-tool-409n51pv.js → packager-tool-d07g2kpn.js} +7 -7
- package/dist/{packager-tool-8zzmg2f3.js → packager-tool-dx6sjbkd.js} +19 -19
- package/dist/{packager-tool-8g5931fz.js → packager-tool-em4ppegs.js} +36 -43
- package/dist/{packager-tool-zgsvggdr.js → packager-tool-f7rk9xhv.js} +4 -4
- package/dist/{packager-tool-jrnjzs5t.js → packager-tool-fzgfb0jt.js} +32175 -36281
- package/dist/{packager-tool-9rmaeaww.js → packager-tool-gdpw0daf.js} +25211 -11966
- package/dist/packager-tool-hk0fnvz5.js +14 -0
- package/dist/{packager-tool-dbsdy4xx.js → packager-tool-jd3v0bh1.js} +4 -4
- package/dist/{packager-tool-tqjfdpda.js → packager-tool-jmrhzfyj.js} +106 -80
- package/dist/{packager-tool-2px5qqm4.js → packager-tool-kz3t4raw.js} +490 -246
- package/dist/{packager-tool-7bam8cjq.js → packager-tool-mdf7bws6.js} +53255 -27261
- package/dist/{packager-tool-gdtpsdn7.js → packager-tool-mm1x18d6.js} +223 -28
- package/dist/{packager-tool-nkrmjr3a.js → packager-tool-mphfxa9g.js} +125 -125
- package/dist/{packager-tool-kn86394c.js → packager-tool-p123mtfx.js} +66 -692
- package/dist/{packager-tool-t7ahhaer.js → packager-tool-pxq0bwp0.js} +208 -138
- package/dist/{packager-tool-j95w4fj3.js → packager-tool-q0f1dvtd.js} +11 -11
- package/dist/{packager-tool-8qp60s20.js → packager-tool-q2f18crb.js} +3 -3
- package/dist/packager-tool-q2kwk5bf.js +57 -0
- package/dist/{packager-tool-09rvpfjd.js → packager-tool-rxqxza90.js} +192 -183
- package/dist/{packager-tool-3m4ve01f.js → packager-tool-ryds9860.js} +33 -36
- package/dist/{packager-tool-ykbahxma.js → packager-tool-t17t9svg.js} +6 -6
- package/dist/{packager-tool-myhbp761.js → packager-tool-vgrswa8p.js} +53 -8
- package/dist/{packager-tool-7hw344bt.js → packager-tool-xb16e3tz.js} +5 -5
- package/dist/{packager-tool-1frs4sr4.js → packager-tool-yewnsyag.js} +37 -5
- package/dist/packager-tool-zdqbp34f.js +14 -0
- package/dist/{packager-tool-pacrqxv2.js → packager-tool-ze3fnf3s.js} +52 -34
- package/dist/packager-tool.js +12 -32
- package/dist/prepare-uip-ad7mfs8t.js +92 -0
- package/dist/{pt-3KUMINBZ-d0fexmny.js → pt-2RGHDOG4-gwe2ptvg.js} +38 -5
- package/dist/{pt-BR-3LGIH33I-tqbrd89y.js → pt-BR-3LGIH33I-hdf332je.js} +1 -4
- package/dist/{pt-BR-USP2T7GD-pedn77m1.js → pt-BR-BIUJXIPU-2sqzhr8y.js} +20 -5
- package/dist/{pt-BR-6VFBW5QT-hsck9gjj.js → pt-BR-IL3KLBID-m1mvqqzb.js} +83 -8
- package/dist/{pt-BR-WNNZTIMN-6fent688.js → pt-BR-JWHVZE6H-gvkknv49.js} +38 -5
- package/dist/{pt-BR-TKHNHMET-4Z5H4N5G-pzw3328h.js → pt-BR-PHLFHMXZ-JFPKUXIZ-gyb27t6e.js} +425 -37
- package/dist/{pt-BR-GNQNAAZ2-xadharv4.js → pt-BR-PHLFHMXZ-n6de4s7z.js} +191 -11
- package/dist/{pt-RMIAKZB4-t80exmp7.js → pt-MHX6JGAX-xfgvdqwg.js} +20 -5
- package/dist/{pt-ROXU257Y-OWZOS54V-ywap2t39.js → pt-N7ZTJT4W-GVODJMRX-p5b51p0b.js} +424 -36
- package/dist/{pt-TO2DARY2-ftcce1bv.js → pt-N7ZTJT4W-d6c67xcn.js} +190 -10
- package/dist/{pt-PFZXVOQH-qshq0b2m.js → pt-PFZXVOQH-xvcm5b61.js} +1 -4
- package/dist/{pt-WOTPKWPZ-1rxcy8hs.js → pt-VLA5IOHO-8t4pze0h.js} +83 -8
- package/dist/{ro-GHOBYW2S-4zevc9dy.js → ro-3RKJNGJZ-xqj14e3d.js} +20 -5
- package/dist/{ro-KMDT7LYJ-yhpnsdvw.js → ro-53TS7SWG-hnjx1c7b.js} +38 -5
- package/dist/{ro-AN5G62WQ-kcj00jwq.js → ro-AN5G62WQ-fzsv2ymm.js} +1 -4
- package/dist/{ro-AVAWPKOO-6WCG756B-v7pjv1hc.js → ro-FLNXVYJI-ZN43XZKK-2tajkc94.js} +422 -34
- package/dist/{ro-WUYJV6OW-a8d9qy1n.js → ro-FLNXVYJI-ytrwabg2.js} +190 -10
- package/dist/{ro-PB44YXML-zmhhwp5h.js → ro-IRNFX376-mh84zk3n.js} +82 -7
- package/dist/{ru-GSCT4ARZ-FTVCGQTL-gee86v14.js → ru-GSCT4ARZ-FTVCGQTL-v3d4ag31.js} +2 -4
- package/dist/ru-GSCT4ARZ-c2cfq4h1.js +7 -0
- package/dist/{ru-T73OPRTC-4knxw497.js → ru-T73OPRTC-50m7tty9.js} +1 -4
- package/dist/{ru-WBLQ5B2U-wemdzdqd.js → ru-WBLQ5B2U-5qpt0mvh.js} +1 -4
- package/dist/{ru-WBLQ5B2U-8r3c7v6d.js → ru-WBLQ5B2U-bf20yr5y.js} +1 -4
- package/dist/{ru-WBLQ5B2U-kdey8qa4.js → ru-WBLQ5B2U-w2wmp3xb.js} +1 -4
- package/dist/{serialization-BXU6AKAN-vdqyr29x.js → serialization-Z3UYT6BW-y9gb55mp.js} +1638 -761
- package/dist/services/extract-schema/default-schema-document.d.ts +31 -0
- package/dist/services/node-service.d.ts +6 -3
- package/dist/services/node-validators/file-node-connection-validator.d.ts +2 -0
- package/dist/services/node-validators/index.d.ts +1 -0
- package/dist/services/orchestrator-connection-field.d.ts +24 -0
- package/dist/services/packaging-utils.d.ts +2 -2
- package/dist/services/vars-reference-rule.d.ts +4 -3
- package/dist/solution-auth-j8x84n5z.js +11 -0
- package/dist/solution-discovery-vn4q32bf.js +38 -0
- package/dist/{tidy-service-hz61ypyj.js → tidy-service-m33hhtc7.js} +37 -55
- package/dist/tool.js +18 -27
- package/dist/{tr-JMIP7ZSL-G3QYPVT2-gswngwcr.js → tr-7AIZZWZ6-ESAESUPL-77g9b7jb.js} +422 -34
- package/dist/{tr-M3F5A6AU-bb0tg39m.js → tr-7AIZZWZ6-pdzp9n0p.js} +190 -10
- package/dist/{tr-SEC6RGZ4-0ttavjya.js → tr-EJKY7DVQ-rkctqva4.js} +83 -8
- package/dist/{tr-KHOCWWLF-8apf5y44.js → tr-KHOCWWLF-m9t24j5y.js} +1 -4
- package/dist/{tr-SC55DYHY-e4zgcd4t.js → tr-PIQY7JIT-2mkwk0kq.js} +38 -5
- package/dist/{tr-GDTLECMM-kngksm3r.js → tr-PQLUUHPC-qsb7btxn.js} +20 -5
- package/dist/utils/container-ports.d.ts +22 -0
- package/dist/utils/handle-expansion.d.ts +57 -3
- package/dist/utils/workflow-file-format.d.ts +14 -0
- package/dist/validation.js +44 -68
- package/dist/{variable-service-9ex4a93n.js → variable-service-ea1erf93.js} +28 -49
- package/dist/{wait-for-flow-job-b0vj8828.js → wait-for-flow-job-a4xtda36.js} +29 -36
- package/dist/{zh-CN-MX7VIOF2-xznrtchf.js → zh-CN-4FH7E7UL-84y6j2ea.js} +82 -7
- package/dist/{zh-CN-4NI2EGMV-8g027vv3.js → zh-CN-4NI2EGMV-dt0wg0wh.js} +1 -4
- package/dist/{zh-CN-IFFXSEJS-MZQ4HU3Z-ge1ynmtz.js → zh-CN-CN2ARPFS-NIQTWDK2-b5c91fwn.js} +422 -34
- package/dist/{zh-CN-C5G4PC7C-ds9gkptg.js → zh-CN-CN2ARPFS-e0p2qrxf.js} +190 -10
- package/dist/{en-BPJVY3U7-xkpj5xc5.js → zh-CN-NIEVKROA-q4tbbwqz.js} +26 -7
- package/dist/{zh-CN-I5D7WHBD-ge92tbx9.js → zh-CN-OHNTHZRI-b0hjkfqn.js} +20 -5
- package/dist/{zh-TW-53SU6EH4-33x57egq.js → zh-TW-53SU6EH4-w0wz3nwg.js} +1 -4
- package/dist/{zh-TW-5SJ3GZT2-bsg054mw.js → zh-TW-5WQA6QTM-hns69sd4.js} +83 -8
- package/dist/{zh-TW-IYBNYAMG-J7FWTQTK-sx8d4ymg.js → zh-TW-7RUFEVFK-VKVRSVTP-jq2pcmar.js} +421 -33
- package/dist/{zh-TW-62HZIG6O-787kdwex.js → zh-TW-7RUFEVFK-qd7myw31.js} +190 -10
- package/dist/{zh-TW-2AVLM723-288pkc1z.js → zh-TW-E4D3Y6ZR-tn3bmzz5.js} +20 -5
- package/dist/{zh-TW-TN3MPNXL-jcgg2hcs.js → zh-TW-MSQM7YTT-m7r7nwnj.js} +38 -5
- package/package.json +2 -2
- package/dist/authoring-e1k40hyw.js +0 -24
- package/dist/binding-service-0qffbxg7.js +0 -157
- package/dist/de-FGHEJRCI-gn4cf5gh.js +0 -2697
- package/dist/de-MUJPA4EB-209jpeqe.js +0 -173
- package/dist/de-UZI7FJDO-mwvc4cxe.js +0 -200
- package/dist/debug-conversation-trigger-2crr9w4n.js +0 -30
- package/dist/debug-http-client-yqjzsnhw.js +0 -32
- package/dist/debug-service-nra3n02y.js +0 -61
- package/dist/edge-service-y44f2rgd.js +0 -170
- package/dist/en-E454CJNK-ytfw06kj.js +0 -98
- package/dist/en-EJCBA3LK-0wb3b1xy.js +0 -146
- package/dist/en-EJCBA3LK-dtpdghgj.js +0 -146
- package/dist/en-GN2ZGWUE-03z2df4k.js +0 -136
- package/dist/en-LQHKFSEY-vvbe8ve9.js +0 -26
- package/dist/en-M7GQYBV2-5nfmpnfz.js +0 -2018
- package/dist/en-TBNO2WUV-77KTKLDE-4ktf0pqw.js +0 -1942
- package/dist/en-TBNO2WUV-9nan43e5.js +0 -1936
- package/dist/es-4UBUTCQA-m1ytpyx2.js +0 -200
- package/dist/es-7SE7HX2X-qda7whn6.js +0 -173
- package/dist/es-KR3ZSNMP-0cszm2n3.js +0 -2697
- package/dist/es-MX-2MYFZU7X-6v0q5rbn.js +0 -173
- package/dist/es-MX-5RELIXKI-9jhqtddc.js +0 -200
- package/dist/es-MX-XXZJGC4R-b4fbwe9d.js +0 -2697
- package/dist/filter-engine-7ep90g7f.js +0 -11
- package/dist/first-party-service-srxaftkn.js +0 -27
- package/dist/flow-api-sat010z1.js +0 -42
- package/dist/flow-eval-node-target-cwxb4kfe.js +0 -52
- package/dist/flow-eval-run-api-xdygjzfv.js +0 -13
- package/dist/flow-init-service-k7k5vx2z.js +0 -47
- package/dist/flow-io-2qdyj5e0.js +0 -44
- package/dist/flow-validate-service-x2mbk3et.js +0 -70
- package/dist/fr-MDFKNZ4C-qmypp92m.js +0 -173
- package/dist/fr-VBM5WRC2-63z7w4mh.js +0 -200
- package/dist/fr-Y6NPVODW-q5ef3htr.js +0 -2697
- package/dist/index-cg9qhfb1.js +0 -635
- package/dist/index-d090f35d.js +0 -66
- package/dist/index-gxcjq6ns.js +0 -110
- package/dist/index-kmp9fmhb.js +0 -25
- package/dist/index-nsn889vf.js +0 -27
- package/dist/index-sqhbn7ew.js +0 -157
- package/dist/index-wycgq0ff.js +0 -3178
- package/dist/index-y1ym28vg.js +0 -667
- package/dist/index.umd.min-fqefd9kn.js +0 -7814
- package/dist/inline-entity-resolver-c854cqma.js +0 -45
- package/dist/input-reader-n7kzdrev.js +0 -12
- package/dist/ja-43QL7CGO-h6qfxfay.js +0 -200
- package/dist/ja-MDG4BKZQ-gayaca2c.js +0 -38
- package/dist/ja-Q5PXKJ2V-tzf2rvz2.js +0 -2697
- package/dist/ja-UTQEAP34-hvyf683h.js +0 -173
- package/dist/known-types-r51zxb9g.js +0 -19
- package/dist/ko-AXCHW2OK-pkwdcbmx.js +0 -173
- package/dist/ko-AYBDSRZG-am0h0m2r.js +0 -2697
- package/dist/ko-TLL6Z6CD-ag6gjynr.js +0 -200
- package/dist/localization-d6gjmrsw.js +0 -47
- package/dist/maestro-automate-entry-6f9act3w.js +0 -22
- package/dist/node-service-d4xpqs0z.js +0 -92
- package/dist/node-sync-service-76b9e4r5.js +0 -61
- package/dist/packager-tool-0gctz400.js +0 -17
- package/dist/packager-tool-4mna26cc.js +0 -133
- package/dist/packager-tool-4x7tzvv0.js +0 -1176
- package/dist/packager-tool-53w8skv5.js +0 -262
- package/dist/packager-tool-6ejqwbw9.js +0 -26
- package/dist/packager-tool-6z1hsm2h.js +0 -143
- package/dist/packager-tool-7ja1b5hh.js +0 -8809
- package/dist/packager-tool-9era57c0.js +0 -28
- package/dist/packager-tool-9jxzgsxc.js +0 -14
- package/dist/packager-tool-c23zrhj8.js +0 -11
- package/dist/packager-tool-d6qf5qmb.js +0 -49
- package/dist/packager-tool-e3yks66r.js +0 -95
- package/dist/packager-tool-e5hj89zm.js +0 -6
- package/dist/packager-tool-e87tzg4y.js +0 -1937
- package/dist/packager-tool-eypvc2kv.js +0 -23
- package/dist/packager-tool-gbgfwx8f.js +0 -2
- package/dist/packager-tool-hk1gxnth.js +0 -11
- package/dist/packager-tool-hxyjn885.js +0 -24
- package/dist/packager-tool-j78fwwhq.js +0 -16
- package/dist/packager-tool-jgfzfqjm.js +0 -53
- package/dist/packager-tool-jysvpt8p.js +0 -11
- package/dist/packager-tool-m3wkcxf5.js +0 -11
- package/dist/packager-tool-mcaf4ewf.js +0 -46
- package/dist/packager-tool-mgcz986r.js +0 -143
- package/dist/packager-tool-p79yh9ww.js +0 -97
- package/dist/packager-tool-paq9c70w.js +0 -1332
- package/dist/packager-tool-pcvhcn2k.js +0 -2019
- package/dist/packager-tool-qkn0c042.js +0 -1922
- package/dist/packager-tool-qszay16r.js +0 -180
- package/dist/packager-tool-red2crtp.js +0 -5367
- package/dist/packager-tool-rs6jm14d.js +0 -23
- package/dist/packager-tool-s7wb0s9n.js +0 -6297
- package/dist/packager-tool-sc961w0q.js +0 -16
- package/dist/packager-tool-skcjythd.js +0 -22085
- package/dist/packager-tool-t07ev0jj.js +0 -1083
- package/dist/packager-tool-xj0agqpk.js +0 -11
- package/dist/packager-tool-z83pga0z.js +0 -1942
- package/dist/pt-3DIO5QWG-hb763vct.js +0 -173
- package/dist/pt-BR-TKHNHMET-dn6zxk1d.js +0 -2697
- package/dist/pt-BR-USP2T7GD-rppy42ym.js +0 -200
- package/dist/pt-BR-Y6K6XHXK-37a932vp.js +0 -173
- package/dist/pt-RMIAKZB4-67enhx3m.js +0 -200
- package/dist/pt-ROXU257Y-yd80gx6s.js +0 -2697
- package/dist/ro-AVAWPKOO-42m6am1w.js +0 -2697
- package/dist/ro-BWR3ONRR-jmap5ajd.js +0 -173
- package/dist/ro-GHOBYW2S-mhnqsgaa.js +0 -200
- package/dist/ru-GSCT4ARZ-1sa9wbr8.js +0 -10
- package/dist/ru-GSCT4ARZ-jrxwev63.js +0 -10
- package/dist/ru-WBLQ5B2U-dpqvtfwr.js +0 -10
- package/dist/ru-WBLQ5B2U-s4em88p0.js +0 -10
- package/dist/shared-utils-tqnx96mg.js +0 -21
- package/dist/solution-auth-8qz5pw7z.js +0 -14
- package/dist/solution-discovery-6t0z143v.js +0 -44
- package/dist/tr-5IIHSFW5-stsb3dar.js +0 -173
- package/dist/tr-GDTLECMM-k5fhmq13.js +0 -200
- package/dist/tr-JMIP7ZSL-fb67ft9w.js +0 -2696
- package/dist/zh-CN-I5D7WHBD-sr5h0a98.js +0 -200
- package/dist/zh-CN-IFFXSEJS-tke4mzty.js +0 -2697
- package/dist/zh-CN-OUMLDKDS-q3a1rr5c.js +0 -38
- package/dist/zh-CN-R2KU4U5L-q4yhc33t.js +0 -173
- package/dist/zh-TW-2AVLM723-xsmap3gk.js +0 -200
- package/dist/zh-TW-GNKMELBF-r4ay2475.js +0 -173
- package/dist/zh-TW-IYBNYAMG-wcan0qpb.js +0 -2697
- /package/dist/{packager-tool-yc4kw997.js → packager-tool-1qg04b7q.js} +0 -0
- /package/dist/{packager-tool-cqtsj6yh.js → packager-tool-2sazb7th.js} +0 -0
- /package/dist/{packager-tool-s9ff3kk4.js → packager-tool-887wr6jm.js} +0 -0
- /package/dist/{packager-tool-aw9v0raw.js → packager-tool-8c7nddd1.js} +0 -0
- /package/dist/{packager-tool-9cq9atem.js → packager-tool-a9xgmn1q.js} +0 -0
- /package/dist/{packager-tool-4kr6g0zw.js → packager-tool-cvh1a0nm.js} +0 -0
- /package/dist/{packager-tool-27avrkyk.js → packager-tool-k3egwd1m.js} +0 -0
- /package/dist/{packager-tool-qa9gftnj.js → packager-tool-mxgybnmt.js} +0 -0
- /package/dist/{packager-tool-10vc8pq4.js → packager-tool-wr7gn964.js} +0 -0
|
@@ -0,0 +1,1274 @@
|
|
|
1
|
+
import {
|
|
2
|
+
getFileSystem
|
|
3
|
+
} from "./packager-tool-vgrswa8p.js";
|
|
4
|
+
import {
|
|
5
|
+
catchError2
|
|
6
|
+
} from "./packager-tool-pxq0bwp0.js";
|
|
7
|
+
import {
|
|
8
|
+
logger
|
|
9
|
+
} from "./packager-tool-8ed52y5r.js";
|
|
10
|
+
import {
|
|
11
|
+
isConversationalOrVoiceAgentNodeType2,
|
|
12
|
+
isVoiceAgentNodeType2,
|
|
13
|
+
DYNAMIC_EXTRACT_NODE_TYPE2,
|
|
14
|
+
EntryPointType2,
|
|
15
|
+
ProjectType2,
|
|
16
|
+
getBindingResources2,
|
|
17
|
+
getEntryPoints2,
|
|
18
|
+
generateOperateJson2,
|
|
19
|
+
generateBindingsJson2,
|
|
20
|
+
generateEntryPointsJson2,
|
|
21
|
+
mergeBindingResources2
|
|
22
|
+
} from "./packager-tool-fzgfb0jt.js";
|
|
23
|
+
import {
|
|
24
|
+
createBinding2,
|
|
25
|
+
generateNodeIdAndName2,
|
|
26
|
+
addNode2,
|
|
27
|
+
addBinding2
|
|
28
|
+
} from "./packager-tool-2b0tn4p4.js";
|
|
29
|
+
import {
|
|
30
|
+
buildExtractDocumentBuilderNode
|
|
31
|
+
} from "./packager-tool-gdpw0daf.js";
|
|
32
|
+
import {
|
|
33
|
+
isConnectorNode2,
|
|
34
|
+
getConnectorInfo2,
|
|
35
|
+
isTenantManifestInvalidError2,
|
|
36
|
+
isTenantManifestUnavailableError2,
|
|
37
|
+
getNode2
|
|
38
|
+
} from "./packager-tool-kz3t4raw.js";
|
|
39
|
+
import {
|
|
40
|
+
isKnownSdkNodeType2
|
|
41
|
+
} from "./packager-tool-d07g2kpn.js";
|
|
42
|
+
import {
|
|
43
|
+
explainNodeTypeWithoutProcessResource2
|
|
44
|
+
} from "./packager-tool-a1h0q79w.js";
|
|
45
|
+
import {
|
|
46
|
+
buildInlineAgentContract,
|
|
47
|
+
extractProcessGuid,
|
|
48
|
+
createProcessBindings,
|
|
49
|
+
bindingNodesOf,
|
|
50
|
+
allNodesOf,
|
|
51
|
+
readInlineAgentSource,
|
|
52
|
+
isBareProjectIdSource,
|
|
53
|
+
agentJsonReader,
|
|
54
|
+
isInlineAgentNodeType,
|
|
55
|
+
INLINE_AGENT_STRUCTURAL_INPUT_KEYS,
|
|
56
|
+
agentOutputVariablesFromSchema,
|
|
57
|
+
reconcileInlineAgentInputVariables,
|
|
58
|
+
isEntityNodeType,
|
|
59
|
+
entityScopeKey,
|
|
60
|
+
operateRuntimeOptions
|
|
61
|
+
} from "./packager-tool-mdf7bws6.js";
|
|
62
|
+
import {
|
|
63
|
+
readFlowWorkflow2,
|
|
64
|
+
writeFlowWorkflow2
|
|
65
|
+
} from "./packager-tool-6jpvvxyb.js";
|
|
66
|
+
import {
|
|
67
|
+
resolveInlineEntity2
|
|
68
|
+
} from "./packager-tool-8n4bdvke.js";
|
|
69
|
+
import {
|
|
70
|
+
findNodeDefinition,
|
|
71
|
+
ensureDirectory,
|
|
72
|
+
findMatchingDefinition
|
|
73
|
+
} from "./packager-tool-ac6rvny7.js";
|
|
74
|
+
import {
|
|
75
|
+
findFlowProjectRoot,
|
|
76
|
+
withRuntimeProfile2
|
|
77
|
+
} from "./packager-tool-14rdgz3c.js";
|
|
78
|
+
import {
|
|
79
|
+
defaultEntryPointNodeId
|
|
80
|
+
} from "./packager-tool-jd3v0bh1.js";
|
|
81
|
+
|
|
82
|
+
// src/services/connector-request-buckets.ts
|
|
83
|
+
var REQUEST_BUCKETS = [
|
|
84
|
+
"bodyParameters",
|
|
85
|
+
"queryParameters",
|
|
86
|
+
"pathParameters",
|
|
87
|
+
"eventParameters"
|
|
88
|
+
];
|
|
89
|
+
|
|
90
|
+
// src/services/extract-schema/default-schema-document.ts
|
|
91
|
+
var DEFAULT_FIELD_TYPE_DEFINITIONS = {
|
|
92
|
+
"ft-exact-text": {
|
|
93
|
+
title: "Exact Text",
|
|
94
|
+
type: ["string", "null"],
|
|
95
|
+
format: "verbatim"
|
|
96
|
+
},
|
|
97
|
+
"ft-inferred-text": {
|
|
98
|
+
title: "Inferred Text",
|
|
99
|
+
type: ["string", "null"]
|
|
100
|
+
},
|
|
101
|
+
"ft-date": {
|
|
102
|
+
title: "Date",
|
|
103
|
+
type: ["string", "null"],
|
|
104
|
+
format: "date"
|
|
105
|
+
},
|
|
106
|
+
"ft-number": {
|
|
107
|
+
title: "Number",
|
|
108
|
+
type: ["string", "null"],
|
|
109
|
+
format: "decimal"
|
|
110
|
+
},
|
|
111
|
+
"ft-monetary-quantity": {
|
|
112
|
+
title: "Monetary Quantity",
|
|
113
|
+
type: ["string", "null"],
|
|
114
|
+
format: "monetary"
|
|
115
|
+
},
|
|
116
|
+
"ft-boolean": {
|
|
117
|
+
title: "Boolean",
|
|
118
|
+
type: ["boolean", "null"]
|
|
119
|
+
}
|
|
120
|
+
};
|
|
121
|
+
function buildDefaultSchemaDocument() {
|
|
122
|
+
return {
|
|
123
|
+
prompt: "",
|
|
124
|
+
outputSchema: {
|
|
125
|
+
type: "object",
|
|
126
|
+
additionalProperties: false,
|
|
127
|
+
required: [],
|
|
128
|
+
properties: {},
|
|
129
|
+
$defs: structuredClone(DEFAULT_FIELD_TYPE_DEFINITIONS)
|
|
130
|
+
}
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
// src/services/inline-activity-service.ts
|
|
135
|
+
import { randomUUID } from "node:crypto";
|
|
136
|
+
var INLINE_ACTIVITY_TYPE_PREFIX = "uipath.connector.custom.";
|
|
137
|
+
var INLINE_ACTIVITY_SOURCE = "inline";
|
|
138
|
+
var INLINE_ACTIVITY_VERSION = "4.0.0";
|
|
139
|
+
|
|
140
|
+
class InlineActivityError2 extends Error {
|
|
141
|
+
code = "InlineActivityInvalid";
|
|
142
|
+
instructions;
|
|
143
|
+
constructor(message, instructions) {
|
|
144
|
+
super(message);
|
|
145
|
+
this.name = "InlineActivityError";
|
|
146
|
+
this.instructions = instructions;
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
var asBag = (v) => v && typeof v === "object" && !Array.isArray(v) ? v : {};
|
|
150
|
+
var text = (v) => typeof v === "string" ? v : "";
|
|
151
|
+
function parseInlineActivityNodeType(nodeType) {
|
|
152
|
+
if (!nodeType.startsWith(INLINE_ACTIVITY_TYPE_PREFIX)) {
|
|
153
|
+
throw new InlineActivityError2(`Node type "${nodeType}" is not a non-catalog activity type.`, `A non-catalog activity node type is "${INLINE_ACTIVITY_TYPE_PREFIX}<connector-key>.<activity-slug>", e.g. "${INLINE_ACTIVITY_TYPE_PREFIX}uipath-salesforce-slack.add-users-to-user-group".`);
|
|
154
|
+
}
|
|
155
|
+
const rest = nodeType.slice(INLINE_ACTIVITY_TYPE_PREFIX.length);
|
|
156
|
+
const dot = rest.indexOf(".");
|
|
157
|
+
const connectorKey = dot === -1 ? rest : rest.slice(0, dot);
|
|
158
|
+
const slug = dot === -1 ? "" : rest.slice(dot + 1);
|
|
159
|
+
if (!connectorKey || !slug) {
|
|
160
|
+
throw new InlineActivityError2(`Node type "${nodeType}" is missing the connector key or the activity slug.`, `Use "${INLINE_ACTIVITY_TYPE_PREFIX}<connector-key>.<activity-slug>" — both parts are required.`);
|
|
161
|
+
}
|
|
162
|
+
return { connectorKey, slug };
|
|
163
|
+
}
|
|
164
|
+
async function readInlineActivityMetadata(metadataFile) {
|
|
165
|
+
const fs = getFileSystem();
|
|
166
|
+
const raw = await fs.readFile(metadataFile, "utf-8");
|
|
167
|
+
if (raw === null || raw === undefined) {
|
|
168
|
+
throw new InlineActivityError2(`Activity metadata file not found: ${metadataFile}`, "Pass the <Name>.json that `uip is activities metadata generate` wrote.");
|
|
169
|
+
}
|
|
170
|
+
let parsed;
|
|
171
|
+
try {
|
|
172
|
+
parsed = JSON.parse(String(raw));
|
|
173
|
+
} catch (err) {
|
|
174
|
+
throw new InlineActivityError2(`Activity metadata is not valid JSON (${metadataFile}): ${err instanceof Error ? err.message : String(err)}`, "Regenerate it with `uip is activities metadata generate <min-file>` — never hand-edit generated metadata.");
|
|
175
|
+
}
|
|
176
|
+
return assertInlineActivityMetadata(parsed, metadataFile);
|
|
177
|
+
}
|
|
178
|
+
function assertInlineActivityMetadata(value, where) {
|
|
179
|
+
const m = asBag(value);
|
|
180
|
+
const problems = [];
|
|
181
|
+
for (const key of ["name", "elementKey", "path"]) {
|
|
182
|
+
if (!text(m[key])) {
|
|
183
|
+
problems.push(`missing top-level "${key}"`);
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
const slots = asBag(asBag(m.metadata).method);
|
|
187
|
+
const verbs = Object.keys(slots);
|
|
188
|
+
if (verbs.length !== 1) {
|
|
189
|
+
problems.push(`metadata.method must have exactly one verb slot (got ${verbs.length})`);
|
|
190
|
+
} else {
|
|
191
|
+
const slot = asBag(slots[verbs[0]]);
|
|
192
|
+
for (const key of ["operation", "method", "path", "scriptRef"]) {
|
|
193
|
+
if (!text(slot[key])) {
|
|
194
|
+
problems.push(`method ${verbs[0]}: missing "${key}"`);
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
if (problems.length > 0) {
|
|
199
|
+
throw new InlineActivityError2(`Activity metadata is not a v4 activity (${where}):
|
|
200
|
+
- ${problems.join(`
|
|
201
|
+
- `)}`, "Regenerate it with `uip is activities metadata generate <min-file>`; this command reads the file that writes.");
|
|
202
|
+
}
|
|
203
|
+
return m;
|
|
204
|
+
}
|
|
205
|
+
function verbSlotOf(metadata) {
|
|
206
|
+
const verb = Object.keys(metadata.metadata.method)[0];
|
|
207
|
+
return { verb, slot: metadata.metadata.method[verb] };
|
|
208
|
+
}
|
|
209
|
+
function collectScriptRefs(metadata) {
|
|
210
|
+
const { slot } = verbSlotOf(metadata);
|
|
211
|
+
const lookups = [];
|
|
212
|
+
const add = (ref) => {
|
|
213
|
+
const r = text(ref);
|
|
214
|
+
if (r && r !== slot.scriptRef && !lookups.includes(r)) {
|
|
215
|
+
lookups.push(r);
|
|
216
|
+
}
|
|
217
|
+
};
|
|
218
|
+
for (const p of slot.parameters ?? []) {
|
|
219
|
+
add(asBag(p.reference).scriptRef);
|
|
220
|
+
}
|
|
221
|
+
for (const f of Object.values(metadata.fields ?? {})) {
|
|
222
|
+
add(asBag(asBag(f).reference).scriptRef);
|
|
223
|
+
}
|
|
224
|
+
return { main: slot.scriptRef, lookups };
|
|
225
|
+
}
|
|
226
|
+
async function readInlineScripts(scriptsDir, refs) {
|
|
227
|
+
const fs = getFileSystem();
|
|
228
|
+
const scripts = {};
|
|
229
|
+
const missing = [];
|
|
230
|
+
for (const ref of refs) {
|
|
231
|
+
const file = fs.path.join(scriptsDir, `${ref}.js`);
|
|
232
|
+
const source = await fs.readFile(file, "utf-8");
|
|
233
|
+
if (source === null || source === undefined) {
|
|
234
|
+
missing.push(file);
|
|
235
|
+
continue;
|
|
236
|
+
}
|
|
237
|
+
scripts[ref] = String(source);
|
|
238
|
+
}
|
|
239
|
+
if (missing.length > 0) {
|
|
240
|
+
throw new InlineActivityError2(`Action script(s) not found:
|
|
241
|
+
- ${missing.join(`
|
|
242
|
+
- `)}`, "Every scriptRef in the metadata — the main action and each lookup reference — needs a <scriptRef>.js in --scripts. Generate the missing script, or fix the scriptRef in the min-file and regenerate.");
|
|
243
|
+
}
|
|
244
|
+
return scripts;
|
|
245
|
+
}
|
|
246
|
+
function buildInlineActivityDefinition(args) {
|
|
247
|
+
const { nodeType, connectorKey, metadata, activityTypeId } = args;
|
|
248
|
+
const { slot } = verbSlotOf(metadata);
|
|
249
|
+
const label = metadata.displayName ?? metadata.name;
|
|
250
|
+
const description = metadata.description ?? "";
|
|
251
|
+
const configuration = {
|
|
252
|
+
connectorKey,
|
|
253
|
+
objectName: metadata.name,
|
|
254
|
+
httpMethod: slot.method,
|
|
255
|
+
activityType: "Curated",
|
|
256
|
+
activitySource: INLINE_ACTIVITY_SOURCE,
|
|
257
|
+
version: INLINE_ACTIVITY_VERSION,
|
|
258
|
+
operation: slot.operation,
|
|
259
|
+
supportsStreaming: false,
|
|
260
|
+
subType: "standard"
|
|
261
|
+
};
|
|
262
|
+
const manifest = {
|
|
263
|
+
nodeType,
|
|
264
|
+
version: INLINE_ACTIVITY_VERSION,
|
|
265
|
+
category: `connector.${connectorKey}`,
|
|
266
|
+
tags: ["connector", "activity", INLINE_ACTIVITY_SOURCE],
|
|
267
|
+
sortOrder: 1,
|
|
268
|
+
supportsErrorHandling: true,
|
|
269
|
+
description,
|
|
270
|
+
display: {
|
|
271
|
+
label,
|
|
272
|
+
description,
|
|
273
|
+
sourceDisplayName: connectorKey
|
|
274
|
+
},
|
|
275
|
+
handleConfiguration: [
|
|
276
|
+
{
|
|
277
|
+
position: "left",
|
|
278
|
+
handles: [
|
|
279
|
+
{
|
|
280
|
+
id: "input",
|
|
281
|
+
type: "target",
|
|
282
|
+
handleType: "input",
|
|
283
|
+
label: ""
|
|
284
|
+
}
|
|
285
|
+
]
|
|
286
|
+
},
|
|
287
|
+
{
|
|
288
|
+
position: "right",
|
|
289
|
+
handles: [
|
|
290
|
+
{
|
|
291
|
+
id: "output",
|
|
292
|
+
type: "source",
|
|
293
|
+
handleType: "output",
|
|
294
|
+
label: ""
|
|
295
|
+
}
|
|
296
|
+
]
|
|
297
|
+
}
|
|
298
|
+
],
|
|
299
|
+
model: {
|
|
300
|
+
type: "bpmn:SendTask",
|
|
301
|
+
serviceType: "Intsvc.ActivityExecution",
|
|
302
|
+
bindings: {
|
|
303
|
+
resource: "Connection",
|
|
304
|
+
resourceKey: "",
|
|
305
|
+
values: [
|
|
306
|
+
{
|
|
307
|
+
name: `${connectorKey} connection`,
|
|
308
|
+
propertyAttribute: "ConnectionId"
|
|
309
|
+
},
|
|
310
|
+
{ name: "FolderKey", propertyAttribute: "FolderKey" }
|
|
311
|
+
]
|
|
312
|
+
},
|
|
313
|
+
context: [
|
|
314
|
+
{ name: "connectorKey", type: "string", value: connectorKey },
|
|
315
|
+
{ name: "operation", type: "string", value: slot.operation },
|
|
316
|
+
{ name: "objectName", type: "string", value: metadata.name },
|
|
317
|
+
{ name: "method", type: "string", value: slot.method },
|
|
318
|
+
{
|
|
319
|
+
name: "connection",
|
|
320
|
+
type: "string",
|
|
321
|
+
value: `<bindings.${connectorKey} connection>`
|
|
322
|
+
},
|
|
323
|
+
{
|
|
324
|
+
name: "folderKey",
|
|
325
|
+
type: "string",
|
|
326
|
+
value: "<bindings.FolderKey>"
|
|
327
|
+
},
|
|
328
|
+
{
|
|
329
|
+
name: "activityConfigurationVersion",
|
|
330
|
+
type: "string",
|
|
331
|
+
value: "v1"
|
|
332
|
+
},
|
|
333
|
+
{
|
|
334
|
+
name: "metadata",
|
|
335
|
+
type: "json",
|
|
336
|
+
body: {
|
|
337
|
+
telemetryData: {
|
|
338
|
+
connectorKey,
|
|
339
|
+
connectorName: label
|
|
340
|
+
},
|
|
341
|
+
inputMetadata: {},
|
|
342
|
+
errorState: { hasError: true }
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
]
|
|
346
|
+
},
|
|
347
|
+
form: {
|
|
348
|
+
id: "connector-properties",
|
|
349
|
+
title: "Connector configuration",
|
|
350
|
+
sections: [
|
|
351
|
+
{
|
|
352
|
+
id: "connector",
|
|
353
|
+
title: "Connector",
|
|
354
|
+
collapsible: true,
|
|
355
|
+
defaultExpanded: true,
|
|
356
|
+
fields: [
|
|
357
|
+
{
|
|
358
|
+
label: "",
|
|
359
|
+
name: "inputs.detail",
|
|
360
|
+
type: "custom",
|
|
361
|
+
component: "dap-config",
|
|
362
|
+
componentProps: {
|
|
363
|
+
connectorDetail: {
|
|
364
|
+
uiPathActivityTypeId: activityTypeId,
|
|
365
|
+
displayName: label,
|
|
366
|
+
description,
|
|
367
|
+
configuration: JSON.stringify(configuration)
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
|
+
}
|
|
371
|
+
]
|
|
372
|
+
}
|
|
373
|
+
]
|
|
374
|
+
},
|
|
375
|
+
inputDefinition: {},
|
|
376
|
+
inputDefaults: {},
|
|
377
|
+
outputDefinition: {
|
|
378
|
+
output: {
|
|
379
|
+
type: "object",
|
|
380
|
+
description: "The return value of the connector.",
|
|
381
|
+
source: "=result.response",
|
|
382
|
+
var: "output"
|
|
383
|
+
}
|
|
384
|
+
},
|
|
385
|
+
debug: { runtime: "bpmnEngine" }
|
|
386
|
+
};
|
|
387
|
+
return manifest;
|
|
388
|
+
}
|
|
389
|
+
async function prepareInlineActivity(nodeType, input) {
|
|
390
|
+
const { connectorKey } = parseInlineActivityNodeType(nodeType);
|
|
391
|
+
const metadata = await readInlineActivityMetadata(input.metadataFile);
|
|
392
|
+
if (metadata.elementKey !== connectorKey) {
|
|
393
|
+
throw new InlineActivityError2(`Node type names connector "${connectorKey}" but the metadata was generated for "${metadata.elementKey}".`, `Use "${INLINE_ACTIVITY_TYPE_PREFIX}${metadata.elementKey}.<activity-slug>", or regenerate the metadata for "${connectorKey}".`);
|
|
394
|
+
}
|
|
395
|
+
const { main, lookups } = collectScriptRefs(metadata);
|
|
396
|
+
const scripts = await readInlineScripts(input.scriptsDir, [
|
|
397
|
+
main,
|
|
398
|
+
...lookups
|
|
399
|
+
]);
|
|
400
|
+
const manifest = buildInlineActivityDefinition({
|
|
401
|
+
nodeType,
|
|
402
|
+
connectorKey,
|
|
403
|
+
metadata,
|
|
404
|
+
activityTypeId: randomUUID()
|
|
405
|
+
});
|
|
406
|
+
return {
|
|
407
|
+
manifest,
|
|
408
|
+
connectorKey,
|
|
409
|
+
configuration: { metadata, scriptRef: main, scripts }
|
|
410
|
+
};
|
|
411
|
+
}
|
|
412
|
+
function getInlineActivityConfiguration(node) {
|
|
413
|
+
const raw = node.inputs?.inlineActivityConfiguration;
|
|
414
|
+
if (!raw || typeof raw !== "object" || Array.isArray(raw)) {
|
|
415
|
+
return;
|
|
416
|
+
}
|
|
417
|
+
return raw;
|
|
418
|
+
}
|
|
419
|
+
function definitionConfigurationOf(definition) {
|
|
420
|
+
const form = asBag(definition.form);
|
|
421
|
+
for (const section of form.sections ?? []) {
|
|
422
|
+
for (const field of asBag(section).fields ?? []) {
|
|
423
|
+
const detail = asBag(asBag(asBag(field).componentProps).connectorDetail);
|
|
424
|
+
if (typeof detail.configuration === "string") {
|
|
425
|
+
return detail.configuration;
|
|
426
|
+
}
|
|
427
|
+
}
|
|
428
|
+
}
|
|
429
|
+
return;
|
|
430
|
+
}
|
|
431
|
+
|
|
432
|
+
// src/services/orchestrator-connection-field.ts
|
|
433
|
+
var ORCHESTRATOR_CONNECTION_PICKER = "orchestrator-connection-picker";
|
|
434
|
+
function findOrchestratorConnectionField(definitions, node) {
|
|
435
|
+
const definition = findNodeDefinition(definitions, node);
|
|
436
|
+
const form = definition?.form;
|
|
437
|
+
for (const section of form?.sections ?? []) {
|
|
438
|
+
for (const field of section.fields ?? []) {
|
|
439
|
+
if (field.name !== "inputs.connectionId" || field.component !== ORCHESTRATOR_CONNECTION_PICKER) {
|
|
440
|
+
continue;
|
|
441
|
+
}
|
|
442
|
+
const props = field.componentProps ?? {};
|
|
443
|
+
if (typeof props.connectorKey === "string" && typeof props.bindingConnectorKey === "string") {
|
|
444
|
+
return {
|
|
445
|
+
connectorKey: props.connectorKey,
|
|
446
|
+
bindingConnectorKey: props.bindingConnectorKey
|
|
447
|
+
};
|
|
448
|
+
}
|
|
449
|
+
}
|
|
450
|
+
}
|
|
451
|
+
return;
|
|
452
|
+
}
|
|
453
|
+
function orchestratorConnectionKey(definitions, node) {
|
|
454
|
+
if (!findOrchestratorConnectionField(definitions, node))
|
|
455
|
+
return;
|
|
456
|
+
const id = node.inputs?.connectionId;
|
|
457
|
+
return typeof id === "string" && id.length > 0 ? id : undefined;
|
|
458
|
+
}
|
|
459
|
+
|
|
460
|
+
// src/services/packaging-utils.ts
|
|
461
|
+
function fileNodesToPackagingNodes(nodes) {
|
|
462
|
+
return nodes.map((node) => ({
|
|
463
|
+
id: node.id,
|
|
464
|
+
type: node.type,
|
|
465
|
+
typeVersion: node.typeVersion ?? "1.0",
|
|
466
|
+
display: node.display,
|
|
467
|
+
inputs: node.inputs,
|
|
468
|
+
outputs: node.outputs,
|
|
469
|
+
...node.model ? { model: node.model } : {}
|
|
470
|
+
}));
|
|
471
|
+
}
|
|
472
|
+
function flowToPackagingNodes(workflow) {
|
|
473
|
+
return fileNodesToPackagingNodes(bindingNodesOf(workflow));
|
|
474
|
+
}
|
|
475
|
+
function isRecord(value) {
|
|
476
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
477
|
+
}
|
|
478
|
+
function toResourceList(value) {
|
|
479
|
+
if (!Array.isArray(value))
|
|
480
|
+
return;
|
|
481
|
+
const resources = value.filter(isRecord);
|
|
482
|
+
return resources.length === value.length ? resources : undefined;
|
|
483
|
+
}
|
|
484
|
+
function normalizePackagingBindingsJson(value) {
|
|
485
|
+
if (!isRecord(value))
|
|
486
|
+
return;
|
|
487
|
+
const resources = toResourceList(value.resources);
|
|
488
|
+
if (!resources)
|
|
489
|
+
return;
|
|
490
|
+
return {
|
|
491
|
+
...value,
|
|
492
|
+
version: typeof value.version === "string" ? value.version : "2.0",
|
|
493
|
+
resources
|
|
494
|
+
};
|
|
495
|
+
}
|
|
496
|
+
function emptyPackagingBindingsJson() {
|
|
497
|
+
return { version: "2.0", resources: [] };
|
|
498
|
+
}
|
|
499
|
+
function mergePackagingBindingsJson(bindingsJsons) {
|
|
500
|
+
const first = bindingsJsons.find((bindingsJson) => bindingsJson !== undefined);
|
|
501
|
+
return {
|
|
502
|
+
...first ?? emptyPackagingBindingsJson(),
|
|
503
|
+
resources: mergeBindingResources2(bindingsJsons.flatMap((bindingsJson) => bindingsJson?.resources ?? []))
|
|
504
|
+
};
|
|
505
|
+
}
|
|
506
|
+
var inlineAgentPackagerLogger = {
|
|
507
|
+
debug: (message) => logger.debug(message),
|
|
508
|
+
info: (message) => logger.info(message),
|
|
509
|
+
warn: (message) => logger.warn(message),
|
|
510
|
+
error: (message) => logger.error(message),
|
|
511
|
+
progress: (message) => logger.info(message),
|
|
512
|
+
log: (message, level) => {
|
|
513
|
+
if (level === "Error" /* Error */)
|
|
514
|
+
logger.error(message);
|
|
515
|
+
else if (level === "Warning" /* Warn */)
|
|
516
|
+
logger.warn(message);
|
|
517
|
+
else if (level === "Debug" /* Debug */)
|
|
518
|
+
logger.debug(message);
|
|
519
|
+
else
|
|
520
|
+
logger.info(message);
|
|
521
|
+
},
|
|
522
|
+
logMessage: (message) => inlineAgentPackagerLogger.log(message.message, message.logLevel)
|
|
523
|
+
};
|
|
524
|
+
async function createInlineAgentContract(fs, agentDir) {
|
|
525
|
+
const outputPath = fs.path.join(fs.env.tmpdir(), `.inline-agent-contract-${crypto.randomUUID()}`);
|
|
526
|
+
await fs.mkdir(outputPath);
|
|
527
|
+
try {
|
|
528
|
+
const built = await buildInlineAgentContract({
|
|
529
|
+
fileSystem: fs,
|
|
530
|
+
logger: inlineAgentPackagerLogger,
|
|
531
|
+
projectPath: agentDir,
|
|
532
|
+
outputPath
|
|
533
|
+
});
|
|
534
|
+
const bindingsJson = normalizePackagingBindingsJson(built.bindingsJson);
|
|
535
|
+
if (!bindingsJson) {
|
|
536
|
+
throw new Error("Agent packager returned an invalid binding contract");
|
|
537
|
+
}
|
|
538
|
+
return { agentJson: built.agentJson, bindingsJson };
|
|
539
|
+
} finally {
|
|
540
|
+
const [cleanupError] = await catchError2(fs.rm(outputPath));
|
|
541
|
+
if (cleanupError) {
|
|
542
|
+
logger.debug(`Could not remove inline-agent contract directory ${outputPath}: ${cleanupError.message}`);
|
|
543
|
+
}
|
|
544
|
+
}
|
|
545
|
+
}
|
|
546
|
+
async function inlineAgentExists(fs, projectDir, source) {
|
|
547
|
+
const agentJsonPath = fs.path.join(projectDir, source, "agent.json");
|
|
548
|
+
return fs.exists(agentJsonPath);
|
|
549
|
+
}
|
|
550
|
+
async function packageInlineAgents(fs, projectDir, nodes) {
|
|
551
|
+
const result = [];
|
|
552
|
+
const seen = new Set;
|
|
553
|
+
for (const node of nodes) {
|
|
554
|
+
if (!isInlineAgentNodeType(node.type))
|
|
555
|
+
continue;
|
|
556
|
+
const source = readInlineAgentSource(node);
|
|
557
|
+
if (!source)
|
|
558
|
+
continue;
|
|
559
|
+
if (!isBareProjectIdSource(source))
|
|
560
|
+
continue;
|
|
561
|
+
if (seen.has(source))
|
|
562
|
+
continue;
|
|
563
|
+
seen.add(source);
|
|
564
|
+
if (!await inlineAgentExists(fs, projectDir, source))
|
|
565
|
+
continue;
|
|
566
|
+
const contract = await createInlineAgentContract(fs, fs.path.join(projectDir, source));
|
|
567
|
+
const inputSchema = contract.agentJson.inputSchema ?? {
|
|
568
|
+
type: "object",
|
|
569
|
+
properties: {}
|
|
570
|
+
};
|
|
571
|
+
const outputSchema = contract.agentJson.outputSchema ?? {
|
|
572
|
+
type: "object",
|
|
573
|
+
properties: {}
|
|
574
|
+
};
|
|
575
|
+
result.push({
|
|
576
|
+
source,
|
|
577
|
+
entryPoint: {
|
|
578
|
+
filePath: `content/${source}/agent.json`,
|
|
579
|
+
uniqueId: contract.agentJson.projectId ?? source,
|
|
580
|
+
type: EntryPointType2.Agent,
|
|
581
|
+
input: inputSchema,
|
|
582
|
+
output: outputSchema,
|
|
583
|
+
displayName: contract.agentJson.name ?? "Agent"
|
|
584
|
+
},
|
|
585
|
+
agentJson: contract.agentJson,
|
|
586
|
+
bindingsJson: contract.bindingsJson
|
|
587
|
+
});
|
|
588
|
+
logger.info(`Packaged inline agent "${source}" for entry-points`);
|
|
589
|
+
}
|
|
590
|
+
return result;
|
|
591
|
+
}
|
|
592
|
+
async function stageInlineAgentPackageFiles(fs, sourceProjectPath, stagingProjectDir, inlineAgents, formatLogMessage) {
|
|
593
|
+
for (const agent of inlineAgents) {
|
|
594
|
+
const srcDir = fs.path.join(sourceProjectPath, agent.source);
|
|
595
|
+
const destDir = fs.path.join(stagingProjectDir, agent.source);
|
|
596
|
+
if (fs.path.resolve(srcDir) !== fs.path.resolve(destDir) && await fs.exists(srcDir)) {
|
|
597
|
+
await fs.copyDirectory(srcDir, destDir);
|
|
598
|
+
}
|
|
599
|
+
const agentBuilderDir = fs.path.join(destDir, ".agent-builder");
|
|
600
|
+
await ensureDirectory(fs, agentBuilderDir);
|
|
601
|
+
await fs.writeFile(fs.path.join(agentBuilderDir, "agent.json"), JSON.stringify({
|
|
602
|
+
...agent.agentJson,
|
|
603
|
+
resources: agent.agentJson.resources ?? [],
|
|
604
|
+
features: agent.agentJson.features ?? []
|
|
605
|
+
}, null, 2));
|
|
606
|
+
await fs.writeFile(fs.path.join(agentBuilderDir, "bindings.json"), `${JSON.stringify(agent.bindingsJson ?? emptyPackagingBindingsJson(), null, 2)}
|
|
607
|
+
`);
|
|
608
|
+
logger.info(formatLogMessage(agent.source));
|
|
609
|
+
}
|
|
610
|
+
}
|
|
611
|
+
function buildInlineAgentDescriptors(nodes) {
|
|
612
|
+
const out = [];
|
|
613
|
+
const seen = new Set;
|
|
614
|
+
for (const node of nodes) {
|
|
615
|
+
if (!isInlineAgentNodeType(node.type))
|
|
616
|
+
continue;
|
|
617
|
+
const source = readInlineAgentSource(node);
|
|
618
|
+
if (!source)
|
|
619
|
+
continue;
|
|
620
|
+
if (seen.has(source))
|
|
621
|
+
continue;
|
|
622
|
+
seen.add(source);
|
|
623
|
+
const label = node.display?.label ?? "Agent";
|
|
624
|
+
out.push({
|
|
625
|
+
name: label,
|
|
626
|
+
agentProjectId: source,
|
|
627
|
+
isConversational: isConversationalOrVoiceAgentNodeType2(node.type),
|
|
628
|
+
entryPointPath: `${source}/agent.json`
|
|
629
|
+
});
|
|
630
|
+
}
|
|
631
|
+
return out;
|
|
632
|
+
}
|
|
633
|
+
async function writePackagingArtifacts(fs, projectDir, projectId, packagingNodes, bindings, variables, bpmnFileName, startEventId, flowFileName, definitions = [], options = {}) {
|
|
634
|
+
const { entryPoints } = await writePackagingArtifactsDetailed(fs, projectDir, projectId, packagingNodes, bindings, variables, bpmnFileName, startEventId, flowFileName, definitions, options);
|
|
635
|
+
return entryPoints;
|
|
636
|
+
}
|
|
637
|
+
async function writePackagingArtifactsDetailed(fs, projectDir, projectId, packagingNodes, bindings, variables, bpmnFileName, startEventId, flowFileName, definitions = [], options = {}) {
|
|
638
|
+
const startNodes = options.entryPointNodes ?? packagingNodes;
|
|
639
|
+
const flowEntryPoints = getEntryPoints2(bpmnFileName, startNodes, variables, definitions, ProjectType2.Flow);
|
|
640
|
+
const entryPoints = [
|
|
641
|
+
...flowEntryPoints,
|
|
642
|
+
...options.additionalEntryPoints ?? []
|
|
643
|
+
];
|
|
644
|
+
await fs.writeFile(fs.path.join(projectDir, "entry-points.json"), `${JSON.stringify(generateEntryPointsJson2(entryPoints), null, 2)}
|
|
645
|
+
`);
|
|
646
|
+
const bindingResources = getBindingResources2(packagingNodes, bindings, definitions);
|
|
647
|
+
const bindingsJson = normalizePackagingBindingsJson(generateBindingsJson2(bindingResources)) ?? emptyPackagingBindingsJson();
|
|
648
|
+
const stagedBindingsJson = mergePackagingBindingsJson([
|
|
649
|
+
bindingsJson,
|
|
650
|
+
...options.additionalBindingsJsons ?? []
|
|
651
|
+
]);
|
|
652
|
+
await fs.writeFile(fs.path.join(projectDir, "bindings_v2.json"), `${JSON.stringify(stagedBindingsJson, null, 2)}
|
|
653
|
+
`);
|
|
654
|
+
const mainEntryPoint = `/${bpmnFileName}#${defaultEntryPointNodeId(startNodes) ?? startEventId}`;
|
|
655
|
+
const operateJson = withRuntimeProfile2(generateOperateJson2(projectId, mainEntryPoint, operateRuntimeOptions(startNodes)), options.profile ?? "Standard" /* Standard */);
|
|
656
|
+
await fs.writeFile(fs.path.join(projectDir, "operate.json"), `${JSON.stringify(operateJson, null, 2)}
|
|
657
|
+
`);
|
|
658
|
+
const packageDescriptorJson = options.packageDescriptorJson ?? {
|
|
659
|
+
$schema: "https://cloud.uipath.com/draft/2024-12/package-descriptor",
|
|
660
|
+
files: {
|
|
661
|
+
"operate.json": "operate.json",
|
|
662
|
+
"entry-points.json": "entry-points.json",
|
|
663
|
+
"bindings.json": "bindings_v2.json",
|
|
664
|
+
[bpmnFileName]: bpmnFileName,
|
|
665
|
+
...flowFileName ? { [flowFileName]: flowFileName } : {}
|
|
666
|
+
}
|
|
667
|
+
};
|
|
668
|
+
await fs.writeFile(fs.path.join(projectDir, "package-descriptor.json"), `${JSON.stringify(packageDescriptorJson, null, 2)}
|
|
669
|
+
`);
|
|
670
|
+
return { entryPoints, bindingsJson: stagedBindingsJson };
|
|
671
|
+
}
|
|
672
|
+
function backfillNodeModelsFromDefinitions(nodes, definitions) {
|
|
673
|
+
if (definitions.length === 0)
|
|
674
|
+
return nodes;
|
|
675
|
+
const definitionByType = new Map;
|
|
676
|
+
for (const def of definitions) {
|
|
677
|
+
if (def?.nodeType)
|
|
678
|
+
definitionByType.set(def.nodeType, def);
|
|
679
|
+
}
|
|
680
|
+
return nodes.map((n) => {
|
|
681
|
+
if (n.model)
|
|
682
|
+
return n;
|
|
683
|
+
const def = definitionByType.get(n.type);
|
|
684
|
+
if (!def?.model)
|
|
685
|
+
return n;
|
|
686
|
+
return { ...n, model: def.model };
|
|
687
|
+
});
|
|
688
|
+
}
|
|
689
|
+
async function regenerateBindingsFile(fs, flowFilePath) {
|
|
690
|
+
const absolutePath = fs.path.resolve(flowFilePath);
|
|
691
|
+
const projectDir = fs.path.dirname(absolutePath);
|
|
692
|
+
const [readErr, read] = await catchError2(readFlowWorkflow2(absolutePath, fs));
|
|
693
|
+
if (readErr) {
|
|
694
|
+
throw new Error(`Failed to read .flow file at ${absolutePath}: ${readErr.message}`);
|
|
695
|
+
}
|
|
696
|
+
const flowData = read.workflow;
|
|
697
|
+
const packagingNodes = backfillNodeModelsFromDefinitions(flowToPackagingNodes(flowData), flowData.definitions ?? []);
|
|
698
|
+
const bindingResources = getBindingResources2(packagingNodes, flowData.bindings ?? [], flowData.definitions ?? []);
|
|
699
|
+
const flowBindingsJson = normalizePackagingBindingsJson(generateBindingsJson2(bindingResources)) ?? emptyPackagingBindingsJson();
|
|
700
|
+
const [agentErr, inlineAgents] = await catchError2(packageInlineAgents(fs, projectDir, allNodesOf(flowData)));
|
|
701
|
+
if (agentErr) {
|
|
702
|
+
logger.warn(`Wrote bindings_v2.json without inline agent tool bindings: ${agentErr.message}`);
|
|
703
|
+
}
|
|
704
|
+
await fs.writeFile(fs.path.join(projectDir, "bindings_v2.json"), `${JSON.stringify(mergePackagingBindingsJson([
|
|
705
|
+
flowBindingsJson,
|
|
706
|
+
...(inlineAgents ?? []).map((agent) => agent.bindingsJson)
|
|
707
|
+
]), null, 2)}
|
|
708
|
+
`);
|
|
709
|
+
}
|
|
710
|
+
// src/services/node-service.ts
|
|
711
|
+
class NodeTypeNotFoundError2 extends Error {
|
|
712
|
+
code = "NodeTypeNotFound";
|
|
713
|
+
instructions;
|
|
714
|
+
constructor(message, instructions) {
|
|
715
|
+
super(message);
|
|
716
|
+
this.name = "NodeTypeNotFoundError";
|
|
717
|
+
this.instructions = instructions;
|
|
718
|
+
}
|
|
719
|
+
}
|
|
720
|
+
|
|
721
|
+
class NodeTypeNotEnabledError2 extends Error {
|
|
722
|
+
code = "NodeTypeNotEnabled";
|
|
723
|
+
instructions;
|
|
724
|
+
constructor(message, instructions) {
|
|
725
|
+
super(message);
|
|
726
|
+
this.name = "NodeTypeNotEnabledError";
|
|
727
|
+
this.instructions = instructions;
|
|
728
|
+
}
|
|
729
|
+
}
|
|
730
|
+
|
|
731
|
+
class SourceRequiredError2 extends Error {
|
|
732
|
+
code = "SourceRequired";
|
|
733
|
+
instructions;
|
|
734
|
+
constructor(message, instructions) {
|
|
735
|
+
super(message);
|
|
736
|
+
this.name = "SourceRequiredError";
|
|
737
|
+
this.instructions = instructions;
|
|
738
|
+
}
|
|
739
|
+
}
|
|
740
|
+
var listNodesInFlow2 = async (filePath) => {
|
|
741
|
+
const { workflow } = await readFlowWorkflow2(filePath);
|
|
742
|
+
const nodes = workflow.nodes.map((n) => ({
|
|
743
|
+
id: n.id,
|
|
744
|
+
type: n.type,
|
|
745
|
+
label: n.display.label ?? "",
|
|
746
|
+
position: n.ui.position
|
|
747
|
+
}));
|
|
748
|
+
return { nodes, count: nodes.length };
|
|
749
|
+
};
|
|
750
|
+
var PROCESS_NODE_PREFIXES = [
|
|
751
|
+
"uipath.core.rpa-workflow.",
|
|
752
|
+
"uipath.agent.resource.tool.process.",
|
|
753
|
+
"uipath.core.agent.",
|
|
754
|
+
"uipath.core.api-workflow."
|
|
755
|
+
];
|
|
756
|
+
function isProcessNode2(manifest) {
|
|
757
|
+
return PROCESS_NODE_PREFIXES.some((prefix) => manifest.nodeType?.startsWith(prefix));
|
|
758
|
+
}
|
|
759
|
+
function isEntityNode2(manifest) {
|
|
760
|
+
return isEntityNodeType(manifest.nodeType);
|
|
761
|
+
}
|
|
762
|
+
function createEntityBindings2(node) {
|
|
763
|
+
const entityConfig = node.inputs?.entityConfig;
|
|
764
|
+
const entityName = entityConfig?.entityName;
|
|
765
|
+
if (typeof entityName !== "string" || entityName === "")
|
|
766
|
+
return [];
|
|
767
|
+
const scopeKey = entityScopeKey(entityConfig);
|
|
768
|
+
if (!scopeKey)
|
|
769
|
+
return [];
|
|
770
|
+
const bindings = [
|
|
771
|
+
createBinding2({
|
|
772
|
+
name: entityName,
|
|
773
|
+
value: entityName,
|
|
774
|
+
resource: "Entity",
|
|
775
|
+
resourceKey: scopeKey,
|
|
776
|
+
propertyAttribute: "name"
|
|
777
|
+
})
|
|
778
|
+
];
|
|
779
|
+
const folderKey = entityConfig?._folderKey;
|
|
780
|
+
if (typeof folderKey === "string" && folderKey !== "") {
|
|
781
|
+
bindings.push(createBinding2({
|
|
782
|
+
name: `${entityName}Folder`,
|
|
783
|
+
value: folderKey,
|
|
784
|
+
resource: "Entity",
|
|
785
|
+
resourceKey: scopeKey,
|
|
786
|
+
propertyAttribute: "folderKey"
|
|
787
|
+
}));
|
|
788
|
+
}
|
|
789
|
+
return bindings;
|
|
790
|
+
}
|
|
791
|
+
async function resolveEntityIdentity2(filePath, node) {
|
|
792
|
+
const entityConfig = node.inputs?.entityConfig;
|
|
793
|
+
const entityName = entityConfig?.entityName;
|
|
794
|
+
if (entityConfig == null || typeof entityName !== "string" || entityName === "") {
|
|
795
|
+
return;
|
|
796
|
+
}
|
|
797
|
+
const entity = await resolveInlineEntity2(getFileSystem(), filePath, entityName);
|
|
798
|
+
if (entity === undefined) {
|
|
799
|
+
return;
|
|
800
|
+
}
|
|
801
|
+
const current = entityScopeKey(entityConfig);
|
|
802
|
+
if (current !== "" && current !== entity.resourceKey) {
|
|
803
|
+
return;
|
|
804
|
+
}
|
|
805
|
+
entityConfig.entityName = entity.name;
|
|
806
|
+
if (current === "") {
|
|
807
|
+
entityConfig._resourceKey = entity.resourceKey;
|
|
808
|
+
entityConfig._folderKey = entity.folderId;
|
|
809
|
+
}
|
|
810
|
+
}
|
|
811
|
+
function resolveProcessTarget2(node, definitions) {
|
|
812
|
+
if (!isProcessNode2({ nodeType: node.type }))
|
|
813
|
+
return;
|
|
814
|
+
let subType = "Process";
|
|
815
|
+
if (definitions) {
|
|
816
|
+
const def = findMatchingDefinition(node.type, node.typeVersion, definitions);
|
|
817
|
+
const model = def?.model;
|
|
818
|
+
const defBindings = model?.bindings;
|
|
819
|
+
if (defBindings?.resourceSubType)
|
|
820
|
+
subType = defBindings.resourceSubType;
|
|
821
|
+
if (defBindings?.resourceKey) {
|
|
822
|
+
return { key: defBindings.resourceKey, subType };
|
|
823
|
+
}
|
|
824
|
+
}
|
|
825
|
+
return { key: extractProcessGuid(node.type), subType };
|
|
826
|
+
}
|
|
827
|
+
function resolveProcessTargetKey(node, definitions) {
|
|
828
|
+
return resolveProcessTarget2(node, definitions)?.key;
|
|
829
|
+
}
|
|
830
|
+
async function writeInlineAgentStepFromAgent(node, filePath, outputsFromInput) {
|
|
831
|
+
const inputs = node.inputs;
|
|
832
|
+
for (const key of Object.keys(inputs)) {
|
|
833
|
+
if (!INLINE_AGENT_STRUCTURAL_INPUT_KEYS.has(key) && !(key === "callContext" && isVoiceAgentNodeType2(node.type))) {
|
|
834
|
+
delete inputs[key];
|
|
835
|
+
}
|
|
836
|
+
}
|
|
837
|
+
const source = inputs.source;
|
|
838
|
+
if (typeof source !== "string" || /[/\\.]/.test(source)) {
|
|
839
|
+
return;
|
|
840
|
+
}
|
|
841
|
+
const fs = getFileSystem();
|
|
842
|
+
const projectRoot = await findFlowProjectRoot(fs, filePath);
|
|
843
|
+
const agent = await agentJsonReader(fs, projectRoot)(source);
|
|
844
|
+
if (agent) {
|
|
845
|
+
const existing = Array.isArray(inputs.agentInputVariables) ? inputs.agentInputVariables : [];
|
|
846
|
+
inputs.agentInputVariables = reconcileInlineAgentInputVariables(existing, agent.inputSchema).variables;
|
|
847
|
+
const metadata = agent.metadata;
|
|
848
|
+
if (!outputsFromInput && inputs.agentOutputVariables !== undefined) {
|
|
849
|
+
inputs.agentOutputVariables = agentOutputVariablesFromSchema(agent.outputSchema, metadata?.isConversational === true);
|
|
850
|
+
}
|
|
851
|
+
}
|
|
852
|
+
}
|
|
853
|
+
function resolveProcessBindingsInContext(node, nameBinding, folderBinding) {
|
|
854
|
+
const model = node.model;
|
|
855
|
+
if (!model?.context)
|
|
856
|
+
return;
|
|
857
|
+
for (const entry of model.context) {
|
|
858
|
+
if (entry.name === "name" && typeof entry.value === "string") {
|
|
859
|
+
entry.default = nameBinding.default;
|
|
860
|
+
entry.value = `=bindings.${nameBinding.id}`;
|
|
861
|
+
} else if (entry.name === "folderPath" && typeof entry.value === "string") {
|
|
862
|
+
entry.default = folderBinding.default;
|
|
863
|
+
entry.value = `=bindings.${folderBinding.id}`;
|
|
864
|
+
}
|
|
865
|
+
}
|
|
866
|
+
}
|
|
867
|
+
var UNRESOLVED_BINDING_PATTERN = /^<bindings\.\w+>$/;
|
|
868
|
+
function ensureProcessBindings2(workflow) {
|
|
869
|
+
const nodes = workflow.nodes;
|
|
870
|
+
const definitions = workflow.definitions ?? [];
|
|
871
|
+
let bindingsCreated = 0;
|
|
872
|
+
for (const node of nodes) {
|
|
873
|
+
if (!isProcessNode2({ nodeType: node.type }))
|
|
874
|
+
continue;
|
|
875
|
+
const nodeModel = node.model;
|
|
876
|
+
const defModel = definitions.find((d) => d.nodeType === node.type)?.model;
|
|
877
|
+
const hasUnresolved = [nodeModel, defModel].some((m) => m?.context?.some((entry) => typeof entry.value === "string" && UNRESOLVED_BINDING_PATTERN.test(entry.value)));
|
|
878
|
+
if (!hasUnresolved)
|
|
879
|
+
continue;
|
|
880
|
+
const definition = definitions.find((d) => d.nodeType === node.type);
|
|
881
|
+
if (!definition)
|
|
882
|
+
continue;
|
|
883
|
+
const [err, bindings] = catchError2(() => createProcessBindings({
|
|
884
|
+
nodeType: node.type,
|
|
885
|
+
model: definition.model
|
|
886
|
+
}));
|
|
887
|
+
if (err) {
|
|
888
|
+
logger.warn(`Skipping binding resolution for node "${node.id}": ${err.message}`);
|
|
889
|
+
continue;
|
|
890
|
+
}
|
|
891
|
+
const { nameBinding, folderBinding } = bindings;
|
|
892
|
+
const beforeCount = workflow.bindings?.length ?? 0;
|
|
893
|
+
addBinding2(workflow, nameBinding);
|
|
894
|
+
addBinding2(workflow, folderBinding);
|
|
895
|
+
const storedBindings = workflow.bindings;
|
|
896
|
+
const storedName = storedBindings.find((b) => b.resourceKey === nameBinding.resourceKey && b.propertyAttribute === nameBinding.propertyAttribute) ?? nameBinding;
|
|
897
|
+
const storedFolder = storedBindings.find((b) => b.resourceKey === folderBinding.resourceKey && b.propertyAttribute === folderBinding.propertyAttribute) ?? folderBinding;
|
|
898
|
+
resolveProcessBindingsInContext(node, storedName, storedFolder);
|
|
899
|
+
if (defModel?.context) {
|
|
900
|
+
for (const entry of defModel.context) {
|
|
901
|
+
if (entry.name === "name" && typeof entry.value === "string" && UNRESOLVED_BINDING_PATTERN.test(entry.value)) {
|
|
902
|
+
entry.default = storedName.default;
|
|
903
|
+
entry.value = `=bindings.${storedName.id}`;
|
|
904
|
+
} else if (entry.name === "folderPath" && typeof entry.value === "string" && UNRESOLVED_BINDING_PATTERN.test(entry.value)) {
|
|
905
|
+
entry.default = storedFolder.default;
|
|
906
|
+
entry.value = `=bindings.${storedFolder.id}`;
|
|
907
|
+
}
|
|
908
|
+
}
|
|
909
|
+
}
|
|
910
|
+
const added = (workflow.bindings?.length ?? 0) - beforeCount;
|
|
911
|
+
bindingsCreated += added;
|
|
912
|
+
logger.info(`Resolved process bindings for node "${node.id}" (${node.type})`);
|
|
913
|
+
}
|
|
914
|
+
if (bindingsCreated > 0) {
|
|
915
|
+
logger.info(`ensureProcessBindings: created ${bindingsCreated} binding(s) for directly-authored nodes`);
|
|
916
|
+
}
|
|
917
|
+
return bindingsCreated;
|
|
918
|
+
}
|
|
919
|
+
var BINDING_REF_PATTERN = /^=bindings\.(.+)$/;
|
|
920
|
+
function collectNodeBindingRefs(node) {
|
|
921
|
+
const refs = new Set;
|
|
922
|
+
const addRef = (value) => {
|
|
923
|
+
if (typeof value !== "string")
|
|
924
|
+
return;
|
|
925
|
+
const match = value.match(BINDING_REF_PATTERN);
|
|
926
|
+
if (match)
|
|
927
|
+
refs.add(match[1]);
|
|
928
|
+
};
|
|
929
|
+
if (node.inputs) {
|
|
930
|
+
const inputs = node.inputs;
|
|
931
|
+
for (const value of Object.values(inputs))
|
|
932
|
+
addRef(value);
|
|
933
|
+
const detail = inputs.detail;
|
|
934
|
+
for (const bucket of REQUEST_BUCKETS) {
|
|
935
|
+
const values = detail?.[bucket];
|
|
936
|
+
if (values !== null && typeof values === "object") {
|
|
937
|
+
for (const value of Object.values(values))
|
|
938
|
+
addRef(value);
|
|
939
|
+
}
|
|
940
|
+
}
|
|
941
|
+
}
|
|
942
|
+
return refs;
|
|
943
|
+
}
|
|
944
|
+
function collectNodeBindingResourceKeys2(node, bindings, definitions) {
|
|
945
|
+
const keys = new Set;
|
|
946
|
+
const processKey = resolveProcessTargetKey(node, definitions);
|
|
947
|
+
if (processKey) {
|
|
948
|
+
keys.add(processKey);
|
|
949
|
+
}
|
|
950
|
+
const inputs = node.inputs;
|
|
951
|
+
if (typeof inputs?.detail?.connectionResourceId === "string") {
|
|
952
|
+
keys.add(inputs.detail.connectionResourceId);
|
|
953
|
+
}
|
|
954
|
+
const fileNodeConnection = orchestratorConnectionKey(definitions, node);
|
|
955
|
+
if (fileNodeConnection) {
|
|
956
|
+
keys.add(fileNodeConnection);
|
|
957
|
+
}
|
|
958
|
+
const entityKey = entityScopeKey(inputs?.entityConfig);
|
|
959
|
+
if (entityKey !== "") {
|
|
960
|
+
keys.add(entityKey);
|
|
961
|
+
}
|
|
962
|
+
const refs = collectNodeBindingRefs(node);
|
|
963
|
+
for (const binding of bindings) {
|
|
964
|
+
if (refs.has(binding.id)) {
|
|
965
|
+
keys.add(binding.resourceKey);
|
|
966
|
+
}
|
|
967
|
+
}
|
|
968
|
+
return keys;
|
|
969
|
+
}
|
|
970
|
+
var addNodeToFlow2 = async (filePath, nodeType, options = {}) => {
|
|
971
|
+
let inline;
|
|
972
|
+
if (options.inlineActivity) {
|
|
973
|
+
inline = await prepareInlineActivity(nodeType, options.inlineActivity);
|
|
974
|
+
} else if (nodeType.startsWith("uipath.connector.custom.")) {
|
|
975
|
+
throw new InlineActivityError2(`Node type "${nodeType}" is a non-catalog activity, which the registry does not carry.`, "Pass --metadata <Name>.json and --scripts <dir> (the files `uip is activities metadata generate` and `script update` produced) so the definition is built locally.");
|
|
976
|
+
}
|
|
977
|
+
let manifest = inline?.manifest ?? null;
|
|
978
|
+
let registryErr;
|
|
979
|
+
if (!manifest) {
|
|
980
|
+
const [err, registryManifest] = await catchError2(getNode2(nodeType));
|
|
981
|
+
manifest = registryManifest ?? null;
|
|
982
|
+
registryErr = err;
|
|
983
|
+
if (err) {
|
|
984
|
+
logger.debug(`Registry node lookup failed for ${nodeType}: ${err.message}`);
|
|
985
|
+
}
|
|
986
|
+
}
|
|
987
|
+
let localErr = null;
|
|
988
|
+
if (!manifest) {
|
|
989
|
+
const [err, localManifest] = await catchError2(getNode2(nodeType, { local: true }));
|
|
990
|
+
manifest = localManifest ?? null;
|
|
991
|
+
if (err) {
|
|
992
|
+
localErr = err;
|
|
993
|
+
logger.warn(`In-solution node lookup failed for ${nodeType}: ${err.message}`);
|
|
994
|
+
}
|
|
995
|
+
}
|
|
996
|
+
if (!manifest && nodeType === DYNAMIC_EXTRACT_NODE_TYPE2) {
|
|
997
|
+
manifest = buildExtractDocumentBuilderNode();
|
|
998
|
+
}
|
|
999
|
+
if (!manifest && (isTenantManifestInvalidError2(registryErr) || isTenantManifestUnavailableError2(registryErr))) {
|
|
1000
|
+
throw registryErr;
|
|
1001
|
+
}
|
|
1002
|
+
if (!manifest) {
|
|
1003
|
+
if (isKnownSdkNodeType2(nodeType)) {
|
|
1004
|
+
throw new NodeTypeNotEnabledError2(`Node type '${nodeType}' is not enabled for this tenant.`, "Ask an admin to enable the feature flag for this node type, " + "or run `uip maestro flow registry list` to see every " + "known type with its `AvailableOnTenant` flag.");
|
|
1005
|
+
}
|
|
1006
|
+
const [, withoutProcessResource] = await catchError2(explainNodeTypeWithoutProcessResource2(nodeType));
|
|
1007
|
+
if (withoutProcessResource) {
|
|
1008
|
+
throw new NodeTypeNotFoundError2(`Node type not found: ${nodeType}. ${withoutProcessResource.message}`, withoutProcessResource.instructions);
|
|
1009
|
+
}
|
|
1010
|
+
const details = [
|
|
1011
|
+
registryErr && `Registry lookup failed: ${registryErr.message}`,
|
|
1012
|
+
localErr && `In-solution lookup failed: ${localErr.message}`
|
|
1013
|
+
].filter(Boolean).join(". ");
|
|
1014
|
+
const hint = details || "If this is an in-solution node, make sure you are running " + "from inside a solution directory (with a .uipx file in CWD, parent, or grandparent).";
|
|
1015
|
+
throw new NodeTypeNotFoundError2(`Node type not found: ${nodeType}. ${hint}`, "Run `uip maestro flow registry search <keyword>` to find the " + "correct node type, or `uip maestro flow registry list` " + "to see every known type (including ones not enabled on this tenant).");
|
|
1016
|
+
}
|
|
1017
|
+
if (manifest.model?.source === true && nodeType !== DYNAMIC_EXTRACT_NODE_TYPE2) {
|
|
1018
|
+
const fromFlag = typeof options.source === "string" && options.source.length > 0;
|
|
1019
|
+
const inputsSourceCandidate = options.inputs?.source;
|
|
1020
|
+
const fromInputs = typeof inputsSourceCandidate === "string" && inputsSourceCandidate.length > 0;
|
|
1021
|
+
if (!fromFlag && !fromInputs) {
|
|
1022
|
+
throw new SourceRequiredError2(`Node type "${nodeType}" requires a source UUID at inputs.source. Pass --source <uuid>.`, "Use the agent's ProjectId (returned by " + '`uip agent init "<flow-dir>" --inline-in-flow`) for inline ' + "agent nodes, or the resource id declared in the parent " + "inline agent's `resources[]` for agent-tool resource nodes. " + '`--input \'{"source":"<uuid>"}\'` is also accepted.');
|
|
1023
|
+
}
|
|
1024
|
+
}
|
|
1025
|
+
const { workflow, refMap } = await readFlowWorkflow2(filePath);
|
|
1026
|
+
if (inline) {
|
|
1027
|
+
const existing = workflow.definitions.find((d) => d.nodeType === manifest.nodeType && d.version === manifest.version);
|
|
1028
|
+
if (existing && definitionConfigurationOf(existing) !== definitionConfigurationOf(manifest)) {
|
|
1029
|
+
throw new InlineActivityError2(`"${nodeType}" is already defined in this flow with different activity metadata.`, "Use a different activity slug for this node type, or remove the existing nodes of this type first so the definition is rebuilt from the new metadata.");
|
|
1030
|
+
}
|
|
1031
|
+
}
|
|
1032
|
+
const existingIds = new Set(workflow.nodes.map((n) => n.id));
|
|
1033
|
+
const existingDefCount = workflow.definitions.length;
|
|
1034
|
+
const { id, displayName } = generateNodeIdAndName2(options.label ?? manifest.display.label, existingIds);
|
|
1035
|
+
const bindingsBefore = workflow.bindings?.length ?? 0;
|
|
1036
|
+
const node = addNode2(workflow, manifest, id, options.position ?? { x: 0, y: 0 }, options.label ?? displayName);
|
|
1037
|
+
const schema = manifest.inputDefinition;
|
|
1038
|
+
if (node.inputs && manifest.inputDefaults === undefined && schema?.type === "object") {
|
|
1039
|
+
for (const schemaKey of Object.keys(schema)) {
|
|
1040
|
+
delete node.inputs[schemaKey];
|
|
1041
|
+
}
|
|
1042
|
+
}
|
|
1043
|
+
let bindingsCreated = 0;
|
|
1044
|
+
if (isProcessNode2(manifest)) {
|
|
1045
|
+
const { nameBinding, folderBinding } = createProcessBindings(manifest);
|
|
1046
|
+
addBinding2(workflow, nameBinding);
|
|
1047
|
+
addBinding2(workflow, folderBinding);
|
|
1048
|
+
const storedBindings = workflow.bindings;
|
|
1049
|
+
const storedName = storedBindings.find((b) => b.resourceKey === nameBinding.resourceKey && b.propertyAttribute === nameBinding.propertyAttribute) ?? nameBinding;
|
|
1050
|
+
const storedFolder = storedBindings.find((b) => b.resourceKey === folderBinding.resourceKey && b.propertyAttribute === folderBinding.propertyAttribute) ?? folderBinding;
|
|
1051
|
+
if (folderBinding.default === "" && storedFolder.default === undefined) {
|
|
1052
|
+
storedFolder.default = "";
|
|
1053
|
+
}
|
|
1054
|
+
resolveProcessBindingsInContext(node, storedName, storedFolder);
|
|
1055
|
+
bindingsCreated = (workflow.bindings?.length ?? 0) - bindingsBefore;
|
|
1056
|
+
}
|
|
1057
|
+
if (options.inputs && Object.keys(options.inputs).length > 0) {
|
|
1058
|
+
node.inputs = { ...node.inputs ?? {}, ...options.inputs };
|
|
1059
|
+
}
|
|
1060
|
+
if (inline) {
|
|
1061
|
+
node.inputs = {
|
|
1062
|
+
...node.inputs ?? {},
|
|
1063
|
+
inlineActivityConfiguration: inline.configuration
|
|
1064
|
+
};
|
|
1065
|
+
}
|
|
1066
|
+
if (isEntityNode2(manifest)) {
|
|
1067
|
+
await resolveEntityIdentity2(filePath, node);
|
|
1068
|
+
for (const entityBinding of createEntityBindings2(node)) {
|
|
1069
|
+
addBinding2(workflow, entityBinding);
|
|
1070
|
+
}
|
|
1071
|
+
bindingsCreated = (workflow.bindings?.length ?? 0) - bindingsBefore;
|
|
1072
|
+
}
|
|
1073
|
+
const manifestModel = manifest.model;
|
|
1074
|
+
if (manifestModel?.source === true) {
|
|
1075
|
+
if (typeof options.source === "string" && options.source.length > 0) {
|
|
1076
|
+
const inputs = node.inputs ?? {};
|
|
1077
|
+
inputs.source = options.source;
|
|
1078
|
+
node.inputs = inputs;
|
|
1079
|
+
}
|
|
1080
|
+
if (nodeType === DYNAMIC_EXTRACT_NODE_TYPE2) {
|
|
1081
|
+
const inputs = node.inputs ?? {};
|
|
1082
|
+
const existingSource = inputs.source;
|
|
1083
|
+
if (typeof existingSource !== "string" || existingSource.length === 0) {
|
|
1084
|
+
inputs.source = crypto.randomUUID();
|
|
1085
|
+
node.inputs = inputs;
|
|
1086
|
+
}
|
|
1087
|
+
}
|
|
1088
|
+
if (node.model) {
|
|
1089
|
+
delete node.model;
|
|
1090
|
+
}
|
|
1091
|
+
if (isInlineAgentNodeType(node.type)) {
|
|
1092
|
+
await writeInlineAgentStepFromAgent(node, filePath, options.inputs?.agentOutputVariables !== undefined);
|
|
1093
|
+
}
|
|
1094
|
+
}
|
|
1095
|
+
if (nodeType === DYNAMIC_EXTRACT_NODE_TYPE2) {
|
|
1096
|
+
const inputs = node.inputs ?? {};
|
|
1097
|
+
if (inputs.schemaDocument === undefined) {
|
|
1098
|
+
inputs.schemaDocument = buildDefaultSchemaDocument();
|
|
1099
|
+
node.inputs = inputs;
|
|
1100
|
+
}
|
|
1101
|
+
}
|
|
1102
|
+
if (nodeType === DYNAMIC_EXTRACT_NODE_TYPE2) {
|
|
1103
|
+
const outputDefinition = manifest.outputDefinition;
|
|
1104
|
+
if (outputDefinition) {
|
|
1105
|
+
const outputs = {};
|
|
1106
|
+
for (const [port, definition] of Object.entries(outputDefinition)) {
|
|
1107
|
+
outputs[port] = {
|
|
1108
|
+
type: definition.type,
|
|
1109
|
+
source: definition.source,
|
|
1110
|
+
var: definition.var ?? port
|
|
1111
|
+
};
|
|
1112
|
+
}
|
|
1113
|
+
node.outputs = outputs;
|
|
1114
|
+
}
|
|
1115
|
+
}
|
|
1116
|
+
if (typeof options.parent === "string" && options.parent.length > 0) {
|
|
1117
|
+
const allNodes = workflow.nodes;
|
|
1118
|
+
if (!allNodes.some((n) => n.id === options.parent)) {
|
|
1119
|
+
throw new Error(`--parent value "${options.parent}" is not an existing node id in this flow. ` + "Run 'uip maestro flow nodes list <file>' to see valid ids.");
|
|
1120
|
+
}
|
|
1121
|
+
node.parentId = options.parent;
|
|
1122
|
+
}
|
|
1123
|
+
await writeFlowWorkflow2(filePath, workflow, refMap);
|
|
1124
|
+
if (isProcessNode2(manifest) || isEntityNode2(manifest)) {
|
|
1125
|
+
const fs = getFileSystem();
|
|
1126
|
+
const [regenErr] = await catchError2(regenerateBindingsFile(fs, filePath));
|
|
1127
|
+
if (regenErr) {
|
|
1128
|
+
logger.warn(`Failed to regenerate bindings_v2.json after adding ${manifest.nodeType}: ${regenErr.message}`);
|
|
1129
|
+
}
|
|
1130
|
+
}
|
|
1131
|
+
const definitionAdded = workflow.definitions.length > existingDefCount;
|
|
1132
|
+
const variableCount = workflow.variables?.nodes?.length ?? 0;
|
|
1133
|
+
const inlineActivity = inline ? {
|
|
1134
|
+
scriptRef: inline.configuration.scriptRef,
|
|
1135
|
+
scripts: Object.keys(inline.configuration.scripts)
|
|
1136
|
+
} : undefined;
|
|
1137
|
+
if (isConnectorNode2(manifest)) {
|
|
1138
|
+
const connInfo = getConnectorInfo2(manifest);
|
|
1139
|
+
return {
|
|
1140
|
+
node,
|
|
1141
|
+
definitionAdded,
|
|
1142
|
+
bindingsCreated,
|
|
1143
|
+
variableCount,
|
|
1144
|
+
connectorInfo: connInfo ?? undefined,
|
|
1145
|
+
...inlineActivity && { inlineActivity }
|
|
1146
|
+
};
|
|
1147
|
+
} else {
|
|
1148
|
+
return {
|
|
1149
|
+
node,
|
|
1150
|
+
definitionAdded,
|
|
1151
|
+
bindingsCreated,
|
|
1152
|
+
variableCount,
|
|
1153
|
+
...inlineActivity && { inlineActivity }
|
|
1154
|
+
};
|
|
1155
|
+
}
|
|
1156
|
+
};
|
|
1157
|
+
function removeConnectedEdges(workflow, nodeId) {
|
|
1158
|
+
const edges = workflow.edges ?? [];
|
|
1159
|
+
const before = edges.length;
|
|
1160
|
+
workflow.edges = edges.filter((e) => e.sourceNodeId !== nodeId && e.targetNodeId !== nodeId);
|
|
1161
|
+
return before - workflow.edges.length;
|
|
1162
|
+
}
|
|
1163
|
+
function subflowNodes(workflow) {
|
|
1164
|
+
return Object.values(workflow.subflows ?? {}).flatMap((entry) => entry?.nodes ?? []);
|
|
1165
|
+
}
|
|
1166
|
+
function removeOrphanedBindings(workflow, deletedNodeKeys, remainingNodes, bindings) {
|
|
1167
|
+
if (deletedNodeKeys.size === 0 || bindings.length === 0)
|
|
1168
|
+
return 0;
|
|
1169
|
+
const defs = workflow.definitions ?? [];
|
|
1170
|
+
const remainingKeys = new Set;
|
|
1171
|
+
for (const node of remainingNodes) {
|
|
1172
|
+
for (const key of collectNodeBindingResourceKeys2(node, bindings, defs)) {
|
|
1173
|
+
remainingKeys.add(key);
|
|
1174
|
+
}
|
|
1175
|
+
}
|
|
1176
|
+
const before = bindings.length;
|
|
1177
|
+
workflow.bindings = bindings.filter((b) => !deletedNodeKeys.has(b.resourceKey) || remainingKeys.has(b.resourceKey));
|
|
1178
|
+
return before - workflow.bindings.length;
|
|
1179
|
+
}
|
|
1180
|
+
function connectorConnectionBindingName(node, definitions) {
|
|
1181
|
+
if (!node.type.startsWith("uipath.connector"))
|
|
1182
|
+
return "";
|
|
1183
|
+
const def = definitions.find((d) => d.nodeType === node.type);
|
|
1184
|
+
const context = def?.model?.context;
|
|
1185
|
+
const connectorKey = context?.find((c) => c.name === "connectorKey")?.value;
|
|
1186
|
+
return typeof connectorKey === "string" && connectorKey.length > 0 ? `${connectorKey} connection` : "";
|
|
1187
|
+
}
|
|
1188
|
+
function removeOrphanedConnectorStub(workflow, deletedNode, remainingNodes, definitions) {
|
|
1189
|
+
const stubName = connectorConnectionBindingName(deletedNode, definitions);
|
|
1190
|
+
if (!stubName)
|
|
1191
|
+
return 0;
|
|
1192
|
+
const stillOwned = remainingNodes.some((n) => connectorConnectionBindingName(n, definitions) === stubName);
|
|
1193
|
+
if (stillOwned)
|
|
1194
|
+
return 0;
|
|
1195
|
+
const bindings = workflow.bindings ?? [];
|
|
1196
|
+
if (bindings.length === 0)
|
|
1197
|
+
return 0;
|
|
1198
|
+
const before = bindings.length;
|
|
1199
|
+
workflow.bindings = bindings.filter((b) => !(b.resource?.toLowerCase() === "connection" && b.propertyAttribute === "ConnectionId" && !b.resourceKey && !b.default && b.name === stubName));
|
|
1200
|
+
return before - workflow.bindings.length;
|
|
1201
|
+
}
|
|
1202
|
+
function removeOrphanedDefinitions(workflow, remainingNodes) {
|
|
1203
|
+
const definitions = workflow.definitions ?? [];
|
|
1204
|
+
const usedKeys = new Set(remainingNodes.map((n) => `${n.type}:${n.typeVersion}`));
|
|
1205
|
+
const before = definitions.length;
|
|
1206
|
+
workflow.definitions = definitions.filter((d) => usedKeys.has(`${d.nodeType}:${d.version}`));
|
|
1207
|
+
return before - workflow.definitions.length;
|
|
1208
|
+
}
|
|
1209
|
+
function removeVariableUpdates(workflow, nodeId) {
|
|
1210
|
+
const variables = workflow.variables;
|
|
1211
|
+
if (!variables?.variableUpdates)
|
|
1212
|
+
return 0;
|
|
1213
|
+
const updates = variables.variableUpdates[nodeId];
|
|
1214
|
+
if (!updates)
|
|
1215
|
+
return 0;
|
|
1216
|
+
const count = updates.length;
|
|
1217
|
+
delete variables.variableUpdates[nodeId];
|
|
1218
|
+
return count;
|
|
1219
|
+
}
|
|
1220
|
+
function removeNodeVariables(workflow, nodeId) {
|
|
1221
|
+
const variables = workflow.variables;
|
|
1222
|
+
if (!variables?.nodes)
|
|
1223
|
+
return 0;
|
|
1224
|
+
const before = variables.nodes.length;
|
|
1225
|
+
variables.nodes = variables.nodes.filter((v) => v.binding.nodeId !== nodeId);
|
|
1226
|
+
return before - variables.nodes.length;
|
|
1227
|
+
}
|
|
1228
|
+
var deleteNodeFromFlow2 = async (filePath, nodeId) => {
|
|
1229
|
+
const { workflow, refMap } = await readFlowWorkflow2(filePath);
|
|
1230
|
+
const nodes = workflow.nodes;
|
|
1231
|
+
const nodeIndex = nodes.findIndex((n) => n.id === nodeId);
|
|
1232
|
+
if (nodeIndex === -1) {
|
|
1233
|
+
const available = nodes.map((n) => n.id).join(", ") || "(none)";
|
|
1234
|
+
throw new Error(`Node not found: "${nodeId}". Available node IDs: ${available}`);
|
|
1235
|
+
}
|
|
1236
|
+
const targetNode = nodes[nodeIndex];
|
|
1237
|
+
const deletedWasProcessNode = isProcessNode2({ nodeType: targetNode.type });
|
|
1238
|
+
const deletedNode = {
|
|
1239
|
+
id: targetNode.id,
|
|
1240
|
+
type: targetNode.type,
|
|
1241
|
+
label: targetNode.display.label ?? "",
|
|
1242
|
+
position: targetNode.ui.position
|
|
1243
|
+
};
|
|
1244
|
+
const bindings = workflow.bindings ?? [];
|
|
1245
|
+
const definitions = workflow.definitions ?? [];
|
|
1246
|
+
const deletedNodeResourceKeys = collectNodeBindingResourceKeys2(targetNode, bindings, definitions);
|
|
1247
|
+
nodes.splice(nodeIndex, 1);
|
|
1248
|
+
const edgesRemoved = removeConnectedEdges(workflow, nodeId);
|
|
1249
|
+
const remainingNodes = [...nodes, ...subflowNodes(workflow)];
|
|
1250
|
+
const bindingsRemoved = removeOrphanedBindings(workflow, deletedNodeResourceKeys, remainingNodes, bindings) + removeOrphanedConnectorStub(workflow, targetNode, remainingNodes, definitions);
|
|
1251
|
+
const definitionsRemoved = removeOrphanedDefinitions(workflow, remainingNodes);
|
|
1252
|
+
const variablesRemoved = removeNodeVariables(workflow, nodeId);
|
|
1253
|
+
const variableUpdatesRemoved = removeVariableUpdates(workflow, nodeId);
|
|
1254
|
+
await writeFlowWorkflow2(filePath, workflow, refMap);
|
|
1255
|
+
if (deletedWasProcessNode || bindingsRemoved > 0) {
|
|
1256
|
+
const fs = getFileSystem();
|
|
1257
|
+
const [regenErr] = await catchError2(regenerateBindingsFile(fs, filePath));
|
|
1258
|
+
if (regenErr) {
|
|
1259
|
+
logger.warn(`Failed to regenerate bindings_v2.json after deleting ${targetNode.type}: ${regenErr.message}`);
|
|
1260
|
+
}
|
|
1261
|
+
}
|
|
1262
|
+
return {
|
|
1263
|
+
deletedNode,
|
|
1264
|
+
edgesRemoved,
|
|
1265
|
+
bindingsRemoved,
|
|
1266
|
+
definitionsRemoved,
|
|
1267
|
+
variablesRemoved,
|
|
1268
|
+
variableUpdatesRemoved
|
|
1269
|
+
};
|
|
1270
|
+
};
|
|
1271
|
+
|
|
1272
|
+
export { REQUEST_BUCKETS, INLINE_ACTIVITY_TYPE_PREFIX, INLINE_ACTIVITY_SOURCE, InlineActivityError2, collectScriptRefs, getInlineActivityConfiguration, findOrchestratorConnectionField, orchestratorConnectionKey, fileNodesToPackagingNodes, flowToPackagingNodes, packageInlineAgents, stageInlineAgentPackageFiles, buildInlineAgentDescriptors, writePackagingArtifacts, writePackagingArtifactsDetailed, regenerateBindingsFile, NodeTypeNotFoundError2, NodeTypeNotEnabledError2, SourceRequiredError2, listNodesInFlow2, isProcessNode2, isEntityNode2, createEntityBindings2, resolveEntityIdentity2, resolveProcessTarget2, ensureProcessBindings2, collectNodeBindingResourceKeys2, addNodeToFlow2, deleteNodeFromFlow2 };
|
|
1273
|
+
|
|
1274
|
+
//# debugId=BEA93E4CFE39CB1C64756E2164756E21
|