@uipath/maestro-tool 1.204.0 → 1.205.0-preview.258

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 (258) hide show
  1. package/README.md +3 -3
  2. package/dist/{DmnFactory-VWZOSZHH-ggnfcqpa.js → DmnFactory-L7MABUC6-qkvfv1cw.js} +143 -98
  3. package/dist/{KieDmnMarshaller-6TTUU5B4-6apscj68.js → KieDmnMarshaller-LGE63WDG-cybersk4.js} +3 -3
  4. package/dist/THIRD-PARTY-NOTICES.md +47 -23
  5. package/dist/{authoring-ed7fgg74.js → authoring-5xyc2bbq.js} +8 -6
  6. package/dist/{authoring-1qn6m2g3.js → authoring-ehed6df3.js} +8 -6
  7. package/dist/{authoring-ex7mq672.js → authoring-rw21p50g.js} +8 -6
  8. package/dist/{binding-service-dj04a6e6.js → binding-service-b2v8y2sb.js} +44 -35
  9. package/dist/{bpmn-action-type-validator-cja8vct2.js → bpmn-action-type-validator-xg4ncg63.js} +2 -2
  10. package/dist/{bpmn-binding-resolver-3v5223kx.js → bpmn-binding-resolver-wz7xk54x.js} +9 -7
  11. package/dist/{bpmn-branch-a25m8bc2.js → bpmn-branch-ywmc5egw.js} +48 -47
  12. package/dist/{bpmn-format-service-64fsaq4j.js → bpmn-format-service-aq8ekvy2.js} +7 -5
  13. package/dist/{bpmn-refresh-service-ytf3ngzm.js → bpmn-refresh-service-gy1ekx3m.js} +10 -8
  14. package/dist/{bpmn-update-metadata-service-jpz5mfk4.js → bpmn-update-metadata-service-rnf421er.js} +7 -5
  15. package/dist/bpmn-validate-service-7e3q83nh.js +16 -0
  16. package/dist/{business-rule-export-j6xxtp5s.js → business-rule-export-xa719ws5.js} +2 -2
  17. package/dist/canvas-notes-xc2ejzqj.js +23 -0
  18. package/dist/{case-api-bxcxbgm9.js → case-api-v64traxv.js} +9 -7
  19. package/dist/case-bindings-service-hwz2h03e.js +434 -0
  20. package/dist/case-debug-solution-projects-xae2d4vj.js +34 -0
  21. package/dist/{case-debug-studio-web-service-kt5efenk.js → case-debug-studio-web-service-5h6djff3.js} +22 -14
  22. package/dist/{case-described-io-service-kn3rvy53.js → case-described-io-service-tap9pk70.js} +41 -11
  23. package/dist/case-event-trigger-bindings-z4q1kzgv.js +20 -0
  24. package/dist/{case-format-service-k8rcv0wp.js → case-format-service-q42ba5pn.js} +6 -4
  25. package/dist/{case-pack-service-92trp8xj.js → case-pack-service-0j9r3cd2.js} +9 -7
  26. package/dist/case-schema-version-zs5qsr1b.js +20 -0
  27. package/dist/{case-shape-reader-ftc4ve13.js → case-shape-reader-14qzcj4v.js} +1 -1
  28. package/dist/{case-splice-service-7n51cpx3.js → case-splice-service-bk6rvr75.js} +60 -11
  29. package/dist/{case-validate-service-c8jcvw85.js → case-validate-service-80p52d8r.js} +134 -46
  30. package/dist/{connector-enrichment-service-ba0vq2sk.js → connector-enrichment-service-9p98gfmc.js} +32 -28
  31. package/dist/{connector-lookup-service-mzfsqb21.js → connector-lookup-service-v39ab3qh.js} +10 -8
  32. package/dist/{connector-service-8yk65k3n.js → connector-service-yz5c6xag.js} +229 -52
  33. package/dist/connector-task-shape-dcb3v2r5.js +14 -0
  34. package/dist/{connector-task-spec-bn3qaa1w.js → connector-task-spec-pvzzenwg.js} +206 -49
  35. package/dist/de-UZI7FJDO-awjpqfz0.js +200 -0
  36. package/dist/{de-MUJPA4EB-dpg7t2rw.js → de-UZI7FJDO-mwvc4cxe.js} +29 -2
  37. package/dist/{de-FGHEJRCI-rv513mfh.js → de-WLW6KWOJ-2qnsqdtw.js} +238 -31
  38. package/dist/debug-conversation-trigger-f4a07w23.js +33 -0
  39. package/dist/{debug-http-client-73errmgs.js → debug-http-client-8t7t701c.js} +7 -5
  40. package/dist/{debug-service-8kjtrm88.js → debug-service-c7y7f216.js} +8 -6
  41. package/dist/{edge-service-7092t84f.js → edge-service-vnn1p29d.js} +18 -13
  42. package/dist/{embedded-file-reader-v8c2yj2a.js → embedded-file-reader-r66242ey.js} +2 -2
  43. package/dist/en-EJCBA3LK-0wb3b1xy.js +146 -0
  44. package/dist/{en-FBPVNKFN-dqt573xn.js → en-EJCBA3LK-dtpdghgj.js} +12 -4
  45. package/dist/{en-BWGKA5OE-1qkvb9rn.js → en-M7GQYBV2-5nfmpnfz.js} +88 -6
  46. package/dist/{enrichment-service-yjv2eb8h.js → enrichment-service-njfr2m2s.js} +52 -15
  47. package/dist/{es-7SE7HX2X-8yh1aj2y.js → es-4UBUTCQA-m1ytpyx2.js} +29 -2
  48. package/dist/es-4UBUTCQA-t7hsackg.js +200 -0
  49. package/dist/{es-KR3ZSNMP-84zphx0x.js → es-5THCNRFN-tqwyrdgy.js} +235 -28
  50. package/dist/{es-MX-2MYFZU7X-3rek4r73.js → es-MX-5RELIXKI-9jhqtddc.js} +29 -2
  51. package/dist/es-MX-5RELIXKI-jtjbcxbb.js +200 -0
  52. package/dist/{es-MX-XXZJGC4R-2mr8jtgm.js → es-MX-TWZBRAXK-gqd9swzw.js} +237 -30
  53. package/dist/filter-engine-7ep90g7f.js +11 -0
  54. package/dist/{flow-api-y70m8n82.js → flow-api-qj89cv18.js} +17 -10
  55. package/dist/{flow-debug-service-f59xnvdf.js → flow-debug-service-a7vd9eht.js} +109 -71
  56. package/dist/{flow-eval-node-target-v1gra12k.js → flow-eval-node-target-fv15zc9f.js} +19 -18
  57. package/dist/flow-eval-run-api-3xt5n21a.js +16 -0
  58. package/dist/{flow-eval-run-service-hmfbng78.js → flow-eval-run-service-keqkwjg1.js} +92 -99
  59. package/dist/{flow-eval-service-7tpvhn9b.js → flow-eval-service-5j1rwx32.js} +169 -416
  60. package/dist/{flow-init-sdk-source-3gxfr40c.js → flow-init-sdk-source-spm577pw.js} +8 -6
  61. package/dist/{flow-init-service-jawbgb3b.js → flow-init-service-pz2b02z9.js} +25 -20
  62. package/dist/{flow-io-2qapk1ge.js → flow-io-0yftj03d.js} +17 -12
  63. package/dist/{flow-migrate-service-3vyydvyp.js → flow-migrate-service-f0cavrsr.js} +18 -13
  64. package/dist/{flow-pack-service-ypbwn9p1.js → flow-pack-service-seegwatd.js} +59 -45
  65. package/dist/{flow-validate-service-6ra3j72r.js → flow-validate-service-hgswxecb.js} +198 -93
  66. package/dist/{fr-Y6NPVODW-8vr1ja4b.js → fr-CERONSRC-edpxhbmb.js} +237 -30
  67. package/dist/{fr-MDFKNZ4C-h4a122k9.js → fr-VBM5WRC2-63z7w4mh.js} +29 -2
  68. package/dist/fr-VBM5WRC2-707ha692.js +200 -0
  69. package/dist/{governance-fetcher-09dgr70s.js → governance-fetcher-w11mhrn6.js} +8 -6
  70. package/dist/{headless-7rs6g9wg.js → headless-z9enfh9f.js} +4 -4
  71. package/dist/hitPolicyResult-CGCR73CW-tvmbx1r7.js +66 -0
  72. package/dist/{hitl-service-pc3xwzxh.js → hitl-service-zsnxqkhb.js} +17 -12
  73. package/dist/{index-48tf2e7y.js → index-1a83vhkx.js} +59 -35
  74. package/dist/{index-jmy02p6v.js → index-3366ft04.js} +44 -6
  75. package/dist/{index-wmffgzmr.js → index-5dxh9z60.js} +21751 -11098
  76. package/dist/{index-vj0f8thg.js → index-91v7sjfs.js} +7 -5
  77. package/dist/{index-cpgb4hp8.js → index-d60j7q07.js} +8 -6
  78. package/dist/{index-vhm7bexy.js → index-da0zh33m.js} +8 -6
  79. package/dist/{index-1htnjt3c.js → index-ewv0axs9.js} +1087 -213
  80. package/dist/index-f3pbfe53.js +67 -0
  81. package/dist/{index-ng2f77my.js → index-fyc0k5dd.js} +985 -617
  82. package/dist/{index-n7n2d0tb.js → index-gjg7tpcx.js} +66 -2230
  83. package/dist/index-gmkec7es.js +29 -0
  84. package/dist/{index-3bv3wtc0.js → index-n37fqnh7.js} +6 -5
  85. package/dist/{index-hhsf00x8.js → index-ngs0a2he.js} +1 -1
  86. package/dist/index-s6q9xjhw.js +25 -0
  87. package/dist/{index-j2r3jb6c.js → index-xq6ajhgq.js} +2 -2
  88. package/dist/index.js +2 -2
  89. package/dist/init-entry-points-g4za9kc0.js +102 -0
  90. package/dist/inline-entity-resolver-nzfs8hb6.js +46 -0
  91. package/dist/input-reader-3250qtv2.js +15 -0
  92. package/dist/input-reader-3398edew.js +15 -0
  93. package/dist/{ja-UTQEAP34-8e0q6swp.js → ja-43QL7CGO-c3q8gre9.js} +29 -2
  94. package/dist/ja-43QL7CGO-h6qfxfay.js +200 -0
  95. package/dist/{ja-Q5PXKJ2V-p4msxzjd.js → ja-U2MCNHGT-gz0ap1jk.js} +235 -28
  96. package/dist/{known-types-3dm8xfd0.js → known-types-g1bvvvcw.js} +5 -5
  97. package/dist/ko-TLL6Z6CD-ag6gjynr.js +200 -0
  98. package/dist/{ko-AXCHW2OK-askct7f6.js → ko-TLL6Z6CD-wrt3n8a9.js} +29 -2
  99. package/dist/{ko-AYBDSRZG-41mdmsg1.js → ko-XAUYQWDR-zp81gjp4.js} +237 -30
  100. package/dist/localSolutionDiscovery-3fs774b8.js +17 -0
  101. package/dist/{maestro-automate-entry-4qg1z689.js → maestro-automate-entry-wycktqqt.js} +2 -2
  102. package/dist/{maestro-debug-service-c81w1wrx.js → maestro-debug-service-5edvsets.js} +17 -15
  103. package/dist/{maestro-pack-service-9qbtap5h.js → maestro-pack-service-hpvmq8f9.js} +9 -7
  104. package/dist/migration-diagnosis-5tftr979.js +99 -0
  105. package/dist/{node-epyxn4nd.js → node-5g80as4s.js} +29 -15
  106. package/dist/node-service-gsq162p5.js +101 -0
  107. package/dist/{node-strategy-5pz40tee.js → node-strategy-v442hwgd.js} +1 -1
  108. package/dist/node-sync-service-qxhh9e5m.js +65 -0
  109. package/dist/out-target-666eg2kf.js +115 -0
  110. package/dist/{packager-tool-yphr25e9.js → packager-tool-0jn0my4b.js} +4 -2
  111. package/dist/packager-tool-0z498fh0.js +331 -0
  112. package/dist/{packager-tool-j6q8v3kc.js → packager-tool-1q0ee9ht.js} +5 -4
  113. package/dist/packager-tool-20592jhn.js +74 -0
  114. package/dist/{packager-tool-zvpkw29f.js → packager-tool-212khq09.js} +538 -16
  115. package/dist/{packager-tool-7msx23gd.js → packager-tool-2qywkm61.js} +13 -2
  116. package/dist/{packager-tool-b4t0wt7a.js → packager-tool-3kx2vrwn.js} +12 -13
  117. package/dist/{packager-tool-a0f48rfb.js → packager-tool-42xfgd4y.js} +6 -24
  118. package/dist/{packager-tool-myvay41d.js → packager-tool-57bbfe26.js} +3 -3
  119. package/dist/{packager-tool-vte7g48a.js → packager-tool-5hnx28q0.js} +5 -3
  120. package/dist/{packager-tool-xd3rq6k0.js → packager-tool-629qqbfp.js} +2 -2
  121. package/dist/packager-tool-6g510cab.js +1178 -0
  122. package/dist/packager-tool-6sm17vbx.js +336 -0
  123. package/dist/{packager-tool-yy101ck2.js → packager-tool-6tthp3g5.js} +52 -32
  124. package/dist/{packager-tool-d88rqwk8.js → packager-tool-6z1hsm2h.js} +13 -5
  125. package/dist/packager-tool-7hw344bt.js +107 -0
  126. package/dist/{packager-tool-6xrzgn0z.js → packager-tool-7vh4gasn.js} +1 -1
  127. package/dist/packager-tool-7ym4rqd1.js +153 -0
  128. package/dist/packager-tool-8p3ymd4v.js +14 -0
  129. package/dist/{packager-tool-kme3q8xv.js → packager-tool-8tv6dvs5.js} +18 -8
  130. package/dist/{packager-tool-c94w8xmz.js → packager-tool-9c2hte0h.js} +16110 -13031
  131. package/dist/{packager-tool-npr79108.js → packager-tool-ajhgr4bs.js} +51 -8
  132. package/dist/{packager-tool-8pydv61j.js → packager-tool-ajth6af3.js} +588 -16
  133. package/dist/{packager-tool-nct4k0y8.js → packager-tool-arbc078z.js} +280 -416
  134. package/dist/{packager-tool-k0bc2f6w.js → packager-tool-b84rs07t.js} +137 -45
  135. package/dist/{packager-tool-4tf3tq1b.js → packager-tool-bd7t6p8y.js} +6 -4
  136. package/dist/{packager-tool-q02t6n13.js → packager-tool-bhhym40d.js} +26 -3
  137. package/dist/packager-tool-bttxjdhx.js +94 -0
  138. package/dist/packager-tool-c4n4m87w.js +52 -0
  139. package/dist/{packager-tool-8xyea2av.js → packager-tool-cc2q603y.js} +2 -3
  140. package/dist/{packager-tool-8yjmkys9.js → packager-tool-cza49qc1.js} +1681 -459
  141. package/dist/{packager-tool-5jb06280.js → packager-tool-d1kd88zq.js} +1 -1
  142. package/dist/{packager-tool-w3d2891y.js → packager-tool-dpp8z5q3.js} +8 -5
  143. package/dist/{packager-tool-wbtykfb2.js → packager-tool-dzd3y9p0.js} +2 -2
  144. package/dist/{packager-tool-rs4cgyy5.js → packager-tool-f6bh7bsm.js} +9 -10
  145. package/dist/{packager-tool-83hg21mr.js → packager-tool-f7zn3gsf.js} +6 -6
  146. package/dist/{packager-tool-mtpztxtc.js → packager-tool-fwfh4zz7.js} +2 -1
  147. package/dist/packager-tool-g2b0zqch.js +217 -0
  148. package/dist/{packager-tool-xdxr3ync.js → packager-tool-hdxtgckw.js} +11 -1
  149. package/dist/{packager-tool-gtzw8sw4.js → packager-tool-jexxh6qf.js} +51 -6
  150. package/dist/{packager-tool-zq25fdcg.js → packager-tool-jt51hwvr.js} +5 -5
  151. package/dist/packager-tool-k7n4sf7v.js +16 -0
  152. package/dist/{packager-tool-fgaphqq0.js → packager-tool-kd0whk4p.js} +1 -1
  153. package/dist/{packager-tool-3t417qyw.js → packager-tool-ktnfjmbs.js} +6 -6
  154. package/dist/packager-tool-kvp4ttef.js +307 -0
  155. package/dist/packager-tool-m1901c0c.js +1256 -0
  156. package/dist/packager-tool-mgcz986r.js +143 -0
  157. package/dist/{packager-tool-8xhjr5ya.js → packager-tool-mrskd7mn.js} +1 -1
  158. package/dist/{packager-tool-5s7249f4.js → packager-tool-ms1smy5t.js} +1 -1
  159. package/dist/{packager-tool-kveaemqp.js → packager-tool-msecps3h.js} +74 -47
  160. package/dist/packager-tool-n90231c7.js +2 -0
  161. package/dist/{packager-tool-ajjpgh1s.js → packager-tool-nkbz7fsb.js} +161 -83
  162. package/dist/packager-tool-nsh0qg9g.js +40 -0
  163. package/dist/{packager-tool-7q6z6npd.js → packager-tool-pcvhcn2k.js} +93 -11
  164. package/dist/packager-tool-qrs1525h.js +69 -0
  165. package/dist/packager-tool-qs3gymeb.js +92 -0
  166. package/dist/{packager-tool-wf95q0fn.js → packager-tool-r6a4pjjh.js} +32 -13
  167. package/dist/{packager-tool-2wbgdx7c.js → packager-tool-rcx6mwf1.js} +5 -5
  168. package/dist/{packager-tool-zbrda9sn.js → packager-tool-rk25wp3c.js} +1 -1
  169. package/dist/{packager-tool-nase5ajk.js → packager-tool-rp7pny4t.js} +19 -5
  170. package/dist/packager-tool-s695j0qj.js +2 -0
  171. package/dist/packager-tool-s7c0dg22.js +1117 -0
  172. package/dist/{case-bindings-service-hpz8w81a.js → packager-tool-s7frnjqb.js} +20 -233
  173. package/dist/{packager-tool-2k0hp4st.js → packager-tool-sb08yxk6.js} +2 -2
  174. package/dist/{packager-tool-b39nrh8y.js → packager-tool-sga4h8yj.js} +5 -6
  175. package/dist/packager-tool-sm8ertv4.js +9 -0
  176. package/dist/{packager-tool-ts5t1nmn.js → packager-tool-sxqtxw0e.js} +15 -10
  177. package/dist/packager-tool-t4zrz5gd.js +18 -0
  178. package/dist/{packager-tool-pp11j8zp.js → packager-tool-t79p62kr.js} +3 -2
  179. package/dist/{packager-tool-ps84n76y.js → packager-tool-tgh9btcq.js} +2 -2
  180. package/dist/{packager-tool-x2py933t.js → packager-tool-tzc6xsp3.js} +1802 -378
  181. package/dist/packager-tool-v5ft7109.js +35 -0
  182. package/dist/{packager-tool-rkv04anh.js → packager-tool-vv9cf7n5.js} +12 -56
  183. package/dist/{packager-tool-z1qbc0qf.js → packager-tool-wv85dhy2.js} +2 -8
  184. package/dist/{packager-tool-znhjsec2.js → packager-tool-wwbk750c.js} +10804 -25507
  185. package/dist/packager-tool-xj0agqpk.js +11 -0
  186. package/dist/{packager-tool-t2xr2f9r.js → packager-tool-xqghssg3.js} +1 -1
  187. package/dist/{packager-tool-ma2ra4pe.js → packager-tool-xr5pkebd.js} +6 -6
  188. package/dist/packager-tool-y4tyghzf.js +26 -0
  189. package/dist/{packager-tool-9bt3hs56.js → packager-tool-y57r93yz.js} +721 -90
  190. package/dist/packager-tool-ygdbhb2b.js +62 -0
  191. package/dist/{packager-tool-v99ygh9f.js → packager-tool-yn33pw57.js} +124 -58
  192. package/dist/packager-tool-yp84p93n.js +41 -0
  193. package/dist/{packager-tool-yv10w46z.js → packager-tool-zgm0r4yp.js} +57 -205
  194. package/dist/packager-tool.js +26 -17
  195. package/dist/{project-artifacts-ygsyzgbk.js → project-artifacts-tedh0mf8.js} +1 -1
  196. package/dist/{project-validator-ndx5f8vg.js → project-validator-njsprtzv.js} +5 -4
  197. package/dist/{pt-BR-TKHNHMET-sn91xyq0.js → pt-BR-GNQNAAZ2-xadharv4.js} +237 -30
  198. package/dist/{pt-BR-Y6K6XHXK-mp3hwhw1.js → pt-BR-USP2T7GD-pedn77m1.js} +29 -2
  199. package/dist/pt-BR-USP2T7GD-rppy42ym.js +200 -0
  200. package/dist/{pt-3DIO5QWG-59b3f4bc.js → pt-RMIAKZB4-67enhx3m.js} +29 -2
  201. package/dist/pt-RMIAKZB4-t80exmp7.js +200 -0
  202. package/dist/{pt-ROXU257Y-2f6bxev4.js → pt-TO2DARY2-ftcce1bv.js} +237 -30
  203. package/dist/{resolved-check-r83pjq9y.js → resolved-check-8a1cr6j2.js} +1 -1
  204. package/dist/{resourcesSyncService-9b5nzx36.js → resourcesSyncService-rcbw245w.js} +43 -180
  205. package/dist/ro-GHOBYW2S-4zevc9dy.js +200 -0
  206. package/dist/{ro-BWR3ONRR-vzx3hy8a.js → ro-GHOBYW2S-mhnqsgaa.js} +29 -2
  207. package/dist/{ro-AVAWPKOO-b89pw79r.js → ro-WUYJV6OW-a8d9qy1n.js} +235 -28
  208. package/dist/ru-WBLQ5B2U-dpqvtfwr.js +10 -0
  209. package/dist/{sdd-convert-service-am4cs6zq.js → sdd-convert-service-btj95r5z.js} +690 -447
  210. package/dist/{sdd-lookup-12hfwqjq.js → sdd-lookup-x3fh6svg.js} +6 -4
  211. package/dist/{sdd-resolve-service-e56wtgxt.js → sdd-resolve-service-pzsm3mkz.js} +37 -10
  212. package/dist/sdd-resolve-siblings-wzhvhar8.js +57 -0
  213. package/dist/{shared-utils-611ah3tq.js → shared-utils-w643sejd.js} +6 -4
  214. package/dist/{solution-auth-kddmbm0p.js → solution-auth-30yycqtv.js} +3 -3
  215. package/dist/solution-discovery-pavd4zeb.js +47 -0
  216. package/dist/{strict-case-rules-pn3ypd97.js → strict-case-rules-vnyr3b3k.js} +3 -2
  217. package/dist/{strict-entry-points-a2cya540.js → strict-entry-points-xrddz82q.js} +33 -1
  218. package/dist/{strict-sdd-audit-nc7dk2hy.js → strict-sdd-audit-8deegzad.js} +11 -7
  219. package/dist/task-type-declaration-re9ba03j.js +46 -0
  220. package/dist/{tidy-service-thmayk2h.js → tidy-service-mepxtxqm.js} +144 -39
  221. package/dist/{tool-z7q74wa4.js → tool-13vrxcqw.js} +313 -123
  222. package/dist/{tool-rmcqxt09.js → tool-x8dmgc2y.js} +476 -339
  223. package/dist/tool.js +2 -2
  224. package/dist/{tr-5IIHSFW5-hw4cewew.js → tr-GDTLECMM-k5fhmq13.js} +29 -2
  225. package/dist/tr-GDTLECMM-kngksm3r.js +200 -0
  226. package/dist/{tr-JMIP7ZSL-c39b6pe4.js → tr-M3F5A6AU-bb0tg39m.js} +235 -28
  227. package/dist/{trigger-enrichment-service-fw97esz9.js → trigger-enrichment-service-pc8ecypw.js} +34 -30
  228. package/dist/trigger-entry-point-id-819hnfnn.js +15 -0
  229. package/dist/{variable-service-3gywh851.js → variable-service-8v0b9d66.js} +17 -12
  230. package/dist/{wait-for-flow-job-wdcjjk6p.js → wait-for-flow-job-5rjxh65w.js} +14 -11
  231. package/dist/{zh-CN-IFFXSEJS-9wm9gmrv.js → zh-CN-C5G4PC7C-ds9gkptg.js} +235 -28
  232. package/dist/zh-CN-I5D7WHBD-ge92tbx9.js +200 -0
  233. package/dist/{zh-CN-R2KU4U5L-tc1hat59.js → zh-CN-I5D7WHBD-sr5h0a98.js} +29 -2
  234. package/dist/{zh-TW-GNKMELBF-j674515r.js → zh-TW-2AVLM723-288pkc1z.js} +29 -2
  235. package/dist/zh-TW-2AVLM723-xsmap3gk.js +200 -0
  236. package/dist/{zh-TW-IYBNYAMG-8727c7v2.js → zh-TW-62HZIG6O-787kdwex.js} +234 -27
  237. package/package.json +2 -2
  238. package/dist/bpmn-validate-service-tanm0n47.js +0 -14
  239. package/dist/debug-conversation-trigger-zbxp49z7.js +0 -46
  240. package/dist/flow-eval-run-api-zg951w2f.js +0 -15
  241. package/dist/hitPolicyResult-4WDHTX4A-zpjwpxn1.js +0 -69
  242. package/dist/index-03h6hq69.js +0 -200
  243. package/dist/input-reader-sce4dejb.js +0 -13
  244. package/dist/input-reader-tf6xyfvt.js +0 -13
  245. package/dist/migration-diagnosis-fzj426fa.js +0 -71
  246. package/dist/node-service-3j6w3z2k.js +0 -89
  247. package/dist/node-sync-service-q7dsv2p0.js +0 -43
  248. package/dist/out-target-498z06v5.js +0 -72
  249. package/dist/packager-tool-0g6ktcsq.js +0 -32
  250. package/dist/packager-tool-3mvr6njb.js +0 -305
  251. package/dist/packager-tool-521x949f.js +0 -32
  252. package/dist/packager-tool-64zypey6.js +0 -521
  253. package/dist/packager-tool-7t0xj5pz.js +0 -64
  254. package/dist/packager-tool-j836z6mq.js +0 -208
  255. package/dist/packager-tool-p7eactax.js +0 -267
  256. package/dist/packager-tool-xjtv580j.js +0 -13
  257. package/dist/packager-tool-zm7thgdg.js +0 -456
  258. /package/dist/{localization-p76prk3f.js → localization-d151bzb1.js} +0 -0
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  getSolutionAuthContext
3
- } from "./packager-tool-zbrda9sn.js";
3
+ } from "./packager-tool-rk25wp3c.js";
4
4
  import {
5
5
  JsonSerializerFactory,
6
6
  JsonSerializerNames,
@@ -13,10 +13,10 @@ import {
13
13
  import {
14
14
  UsersApi,
15
15
  createApiClient
16
- } from "./packager-tool-znhjsec2.js";
16
+ } from "./packager-tool-wwbk750c.js";
17
17
  import {
18
18
  getLoginStatusAsync
19
- } from "./packager-tool-v99ygh9f.js";
19
+ } from "./packager-tool-yn33pw57.js";
20
20
  import"./packager-tool-0gctz400.js";
21
21
  import"./packager-tool-qa9gftnj.js";
22
22
  import"./packager-tool-yc4kw997.js";
@@ -24,21 +24,24 @@ import {
24
24
  findSolutionFileUpward,
25
25
  normalizeProjectType,
26
26
  toPortableRelativePath
27
- } from "./packager-tool-j6q8v3kc.js";
27
+ } from "./packager-tool-1q0ee9ht.js";
28
28
  import {
29
29
  extractErrorMessage,
30
30
  logger
31
- } from "./packager-tool-yv10w46z.js";
32
- import"./packager-tool-nase5ajk.js";
31
+ } from "./packager-tool-zgm0r4yp.js";
32
+ import"./packager-tool-6sm17vbx.js";
33
+ import"./packager-tool-rp7pny4t.js";
33
34
  import"./packager-tool-nkrmjr3a.js";
34
35
  import {
35
36
  getFileSystem
36
- } from "./packager-tool-xdxr3ync.js";
37
+ } from "./packager-tool-hdxtgckw.js";
37
38
  import"./packager-tool-yvcrdbgp.js";
38
39
  import {
39
- catchError,
40
40
  isGuid
41
- } from "./packager-tool-z1qbc0qf.js";
41
+ } from "./packager-tool-sm8ertv4.js";
42
+ import {
43
+ catchError
44
+ } from "./packager-tool-wv85dhy2.js";
42
45
  import {
43
46
  __commonJS,
44
47
  __require,
@@ -2477,6 +2480,19 @@ class NullSecretsProvider {
2477
2480
  }
2478
2481
  }
2479
2482
 
2483
+ // ../../node_modules/@uipath/resource-builder-sdk/dist/providers/feature-flag-provider.js
2484
+ class NullFeatureFlagProvider {
2485
+ getBool(_featureFlagName, defaultValue) {
2486
+ return defaultValue ?? false;
2487
+ }
2488
+ getInt(_featureFlagName, defaultValue) {
2489
+ return defaultValue ?? 0;
2490
+ }
2491
+ getString(_featureFlagName, defaultValue) {
2492
+ return defaultValue ?? "";
2493
+ }
2494
+ }
2495
+
2480
2496
  // ../../node_modules/@uipath/resource-builder-sdk/dist/exceptions/timeout-exception.js
2481
2497
  class TimeoutException extends Error {
2482
2498
  constructor(message, timeoutMs) {
@@ -2631,10 +2647,12 @@ function withFileOperationTimeout2(provider, timeoutMs) {
2631
2647
  // ../../node_modules/@uipath/resource-builder-sdk/dist/solution/solution-context-options.js
2632
2648
  var DEFAULT_SOLUTION_CONTEXT_OPTIONS = {
2633
2649
  lockTimeoutMs: 30000,
2634
- fileOperationTimeoutMs: 30000
2650
+ fileOperationTimeoutMs: 30000,
2651
+ maxDegreeOfParallelism: 1
2635
2652
  };
2636
2653
  var SOLUTION_CONTEXT_TIMEOUT_STORAGE_KEY = "SOL_RB_SOLUTION_CONTEXT_TIMEOUT_MS";
2637
2654
  var FILE_OPERATION_TIMEOUT_STORAGE_KEY = "SOL_RB_FILE_OPERATION_TIMEOUT_MS";
2655
+ var MAX_DEGREE_OF_PARALLELISM_STORAGE_KEY = "SOL_RB_MAX_DEGREE_OF_PARALLELISM";
2638
2656
  function resolveTimeoutMs(storageKey, configured, fallback) {
2639
2657
  const override = readTimeoutOverrideMs(storageKey);
2640
2658
  if (override !== undefined)
@@ -2647,10 +2665,33 @@ function resolveLockTimeoutMs(options) {
2647
2665
  function resolveFileOperationTimeoutMs(options) {
2648
2666
  return resolveTimeoutMs(FILE_OPERATION_TIMEOUT_STORAGE_KEY, options?.fileOperationTimeoutMs, DEFAULT_SOLUTION_CONTEXT_OPTIONS.fileOperationTimeoutMs);
2649
2667
  }
2668
+ function isValidDegreeOfParallelism(value) {
2669
+ return typeof value == "number" && Number.isInteger(value) && value > 0;
2670
+ }
2671
+ function resolveMaxDegreeOfParallelism(options) {
2672
+ const override = readDegreeOfParallelismOverride(MAX_DEGREE_OF_PARALLELISM_STORAGE_KEY);
2673
+ if (override !== undefined)
2674
+ return override;
2675
+ return isValidDegreeOfParallelism(options?.maxDegreeOfParallelism) ? options.maxDegreeOfParallelism : DEFAULT_SOLUTION_CONTEXT_OPTIONS.maxDegreeOfParallelism;
2676
+ }
2677
+ function readDegreeOfParallelismOverride(storageKey) {
2678
+ try {
2679
+ if ("u" < typeof localStorage)
2680
+ return;
2681
+ const raw = localStorage.getItem(storageKey);
2682
+ if (raw === null || raw.trim() === "")
2683
+ return;
2684
+ const parsed = Number(raw);
2685
+ return isValidDegreeOfParallelism(parsed) ? parsed : undefined;
2686
+ } catch {
2687
+ return;
2688
+ }
2689
+ }
2650
2690
  function mergeSolutionContextOptions(options) {
2651
2691
  return {
2652
2692
  lockTimeoutMs: isValidTimeoutMs(options?.lockTimeoutMs) ? options.lockTimeoutMs : DEFAULT_SOLUTION_CONTEXT_OPTIONS.lockTimeoutMs,
2653
- fileOperationTimeoutMs: isValidTimeoutMs(options?.fileOperationTimeoutMs) ? options.fileOperationTimeoutMs : DEFAULT_SOLUTION_CONTEXT_OPTIONS.fileOperationTimeoutMs
2693
+ fileOperationTimeoutMs: isValidTimeoutMs(options?.fileOperationTimeoutMs) ? options.fileOperationTimeoutMs : DEFAULT_SOLUTION_CONTEXT_OPTIONS.fileOperationTimeoutMs,
2694
+ maxDegreeOfParallelism: isValidDegreeOfParallelism(options?.maxDegreeOfParallelism) ? options.maxDegreeOfParallelism : DEFAULT_SOLUTION_CONTEXT_OPTIONS.maxDegreeOfParallelism
2654
2695
  };
2655
2696
  }
2656
2697
 
@@ -3441,6 +3482,16 @@ function getRootFolder(solution) {
3441
3482
  }
3442
3483
 
3443
3484
  // ../../node_modules/@uipath/resource-builder-sdk/dist/solution/multi-file-solution-definition-provider.js
3485
+ function nowMs() {
3486
+ return globalThis.performance?.now?.() ?? Date.now();
3487
+ }
3488
+ function round1(ms) {
3489
+ return Math.round(10 * ms) / 10;
3490
+ }
3491
+ function cancellationError(signal) {
3492
+ return signal?.reason instanceof OperationCancelledException ? signal.reason : new OperationCancelledException;
3493
+ }
3494
+
3444
3495
  class MultiFileSolutionDefinitionProvider {
3445
3496
  get caseInsensitiveSerializer() {
3446
3497
  if (!this._caseInsensitiveSerializer)
@@ -3458,137 +3509,344 @@ class MultiFileSolutionDefinitionProvider {
3458
3509
  }
3459
3510
  async readAsync(context, cancellationToken) {
3460
3511
  this.logger.info("Reading multi-file solution definition for solution %s", context.path);
3461
- const solutionKey = this.getSolutionKey(context);
3462
- const fileStorageProvider = await this.getFileStorageProviderAsync(context, cancellationToken);
3463
- const resources = [];
3464
- const solutionFiles = [];
3465
- let hashes;
3466
- let paths;
3467
- const pathsByKind = this.getPathsByKind(context);
3468
- let tree;
3469
- pathsByKind.clear();
3512
+ const loadStarted = nowMs();
3513
+ let fileCount = 0;
3514
+ let listMs = 0;
3515
+ let readStarted = loadStarted;
3516
+ let readWallMs = 0;
3517
+ let readCompleted = false;
3518
+ let ioMs = 0;
3519
+ let maxFileIoMs = 0;
3520
+ let parseMs = 0;
3521
+ let hashMs = 0;
3522
+ let chars = 0;
3523
+ let loadedCount = 0;
3470
3524
  const parseErrors = [];
3471
3525
  const missingFiles = [];
3472
3526
  const invalidFiles = [];
3473
- context.items[SolutionContextKeys.PARSE_ERRORS_ITEM_KEY] = parseErrors;
3474
- if (!context.isReadOnly) {
3475
- hashes = this.getHashes(context);
3476
- paths = this.getPaths(context);
3477
- tree = this.getTree(context);
3478
- hashes.clear();
3479
- paths.clear();
3480
- tree.length = 0;
3481
- }
3482
- const resourceFiles = await fileStorageProvider.getFilesAsync(SolutionConstants.RESOURCE_FILES_FOLDER_NAME, "*.json", cancellationToken);
3483
- for (const resourceFile of resourceFiles)
3484
- try {
3485
- const stream = await fileStorageProvider.openFileAsync(resourceFile, cancellationToken);
3486
- const content = await this.streamToString(stream);
3487
- const wrapper = this.caseInsensitiveSerializer.deserialize(content);
3488
- if (wrapper?.resource) {
3489
- const rd = this.fromSerializable(wrapper.resource, solutionFiles);
3490
- const relPath = resourceFile.replace(/\\/g, "/");
3491
- const segments = relPath.split("/").filter((s) => s.length > 0);
3492
- const firstSegment = segments[0];
3493
- if (segments.length >= 3 && firstSegment && firstSegment.toLowerCase() === SolutionConstants.RESOURCE_FILES_FOLDER_NAME.toLowerCase()) {
3494
- const hasType = !!rd.type;
3495
- const folderSegmentCount = hasType ? segments.length - 3 : segments.length - 2;
3496
- if (folderSegmentCount < 1)
3497
- rd.folders = [
3498
- {
3499
- fullyQualifiedName: SolutionConstants.ROOT_FOLDER_NAME
3500
- }
3501
- ];
3502
- else {
3503
- const segmentsToUse = segments.slice(1, folderSegmentCount);
3504
- const folderFqn = segmentsToUse.join("/");
3505
- rd.folders = [
3506
- {
3507
- fullyQualifiedName: folderFqn
3508
- }
3509
- ];
3527
+ let metricsLogged = false;
3528
+ const logReadMetrics = (outcome) => {
3529
+ metricsLogged = true;
3530
+ const totalMs = nowMs() - loadStarted;
3531
+ const mergeMs = readCompleted ? nowMs() - readStarted - readWallMs : 0;
3532
+ const metrics = {
3533
+ outcome,
3534
+ path: context.path,
3535
+ fileCount,
3536
+ totalMs: round1(totalMs),
3537
+ listMs: round1(listMs),
3538
+ readWallMs: round1(readWallMs),
3539
+ ioMs: round1(ioMs),
3540
+ maxFileIoMs: round1(maxFileIoMs),
3541
+ parseMs: round1(parseMs),
3542
+ hashMs: round1(hashMs),
3543
+ mergeMs: round1(mergeMs),
3544
+ chars,
3545
+ degreeOfParallelism: resolveMaxDegreeOfParallelism(this.options),
3546
+ isReadOnly: context.isReadOnly,
3547
+ loaded: loadedCount,
3548
+ missing: missingFiles.length,
3549
+ invalid: invalidFiles.length,
3550
+ parseErrors: parseErrors.length
3551
+ };
3552
+ const message = `Solution read ${outcome} for solution ${context.path}: ${metrics.fileCount} files in ${metrics.totalMs} ms (list ${metrics.listMs} ms, read ${metrics.readWallMs} ms wall, io ${metrics.ioMs} ms summed, max file io ${metrics.maxFileIoMs} ms, parse ${metrics.parseMs} ms, hash ${metrics.hashMs} ms, merge ${metrics.mergeMs} ms); ${metrics.chars} chars; parallelism ${metrics.degreeOfParallelism}; readOnly ${metrics.isReadOnly}; loaded ${metrics.loaded}, missing ${metrics.missing}, invalid ${metrics.invalid}, parseErrors ${metrics.parseErrors}`;
3553
+ if (outcome === "Success")
3554
+ this.logger.info(message, metrics);
3555
+ else
3556
+ this.logger.warn(message, metrics);
3557
+ };
3558
+ const readCore = async () => {
3559
+ const solutionKey = this.getSolutionKey(context);
3560
+ const fileStorageProvider = await this.getFileStorageProviderAsync(context, cancellationToken);
3561
+ const resources = [];
3562
+ const solutionFiles = [];
3563
+ let hashes;
3564
+ let paths;
3565
+ const pathsByKind = this.getPathsByKind(context);
3566
+ let tree;
3567
+ pathsByKind.clear();
3568
+ context.items[SolutionContextKeys.PARSE_ERRORS_ITEM_KEY] = parseErrors;
3569
+ if (!context.isReadOnly) {
3570
+ hashes = this.getHashes(context);
3571
+ paths = this.getPaths(context);
3572
+ tree = this.getTree(context);
3573
+ hashes.clear();
3574
+ paths.clear();
3575
+ tree.length = 0;
3576
+ }
3577
+ const listStarted = nowMs();
3578
+ const resourceFiles = await fileStorageProvider.getFilesAsync(SolutionConstants.RESOURCE_FILES_FOLDER_NAME, "*.json", cancellationToken);
3579
+ listMs = nowMs() - listStarted;
3580
+ fileCount = resourceFiles.length;
3581
+ readStarted = nowMs();
3582
+ const readResults = await this.readResourceFilesAsync(context, fileStorageProvider, resourceFiles, cancellationToken);
3583
+ readWallMs = nowMs() - readStarted;
3584
+ readCompleted = true;
3585
+ let fatal;
3586
+ let hasFatal = false;
3587
+ for (const result of readResults)
3588
+ if (result !== undefined) {
3589
+ if (result.timings) {
3590
+ ioMs += result.timings.ioMs;
3591
+ maxFileIoMs = Math.max(maxFileIoMs, result.timings.ioMs);
3592
+ parseMs += result.timings.parseMs;
3593
+ hashMs += result.timings.hashMs;
3594
+ chars += result.timings.chars;
3595
+ }
3596
+ if (result.fatal !== undefined) {
3597
+ if (!hasFatal) {
3598
+ fatal = result.fatal;
3599
+ hasFatal = true;
3510
3600
  }
3511
- } else
3512
- rd.folders = [
3513
- {
3514
- fullyQualifiedName: SolutionConstants.ROOT_FOLDER_NAME
3601
+ continue;
3602
+ }
3603
+ if (!hasFatal)
3604
+ switch (result.outcome) {
3605
+ case "loaded": {
3606
+ loadedCount++;
3607
+ const rd = result.resource;
3608
+ for (const file of result.files)
3609
+ if (!solutionFiles.some((sf) => sf.name === file.name && sf.kind === file.kind))
3610
+ solutionFiles.push(file);
3611
+ resources.push(rd);
3612
+ const resourceKey = rd.key;
3613
+ const normalizedFullPath = result.normalizedPath;
3614
+ if (!pathsByKind.has(rd.kind))
3615
+ pathsByKind.set(rd.kind, []);
3616
+ const kindPaths = pathsByKind.get(rd.kind);
3617
+ if (kindPaths)
3618
+ kindPaths.push({
3619
+ name: rd.name,
3620
+ key: rd.key,
3621
+ path: normalizedFullPath
3622
+ });
3623
+ if (!context.isReadOnly && hashes && paths) {
3624
+ paths.set(resourceKey, normalizedFullPath);
3625
+ hashes.set(resourceKey, result.hash);
3626
+ }
3627
+ break;
3515
3628
  }
3516
- ];
3517
- resources.push(rd);
3518
- const resourceKey = rd.key;
3519
- const normalizedFullPath = this.getNormalizedPath(resourceFile);
3520
- if (!pathsByKind.has(rd.kind))
3521
- pathsByKind.set(rd.kind, []);
3522
- const kindPaths = pathsByKind.get(rd.kind);
3523
- if (kindPaths)
3524
- kindPaths.push({
3525
- name: rd.name,
3526
- key: rd.key,
3527
- path: normalizedFullPath
3629
+ case "missing":
3630
+ missingFiles.push(result.file);
3631
+ break;
3632
+ case "invalid":
3633
+ invalidFiles.push(result.file);
3634
+ break;
3635
+ case "parseError":
3636
+ parseErrors.push(result.file);
3637
+ break;
3638
+ }
3639
+ }
3640
+ if (hasFatal) {
3641
+ logReadMetrics("Fatal");
3642
+ throw fatal;
3643
+ }
3644
+ if (missingFiles.length > 0) {
3645
+ logReadMetrics("MissingFiles");
3646
+ throw new BadRequestException(ErrorCodes.Resources.MissingFileDependencies, `Solution has missing files: ${missingFiles.join(", ")}`);
3647
+ }
3648
+ if (invalidFiles.length > 0) {
3649
+ logReadMetrics("InvalidFiles");
3650
+ throw new BadRequestException(ErrorCodes.Resources.InvalidResourceFile, `Solution has resource files with invalid content: ${invalidFiles.join(", ")}`);
3651
+ }
3652
+ if (parseErrors.length > 0) {
3653
+ logReadMetrics("ParseErrors");
3654
+ throw new Error(`Failed to read resource files for solution ${context.path}: ${parseErrors.join(", ")}`);
3655
+ }
3656
+ const folderMap = new Map;
3657
+ const rootFolder = this.buildRootFolder(solutionKey, SolutionConstants.ROOT_FOLDER_NAME);
3658
+ folderMap.set(rootFolder.fullyQualifiedName.toLowerCase(), rootFolder);
3659
+ for (const res of resources)
3660
+ for (const fdep of res.folders ?? []) {
3661
+ const fqnLower = fdep.fullyQualifiedName.toLowerCase();
3662
+ if (!folderMap.has(fqnLower)) {
3663
+ const folderKey = this.generateGuidFromString(fdep.fullyQualifiedName);
3664
+ const pathSegments = fdep.fullyQualifiedName.split("/").filter((s) => s.length > 0).map((p) => {
3665
+ if (p.toLowerCase() !== SolutionConstants.ROOT_FOLDER_NAME.toLowerCase())
3666
+ return this.generateGuidFromString(SolutionConstants.ROOT_FOLDER_NAME);
3667
+ return rootFolder.key;
3668
+ });
3669
+ const folderPath = pathSegments.join(".");
3670
+ folderMap.set(fqnLower, {
3671
+ key: folderKey,
3672
+ fullyQualifiedName: fdep.fullyQualifiedName,
3673
+ path: folderPath
3528
3674
  });
3529
- if (!context.isReadOnly && hashes && paths) {
3530
- paths.set(resourceKey, normalizedFullPath);
3531
- hashes.set(resourceKey, await this.computeHash(content));
3532
3675
  }
3533
- } else {
3534
- this.logger.error("Failed to read resource file %s for solution %s: invalid content", undefined, resourceFile, context.path);
3535
- invalidFiles.push(resourceFile);
3536
- }
3537
- } catch (ex) {
3538
- if (ex instanceof OperationCancelledException || cancellationToken?.aborted) {
3539
- this.logger.warn("Operation cancelled while reading file %s for solution %s", resourceFile, context.path);
3540
- throw ex instanceof OperationCancelledException ? ex : new OperationCancelledException;
3541
- }
3542
- if (ex instanceof TimeoutException)
3543
- throw new TimeoutException(`Reading resource file ${resourceFile} for solution ${context.path} timed out: ${ex.message}`, ex.timeoutMs);
3544
- if (isFileNotFoundError(ex)) {
3545
- this.logger.warn("Resource file listed but missing in storage for solution %s: %s", resourceFile, context.path);
3546
- missingFiles.push(resourceFile);
3547
- } else {
3548
- this.logger.error("Failed to read resource file %s for solution %s", ex, resourceFile, context.path);
3549
- parseErrors.push(resourceFile);
3550
3676
  }
3677
+ const solution = {
3678
+ key: solutionKey,
3679
+ docVersion: SolutionConstants.CURRENT_DOC_VERSION,
3680
+ folders: Array.from(folderMap.values()),
3681
+ resources,
3682
+ files: solutionFiles
3683
+ };
3684
+ await this.replaceDuplicateKeysAsync(solution, cancellationToken);
3685
+ if (!context.isReadOnly && tree) {
3686
+ const orderedResourceKeys = getTopologicalIdsOrdering(buildDependencyGraph(solution.resources));
3687
+ tree.push(...orderedResourceKeys);
3551
3688
  }
3552
- if (missingFiles.length > 0)
3553
- throw new BadRequestException(ErrorCodes.Resources.MissingFileDependencies, `Solution has missing files: ${missingFiles.join(", ")}`);
3554
- if (invalidFiles.length > 0)
3555
- throw new BadRequestException(ErrorCodes.Resources.InvalidResourceFile, `Solution has resource files with invalid content: ${invalidFiles.join(", ")}`);
3556
- if (parseErrors.length > 0)
3557
- throw new Error(`Failed to read resource files for solution ${context.path}: ${parseErrors.join(", ")}`);
3558
- const folderMap = new Map;
3559
- const rootFolder = this.buildRootFolder(solutionKey, SolutionConstants.ROOT_FOLDER_NAME);
3560
- folderMap.set(rootFolder.fullyQualifiedName.toLowerCase(), rootFolder);
3561
- for (const res of resources)
3562
- for (const fdep of res.folders ?? []) {
3563
- const fqnLower = fdep.fullyQualifiedName.toLowerCase();
3564
- if (!folderMap.has(fqnLower)) {
3565
- const folderKey = this.generateGuidFromString(fdep.fullyQualifiedName);
3566
- const pathSegments = fdep.fullyQualifiedName.split("/").filter((s) => s.length > 0).map((p) => {
3567
- if (p.toLowerCase() !== SolutionConstants.ROOT_FOLDER_NAME.toLowerCase())
3568
- return this.generateGuidFromString(SolutionConstants.ROOT_FOLDER_NAME);
3569
- return rootFolder.key;
3570
- });
3571
- const folderPath = pathSegments.join(".");
3572
- folderMap.set(fqnLower, {
3573
- key: folderKey,
3574
- fullyQualifiedName: fdep.fullyQualifiedName,
3575
- path: folderPath
3576
- });
3577
- }
3689
+ logReadMetrics("Success");
3690
+ return solution;
3691
+ };
3692
+ try {
3693
+ return await readCore();
3694
+ } catch (ex) {
3695
+ if (!metricsLogged)
3696
+ logReadMetrics("Fatal");
3697
+ throw ex;
3698
+ }
3699
+ }
3700
+ async readResourceFilesAsync(context, fileStorageProvider, resourceFiles, cancellationToken) {
3701
+ const results = Array.from({
3702
+ length: resourceFiles.length
3703
+ }, () => {
3704
+ return;
3705
+ });
3706
+ if (resourceFiles.length === 0)
3707
+ return results;
3708
+ const computeHash = !context.isReadOnly;
3709
+ const degreeOfParallelism = Math.min(resolveMaxDegreeOfParallelism(this.options), resourceFiles.length);
3710
+ let nextIndex = 0;
3711
+ let stopRequested = false;
3712
+ const runWorkerAsync = async () => {
3713
+ while (!stopRequested && nextIndex < resourceFiles.length) {
3714
+ const index = nextIndex++;
3715
+ const resourceFile = resourceFiles[index];
3716
+ const result = await this.readResourceFileAsync(context, fileStorageProvider, resourceFile, computeHash, cancellationToken);
3717
+ results[index] = result;
3718
+ if (result.fatal !== undefined)
3719
+ stopRequested = true;
3578
3720
  }
3579
- const solution = {
3580
- key: solutionKey,
3581
- docVersion: SolutionConstants.CURRENT_DOC_VERSION,
3582
- folders: Array.from(folderMap.values()),
3583
- resources,
3584
- files: solutionFiles
3585
3721
  };
3586
- await this.replaceDuplicateKeysAsync(solution, cancellationToken);
3587
- if (!context.isReadOnly && tree) {
3588
- const orderedResourceKeys = getTopologicalIdsOrdering(buildDependencyGraph(solution.resources));
3589
- tree.push(...orderedResourceKeys);
3722
+ const workers = [];
3723
+ for (let i = 0;i < degreeOfParallelism; i++)
3724
+ workers.push(runWorkerAsync());
3725
+ await Promise.all(workers);
3726
+ if (cancellationToken?.aborted && !results.some((result) => result?.fatal !== undefined))
3727
+ throw cancellationError(cancellationToken);
3728
+ return results;
3729
+ }
3730
+ async readResourceFileAsync(context, fileStorageProvider, resourceFile, computeHash, cancellationToken) {
3731
+ const started = nowMs();
3732
+ let ioMs;
3733
+ let content;
3734
+ const failureTimings = () => {
3735
+ const elapsed = nowMs() - started;
3736
+ return ioMs === undefined ? {
3737
+ ioMs: elapsed,
3738
+ parseMs: 0,
3739
+ hashMs: 0,
3740
+ chars: 0
3741
+ } : {
3742
+ ioMs,
3743
+ parseMs: elapsed - ioMs,
3744
+ hashMs: 0,
3745
+ chars: content?.length ?? 0
3746
+ };
3747
+ };
3748
+ try {
3749
+ if (cancellationToken?.aborted)
3750
+ throw cancellationError(cancellationToken);
3751
+ const stream = await fileStorageProvider.openFileAsync(resourceFile, cancellationToken);
3752
+ content = await this.streamToString(stream);
3753
+ ioMs = nowMs() - started;
3754
+ const parseStarted = nowMs();
3755
+ const wrapper = this.caseInsensitiveSerializer.deserialize(content);
3756
+ if (!wrapper?.resource) {
3757
+ this.logger.error("Failed to read resource file %s for solution %s: invalid content", undefined, resourceFile, context.path);
3758
+ return {
3759
+ file: resourceFile,
3760
+ outcome: "invalid",
3761
+ timings: failureTimings()
3762
+ };
3763
+ }
3764
+ const files = [];
3765
+ const rd = this.fromSerializable(wrapper.resource, files);
3766
+ this.applyFolders(rd, resourceFile);
3767
+ const parseMs = nowMs() - parseStarted;
3768
+ let hash;
3769
+ let hashMs = 0;
3770
+ if (computeHash) {
3771
+ const hashStarted = nowMs();
3772
+ hash = await this.computeHash(content);
3773
+ hashMs = nowMs() - hashStarted;
3774
+ }
3775
+ return {
3776
+ file: resourceFile,
3777
+ outcome: "loaded",
3778
+ resource: rd,
3779
+ files,
3780
+ normalizedPath: this.getNormalizedPath(resourceFile),
3781
+ hash,
3782
+ timings: {
3783
+ ioMs,
3784
+ parseMs,
3785
+ hashMs,
3786
+ chars: content.length
3787
+ }
3788
+ };
3789
+ } catch (ex) {
3790
+ if (ex instanceof OperationCancelledException || cancellationToken?.aborted) {
3791
+ this.logger.warn("Operation cancelled while reading file %s for solution %s", resourceFile, context.path);
3792
+ return {
3793
+ file: resourceFile,
3794
+ outcome: "fatal",
3795
+ fatal: ex instanceof OperationCancelledException ? ex : cancellationError(cancellationToken),
3796
+ timings: failureTimings()
3797
+ };
3798
+ }
3799
+ if (ex instanceof TimeoutException)
3800
+ return {
3801
+ file: resourceFile,
3802
+ outcome: "fatal",
3803
+ fatal: new TimeoutException(`Reading resource file ${resourceFile} for solution ${context.path} timed out: ${ex.message}`, ex.timeoutMs),
3804
+ timings: failureTimings()
3805
+ };
3806
+ if (isFileNotFoundError(ex)) {
3807
+ this.logger.warn("Resource file listed but missing in storage for solution %s: %s", resourceFile, context.path);
3808
+ return {
3809
+ file: resourceFile,
3810
+ outcome: "missing",
3811
+ timings: failureTimings()
3812
+ };
3813
+ }
3814
+ this.logger.error("Failed to read resource file %s for solution %s", ex, resourceFile, context.path);
3815
+ return {
3816
+ file: resourceFile,
3817
+ outcome: "parseError",
3818
+ timings: failureTimings()
3819
+ };
3590
3820
  }
3591
- return solution;
3821
+ }
3822
+ applyFolders(resource, resourceFile) {
3823
+ const relPath = resourceFile.replace(/\\/g, "/");
3824
+ const segments = relPath.split("/").filter((s) => s.length > 0);
3825
+ const firstSegment = segments[0];
3826
+ if (segments.length >= 3 && firstSegment && firstSegment.toLowerCase() === SolutionConstants.RESOURCE_FILES_FOLDER_NAME.toLowerCase()) {
3827
+ const hasType = !!resource.type;
3828
+ const folderSegmentCount = hasType ? segments.length - 3 : segments.length - 2;
3829
+ if (folderSegmentCount < 1)
3830
+ resource.folders = [
3831
+ {
3832
+ fullyQualifiedName: SolutionConstants.ROOT_FOLDER_NAME
3833
+ }
3834
+ ];
3835
+ else {
3836
+ const segmentsToUse = segments.slice(1, folderSegmentCount);
3837
+ const folderFqn = segmentsToUse.join("/");
3838
+ resource.folders = [
3839
+ {
3840
+ fullyQualifiedName: folderFqn
3841
+ }
3842
+ ];
3843
+ }
3844
+ } else
3845
+ resource.folders = [
3846
+ {
3847
+ fullyQualifiedName: SolutionConstants.ROOT_FOLDER_NAME
3848
+ }
3849
+ ];
3592
3850
  }
3593
3851
  async writeAsync(context, solution, cancellationToken) {
3594
3852
  if (context.isReadOnly)
@@ -3893,7 +4151,7 @@ class MultiFileSolutionDefinitionFactory {
3893
4151
  // ../../node_modules/@uipath/resource-builder-sdk/dist/embedded-files-default.js
3894
4152
  async function createDefaultEmbeddedFileReaderAsync() {
3895
4153
  const [{ EmbeddedFileReader }, { JsonSerializerFactory: JsonSerializerFactory2 }] = await Promise.all([
3896
- import("./embedded-file-reader-v8c2yj2a.js"),
4154
+ import("./embedded-file-reader-r66242ey.js"),
3897
4155
  import("./index-kmp9fmhb.js")
3898
4156
  ]);
3899
4157
  return new EmbeddedFileReader(new JsonSerializerFactory2);
@@ -3911,6 +4169,7 @@ var ServiceTokens = {
3911
4169
  SecretsProvider: "ISecretsProvider",
3912
4170
  FileStorageProviderFactory: "IFileStorageProviderFactory",
3913
4171
  IpRangeBypassSecretProvider: "IIpRangeBypassSecretProvider",
4172
+ FeatureFlagProvider: "IFeatureFlagProvider",
3914
4173
  SolutionDefinitionProvider: "ISolutionDefinitionProvider",
3915
4174
  SolutionDefinitionFactory: "ISolutionDefinitionFactory",
3916
4175
  ArtifactResourceSpecEnhancer: "IArtifactResourceSpecEnhancer",
@@ -4261,6 +4520,9 @@ function getBindingType(resourceKind, resourceType) {
4261
4520
  }
4262
4521
 
4263
4522
  // ../../node_modules/@uipath/resource-builder-sdk/dist/bindings/bindings-metadata-serializer.js
4523
+ var SUPPORTED_SCHEMA_MAJOR_VERSION = 2;
4524
+ var INT32_MAX_VALUE = 2147483647;
4525
+
4264
4526
  class BindingsMetadataSerializer {
4265
4527
  tryDeserialize(input) {
4266
4528
  if (!input)
@@ -4271,30 +4533,52 @@ class BindingsMetadataSerializer {
4271
4533
  let cleanInput = input.charCodeAt(0) === 65279 ? input.slice(1) : input;
4272
4534
  if (cleanInput.charCodeAt(cleanInput.length - 1) === 26)
4273
4535
  cleanInput = cleanInput.slice(0, -1);
4274
- const jsonObject = JSON.parse(cleanInput);
4536
+ const root = JSON.parse(cleanInput);
4537
+ if (root === null || typeof root != "object" || Array.isArray(root)) {
4538
+ this.logger.warn("Invalid bindings: content is not a JSON object");
4539
+ return {
4540
+ success: false
4541
+ };
4542
+ }
4543
+ const jsonObject = root;
4275
4544
  const versionValue = jsonObject[BindingsKnownKeys.Version];
4276
- if (!versionValue)
4545
+ if (typeof versionValue != "string") {
4546
+ this.logger.warn(`Invalid bindings: '${BindingsKnownKeys.Version}' is missing or not a string`);
4547
+ return {
4548
+ success: false
4549
+ };
4550
+ }
4551
+ const majorVersion = BindingsMetadataSerializer.tryParseMajorVersion(versionValue);
4552
+ if (majorVersion === undefined) {
4553
+ this.logger.warn(`Invalid bindings: '${BindingsKnownKeys.Version}' is not a valid version`);
4554
+ return {
4555
+ success: false
4556
+ };
4557
+ }
4558
+ if (majorVersion !== SUPPORTED_SCHEMA_MAJOR_VERSION) {
4559
+ this.logger.warn(`Invalid bindings: unsupported schema major version ${majorVersion}`);
4560
+ return {
4561
+ success: false
4562
+ };
4563
+ }
4564
+ const resources = jsonObject[BindingsKnownKeys.Resources];
4565
+ if (!Array.isArray(resources)) {
4566
+ this.logger.warn(`Invalid bindings: '${BindingsKnownKeys.Resources}' is missing or not an array`);
4277
4567
  return {
4278
4568
  success: false
4279
4569
  };
4280
- const versionParts = versionValue.split(".").map(Number);
4281
- const majorVersion = versionParts[0];
4282
- if (majorVersion !== 2)
4283
- throw new Error("Unsupported bindings schema");
4570
+ }
4284
4571
  const metadata = {
4285
4572
  version: versionValue,
4286
4573
  resources: []
4287
4574
  };
4288
- const resources = jsonObject[BindingsKnownKeys.Resources];
4289
- if (Array.isArray(resources))
4290
- for (const resourceElement of resources) {
4291
- if (resourceElement == null) {
4292
- this.logger.warn("Skipping null bindings resource element");
4293
- continue;
4294
- }
4295
- const resource = this.getBindingsResourceV2(resourceElement);
4296
- metadata.resources.push(resource);
4575
+ for (const resourceElement of resources) {
4576
+ if (resourceElement == null) {
4577
+ this.logger.warn("Skipping null bindings resource element");
4578
+ continue;
4297
4579
  }
4580
+ metadata.resources.push(this.getBindingsResourceV2(resourceElement));
4581
+ }
4298
4582
  this.linkDependencies(metadata.resources);
4299
4583
  return {
4300
4584
  success: true,
@@ -4307,6 +4591,22 @@ class BindingsMetadataSerializer {
4307
4591
  };
4308
4592
  }
4309
4593
  }
4594
+ static tryParseMajorVersion(value) {
4595
+ const parts = value.split(".");
4596
+ if (parts.length < 2 || parts.length > 4)
4597
+ return;
4598
+ let major;
4599
+ for (const [index, part] of parts.entries()) {
4600
+ if (!/^\s*[+-]?\d+\s*$/.test(part))
4601
+ return;
4602
+ const component = Number(part);
4603
+ if (component < 0 || component > INT32_MAX_VALUE)
4604
+ return;
4605
+ if (index === 0)
4606
+ major = component === 0 ? 0 : component;
4607
+ }
4608
+ return major;
4609
+ }
4310
4610
  linkDependencies(resources) {
4311
4611
  for (const resource of resources) {
4312
4612
  const propertyMeta = resource.metadata;
@@ -4493,8 +4793,7 @@ class BindingOverwritesHandler {
4493
4793
  [BindingsKnownKeys.FolderKeyPropertyName]: resourceOverwrite.folderKey ?? ""
4494
4794
  };
4495
4795
  else {
4496
- const isBusinessRule = bindingResource.binding.resourceType === models_BindingsResourceType.BusinessRule;
4497
- const folderPath = bindingResource.isArtefactResource && !isBusinessRule ? "" : resourceOverwrite.folderFullyQualifiedName ?? "";
4796
+ const folderPath = bindingResource.isArtefactResource && !bindingResource.isCodedApp ? "" : resourceOverwrite.folderFullyQualifiedName ?? "";
4498
4797
  overwrite = {
4499
4798
  [BindingsKnownKeys.FolderPathPropertyName]: folderPath,
4500
4799
  [BindingsKnownKeys.NamePropertyName]: resourceOverwrite.resourceName
@@ -4527,6 +4826,11 @@ function removeTimeTriggerBindings(bindings) {
4527
4826
  }
4528
4827
 
4529
4828
  // ../../node_modules/@uipath/resource-builder-sdk/dist/bindings/binding-overwrites-mapping-handler.js
4829
+ function isCodedAppType(type) {
4830
+ const normalized = type?.toLowerCase();
4831
+ return normalized === "coded" || normalized === "codedaction";
4832
+ }
4833
+
4530
4834
  class BindingOverwritesMappingRequestHandler {
4531
4835
  async handleAsync(request, cancellationToken) {
4532
4836
  const solutionBindings = request.bindings.resources.filter((x) => isSolutionResource(x.metadata));
@@ -4552,7 +4856,8 @@ class BindingOverwritesMappingRequestHandler {
4552
4856
  result.push({
4553
4857
  binding: bindingsResource,
4554
4858
  resourceKey: resource.key,
4555
- isArtefactResource: resource.projectKey != null
4859
+ isArtefactResource: resource.projectKey != null,
4860
+ isCodedApp: bindingsResource.resourceType === models_BindingsResourceType.App && isCodedAppType(resource.type)
4556
4861
  });
4557
4862
  } else {
4558
4863
  this.logger.error(`Solution does not contain binding resource of type ${models_BindingsResourceType[bindingsResource.resourceType]}.`);
@@ -5557,6 +5862,9 @@ class SolutionPublishLocationRequest {
5557
5862
  }
5558
5863
 
5559
5864
  class SolutionPublishLocationRequestV2 {
5865
+ constructor(permissionType) {
5866
+ this.permissionType = permissionType;
5867
+ }
5560
5868
  }
5561
5869
 
5562
5870
  class SettingsRequest {
@@ -5721,12 +6029,13 @@ function _ts_param3(paramIndex, decorator) {
5721
6029
  }
5722
6030
 
5723
6031
  class SolutionPublishLocationRequestV2Handler {
5724
- async handleAsync(_request, cancellationToken) {
6032
+ async handleAsync(request, cancellationToken) {
5725
6033
  try {
5726
6034
  const orchestratorClient = await this.orchestratorClientFactory.getClientAsync(cancellationToken);
5727
6035
  if (!orchestratorClient)
5728
6036
  throw new InvalidOperationException("Failed to create Orchestrator client");
5729
- return await orchestratorClient.getPublishLocationsAsync(cancellationToken);
6037
+ const { permissionType } = request;
6038
+ return permissionType == null ? await orchestratorClient.getPublishLocationsAsync(cancellationToken) : await orchestratorClient.getAccessiblePublishLocationsAsync(permissionType, cancellationToken);
5730
6039
  } catch (error) {
5731
6040
  this.logger.error("An unexpected error occurred while retrieving publish locations from Automation Solutions service.", error);
5732
6041
  throw error;
@@ -7756,7 +8065,7 @@ class GetResourceKeyForProjectRequestHandler {
7756
8065
  projectKey: request.projectKey,
7757
8066
  solution: request.context.path
7758
8067
  });
7759
- const cacheKey = `prk:${request.projectKey}`;
8068
+ const cacheKey = `prk:${request.context.path}:${request.projectKey}`;
7760
8069
  const cached = await this.cacheProvider.getAsync(cacheKey, cancellationToken);
7761
8070
  if (cached && typeof cached == "object" && "resourceKey" in cached) {
7762
8071
  this.logger.info("Cache hit for project {projectKey} resource key.", {
@@ -8584,7 +8893,11 @@ class UpdateResourceConfigurationCommandHandler {
8584
8893
  for (const prop of command.properties) {
8585
8894
  const propKey = prop.property.toLowerCase();
8586
8895
  const metadata = propertiesMetadata.get(propKey);
8587
- if (!(!metadata || isAnyReferenceProperty(metadata)) && metadata.readOnly !== true) {
8896
+ if (metadata && metadata.readOnly !== true) {
8897
+ if (isAnyReferenceProperty(metadata)) {
8898
+ updated = this.setSolutionReference(solution, resource, currentConfiguration, propertiesMetadata, metadata, prop.configuredValue) || updated;
8899
+ continue;
8900
+ }
8588
8901
  if (isSecretProperty(metadata)) {
8589
8902
  const secretValue = prop.configuredValue?.toString() || "";
8590
8903
  const existingKey = currentConfiguration[metadata.property]?.toString();
@@ -8628,6 +8941,38 @@ class UpdateResourceConfigurationCommandHandler {
8628
8941
  await command.context.saveChangesAsync(cancellationToken);
8629
8942
  return resourceConfiguration;
8630
8943
  }
8944
+ setSolutionReference(solution, resource, currentConfiguration, propertiesMetadata, metadata, configuredValue) {
8945
+ const referenceKind = metadata["referenceKind"];
8946
+ if (!isSingleReferenceProperty(metadata) || isFileReferenceProperty(metadata) || typeof referenceKind != "string" || !referenceKind)
8947
+ return false;
8948
+ const requested = asReference(configuredValue);
8949
+ const target = requested?.key ? solution.resources.find((r) => invariantEquals(r.key, requested.key) && invariantEquals(r.kind, referenceKind)) : undefined;
8950
+ if (!requested || !target || invariantEquals(target.key, resource.key))
8951
+ return false;
8952
+ const dependencies = resource.dependencies ??= [];
8953
+ const previous = asReference(currentConfiguration[metadata.property]);
8954
+ const previousKey = previous?.key;
8955
+ const isReferencedElsewhere = (key) => [
8956
+ ...propertiesMetadata.values()
8957
+ ].some((p) => isAnyReferenceProperty(p) && !isFileReferenceProperty(p) && typeof p["referenceKind"] == "string" && invariantEquals(p["referenceKind"], target.kind) && !invariantEquals(p.property, metadata.property) && asReferences(currentConfiguration[p.property]).some((r) => r.key !== undefined && invariantEquals(r.key, key)));
8958
+ if (previousKey && !invariantEquals(previousKey, target.key) && !isReferencedElsewhere(previousKey)) {
8959
+ const previousName = solution.resources.find((r) => invariantEquals(r.key, previousKey) && invariantEquals(r.kind, target.kind))?.name ?? previous?.name ?? "";
8960
+ resource.dependencies = dependencies.filter((d) => !(invariantEquals(d.kind, target.kind) && invariantEquals(d.name, previousName)));
8961
+ }
8962
+ if (!resource.dependencies.some((d) => invariantEquals(d.kind, target.kind) && invariantEquals(d.name, target.name)))
8963
+ resource.dependencies.push({
8964
+ kind: target.kind,
8965
+ name: target.name
8966
+ });
8967
+ currentConfiguration[metadata.property] = {
8968
+ name: target.name,
8969
+ key: target.key,
8970
+ folderKey: requested.folderKey ?? null,
8971
+ lookupStrategy: null,
8972
+ info: null
8973
+ };
8974
+ return true;
8975
+ }
8631
8976
  async updateReferencesName(solutionDefinition, resource, oldName, cancellationToken) {
8632
8977
  const resourcesToBeChanged = solutionDefinition.resources.filter((r) => r.key !== resource.key && (r.dependencies ?? []).some((d) => invariantEquals(d.kind, resource.kind) && invariantEquals(d.name, oldName)));
8633
8978
  if (resourcesToBeChanged.length === 0)
@@ -8914,6 +9259,28 @@ class UpsertResourceSecretCommandHandler {
8914
9259
  this.secretsProvider = secretsProvider;
8915
9260
  }
8916
9261
  }
9262
+ function asReference(value) {
9263
+ if (!value || typeof value != "object" || Array.isArray(value))
9264
+ return;
9265
+ const record = value;
9266
+ const pick = (name) => {
9267
+ const entry = Object.entries(record).find(([k]) => k.toLowerCase() === name.toLowerCase());
9268
+ return typeof entry?.[1] == "string" ? entry[1] : undefined;
9269
+ };
9270
+ return {
9271
+ key: pick("key"),
9272
+ name: pick("name"),
9273
+ folderKey: pick("folderKey")
9274
+ };
9275
+ }
9276
+ function asReferences(value) {
9277
+ if (Array.isArray(value))
9278
+ return value.map(asReference).filter((r) => r !== undefined);
9279
+ const single = asReference(value);
9280
+ return single ? [
9281
+ single
9282
+ ] : [];
9283
+ }
8917
9284
 
8918
9285
  // ../../node_modules/@uipath/resource-builder-sdk/dist/handlers/solution-handlers.js
8919
9286
  var DUPLICATE_NAMES_SUPPORTED_KINDS = new Set([
@@ -9885,6 +10252,9 @@ class ResourceCatalogApi extends HttpClient {
9885
10252
  // ../../node_modules/@uipath/resource-builder-sdk/dist/clients/resource-catalog/resource-catalog-client.factory.js
9886
10253
  var RESOURCE_CATALOG_SCOPE = "RCS.FolderAuthorization";
9887
10254
  var RESOURCE_CATALOG_SERVICE_NAME = "resourcecatalog";
10255
+ function trimTrailingSlashes(url) {
10256
+ return url.replace(/\/+$/, "");
10257
+ }
9888
10258
 
9889
10259
  class ResourceCatalogClientFactory {
9890
10260
  async getClientAsync(cancellationToken) {
@@ -9898,9 +10268,8 @@ class ResourceCatalogClientFactory {
9898
10268
  ], true, cancellationToken);
9899
10269
  const ipRangeBypassSecret = await this.ipRangeBypassSecretProvider?.getIpRangeBypassSecretAsync(cancellationToken);
9900
10270
  const gatewayIntegrationEnabled = this.resourceBuilderAccessProvider.isGatewayIntegrationEnabled();
9901
- const normalizedBaseUrl = baseUrl.endsWith("/") ? baseUrl : baseUrl + "/";
9902
10271
  const client = new ResourceCatalogApi({
9903
- baseUrl: normalizedBaseUrl,
10272
+ baseUrl: trimTrailingSlashes(baseUrl),
9904
10273
  securityWorker: (securityData) => {
9905
10274
  if (!securityData)
9906
10275
  return {};
@@ -9943,7 +10312,7 @@ class ResourceCatalogClientFactory {
9943
10312
  if (!accountKey)
9944
10313
  throw new Error("Unable to obtain account key");
9945
10314
  const client = new ResourceCatalogApi({
9946
- baseUrl,
10315
+ baseUrl: trimTrailingSlashes(baseUrl),
9947
10316
  securityWorker: (securityData) => {
9948
10317
  if (!securityData)
9949
10318
  return {};
@@ -12162,7 +12531,16 @@ class AutomationSolutionsClientProxy2 {
12162
12531
  // ../../node_modules/@uipath/resource-builder-sdk/dist/clients/orchestrator/orchestrator-client.js
12163
12532
  class OrchestratorClient {
12164
12533
  async getPublishLocationsAsync(cancellationToken) {
12165
- const url = `${this.options.baseUrl}api/v2/AutomationSolutions/publish_locations`;
12534
+ return this.getPublishLocationsFromAsync(this.publishLocationsUrl(), cancellationToken);
12535
+ }
12536
+ async getAccessiblePublishLocationsAsync(permissionType, cancellationToken) {
12537
+ const url = `${this.publishLocationsUrl()}?permissionType=${encodeURIComponent(permissionType)}`;
12538
+ return this.getPublishLocationsFromAsync(url, cancellationToken);
12539
+ }
12540
+ publishLocationsUrl() {
12541
+ return `${this.options.baseUrl}api/v2/AutomationSolutions/publish_locations`;
12542
+ }
12543
+ async getPublishLocationsFromAsync(url, cancellationToken) {
12166
12544
  const headers = OrchestratorClientFactory.buildHeaders(this.options.securityData);
12167
12545
  const response = await fetch(url, {
12168
12546
  method: "GET",
@@ -12852,7 +13230,7 @@ class ReconcileProjectsCommandHandler {
12852
13230
  } : {
12853
13231
  resourceKey: undefined
12854
13232
  };
12855
- await this.cacheProvider.setAsync(`prk:${projectKey}`, result, cancellationToken);
13233
+ await this.cacheProvider.setAsync(`prk:${context.path}:${projectKey}`, result, cancellationToken);
12856
13234
  }
12857
13235
  groupByProjectKey(artefactResources) {
12858
13236
  const map = new Map;
@@ -13726,6 +14104,11 @@ class ResourceBuilder {
13726
14104
  const request = new SolutionPublishLocationRequestV2;
13727
14105
  return this._mediator.sendAsync(request, cancellationToken);
13728
14106
  }
14107
+ async getAccessiblePublishLocationsAsync(permissionType, cancellationToken) {
14108
+ this.throwIfCancelled(cancellationToken);
14109
+ const request = new SolutionPublishLocationRequestV2(permissionType);
14110
+ return this._mediator.sendAsync(request, cancellationToken);
14111
+ }
13729
14112
  async getSettingsAsync(cancellationToken) {
13730
14113
  this.throwIfCancelled(cancellationToken);
13731
14114
  const request = new SettingsRequest;
@@ -14285,9 +14668,9 @@ class UnconfiguredEmbeddedFileReader {
14285
14668
  }
14286
14669
 
14287
14670
  // ../../node_modules/@uipath/resource-builder-sdk/dist/container.js
14288
- function createContainer(accessProvider, cacheProvider, secretsProvider, fileStorageProviderFactory, ipRangeBypassSecretProvider, solutionDefinitionProvider, solutionDefinitionFactory, artifactResourceSpecEnhancer, httpReaderOptions, loggerFactory, embeddedFileReader, solutionContextOptions) {
14671
+ function createContainer(accessProvider, cacheProvider, secretsProvider, fileStorageProviderFactory, ipRangeBypassSecretProvider, solutionDefinitionProvider, solutionDefinitionFactory, artifactResourceSpecEnhancer, httpReaderOptions, loggerFactory, embeddedFileReader, solutionContextOptions, featureFlagProvider) {
14289
14672
  const childContainer = import_tsyringe6.container.createChildContainer();
14290
- registerProviders(childContainer, accessProvider, cacheProvider, secretsProvider, fileStorageProviderFactory, ipRangeBypassSecretProvider, solutionDefinitionProvider, solutionDefinitionFactory, artifactResourceSpecEnhancer, httpReaderOptions, loggerFactory, solutionContextOptions);
14673
+ registerProviders(childContainer, accessProvider, cacheProvider, secretsProvider, fileStorageProviderFactory, ipRangeBypassSecretProvider, solutionDefinitionProvider, solutionDefinitionFactory, artifactResourceSpecEnhancer, httpReaderOptions, loggerFactory, solutionContextOptions, featureFlagProvider);
14291
14674
  registerServices(childContainer, embeddedFileReader);
14292
14675
  registerHandlers(childContainer);
14293
14676
  childContainer.register(ServiceTokens.Mediator, {
@@ -14311,11 +14694,15 @@ function registerProvider(diContainer, token, provider) {
14311
14694
  break;
14312
14695
  }
14313
14696
  }
14314
- function registerProviders(diContainer, accessProvider, cacheProvider, secretsProvider, fileStorageProviderFactory, ipRangeBypassSecretProvider, solutionDefinitionProvider, solutionDefinitionFactory, artifactResourceSpecEnhancer, httpReaderOptions, loggerFactory, solutionContextOptions) {
14697
+ function registerProviders(diContainer, accessProvider, cacheProvider, secretsProvider, fileStorageProviderFactory, ipRangeBypassSecretProvider, solutionDefinitionProvider, solutionDefinitionFactory, artifactResourceSpecEnhancer, httpReaderOptions, loggerFactory, solutionContextOptions, featureFlagProvider) {
14315
14698
  registerProvider(diContainer, ServiceTokens.AccessProvider, accessProvider);
14316
14699
  registerProvider(diContainer, ServiceTokens.CacheProvider, cacheProvider);
14317
14700
  registerProvider(diContainer, ServiceTokens.SecretsProvider, secretsProvider);
14318
14701
  registerProvider(diContainer, ServiceTokens.IpRangeBypassSecretProvider, ipRangeBypassSecretProvider);
14702
+ registerProvider(diContainer, ServiceTokens.FeatureFlagProvider, featureFlagProvider ?? {
14703
+ instance: new NullFeatureFlagProvider,
14704
+ lifetime: service_tokens_ServiceLifetime.Singleton
14705
+ });
14319
14706
  registerProvider(diContainer, ServiceTokens.FileStorageProviderFactory, fileStorageProviderFactory);
14320
14707
  registerProvider(diContainer, ServiceTokens.SolutionDefinitionProvider, solutionDefinitionProvider);
14321
14708
  registerProvider(diContainer, ServiceTokens.SolutionDefinitionFactory, solutionDefinitionFactory);
@@ -15042,6 +15429,11 @@ class ResourceBuilderConfiguration {
15042
15429
  this._ipRangeBypassSecretProviderLifetime = lifetime;
15043
15430
  return this;
15044
15431
  }
15432
+ addFeatureFlagProvider(provider, lifetime = service_tokens_ServiceLifetime.Scoped) {
15433
+ this._featureFlagProviderProvider = provider;
15434
+ this._featureFlagProviderLifetime = lifetime;
15435
+ return this;
15436
+ }
15045
15437
  addSolutionDefinitionProvider(provider, lifetime = service_tokens_ServiceLifetime.Scoped) {
15046
15438
  this._solutionDefinitionProviderProvider = provider;
15047
15439
  this._solutionDefinitionProviderLifetime = lifetime;
@@ -15095,6 +15487,11 @@ class ResourceBuilderConfiguration {
15095
15487
  instance: ipRangeBypassSecretProviderInstance,
15096
15488
  lifetime: this._ipRangeBypassSecretProviderLifetime
15097
15489
  };
15490
+ const featureFlagProviderInstance = this._featureFlagProviderProvider ? await resolveProvider(this._featureFlagProviderProvider) : new NullFeatureFlagProvider;
15491
+ const featureFlagProvider = {
15492
+ instance: featureFlagProviderInstance,
15493
+ lifetime: this._featureFlagProviderLifetime
15494
+ };
15098
15495
  const secretsProviderInstance = this._secretsProviderProvider ? await resolveProvider(this._secretsProviderProvider) : new NullSecretsProvider;
15099
15496
  const secretsProvider = {
15100
15497
  instance: secretsProviderInstance,
@@ -15138,7 +15535,7 @@ class ResourceBuilderConfiguration {
15138
15535
  lifetime: this._artifactResourceSpecEnhancerLifetime
15139
15536
  };
15140
15537
  const embeddedFileReader = await createDefaultEmbeddedFileReaderAsync();
15141
- const container3 = createContainer(accessProvider, cacheProvider, secretsProvider, fileStorageProviderFactory, ipRangeBypassSecretProvider, solutionDefinitionProvider, solutionDefinitionFactory, artifactResourceSpecEnhancer, this._httpReaderOptions, loggerFactory, embeddedFileReader, this._solutionContextOptions);
15538
+ const container3 = createContainer(accessProvider, cacheProvider, secretsProvider, fileStorageProviderFactory, ipRangeBypassSecretProvider, solutionDefinitionProvider, solutionDefinitionFactory, artifactResourceSpecEnhancer, this._httpReaderOptions, loggerFactory, embeddedFileReader, this._solutionContextOptions, featureFlagProvider);
15142
15539
  return new ResourceBuilderServices(container3);
15143
15540
  }
15144
15541
  async buildServices() {
@@ -15150,6 +15547,7 @@ class ResourceBuilderConfiguration {
15150
15547
  this._secretsProviderLifetime = service_tokens_ServiceLifetime.Scoped;
15151
15548
  this._fileStorageProviderFactoryLifetime = service_tokens_ServiceLifetime.Singleton;
15152
15549
  this._ipRangeBypassSecretProviderLifetime = service_tokens_ServiceLifetime.Scoped;
15550
+ this._featureFlagProviderLifetime = service_tokens_ServiceLifetime.Scoped;
15153
15551
  this._solutionDefinitionProviderLifetime = service_tokens_ServiceLifetime.Scoped;
15154
15552
  this._solutionDefinitionFactoryLifetime = service_tokens_ServiceLifetime.Scoped;
15155
15553
  this._artifactResourceSpecEnhancerLifetime = service_tokens_ServiceLifetime.Scoped;
@@ -15261,8 +15659,59 @@ var ARTEFACT_KIND_APP = "app";
15261
15659
  var ARTEFACT_KIND_APP_VERSION = "appversion";
15262
15660
  var ARTEFACT_KIND_PACKAGE = "package";
15263
15661
  var SPEC_KEY_PACKAGE = "package";
15662
+ var RESOURCE_FILES_FOLDER_NAME = "resources";
15663
+ var RESOURCE_FILE_PATTERN = "*.json";
15664
+ var FIX_SHARED_KEY = "Delete all but one file for each key, then retry.";
15665
+ var FIX_KEYLESS = 'Give each file without a key its own unique "key", then retry.';
15666
+
15667
+ class DuplicateKeysError extends Error {
15668
+ keys;
15669
+ constructor(keys) {
15670
+ super(`Duplicate resource keys: ${keys.map(describeKey).join(", ")}`);
15671
+ this.keys = keys;
15672
+ }
15673
+ }
15264
15674
 
15265
15675
  class ArtefactPairBindingProvider extends MultiFileSolutionDefinitionProvider {
15676
+ async readAsync(context, cancellationToken) {
15677
+ const [readError, solution] = await catchError(super.readAsync(context, cancellationToken));
15678
+ if (!readError)
15679
+ return solution;
15680
+ if (!(readError instanceof DuplicateKeysError))
15681
+ throw readError;
15682
+ const [describeError, message] = await catchError(this.describeDuplicateKeys(context, readError.keys, cancellationToken));
15683
+ throw describeError ? readError : new Error(message);
15684
+ }
15685
+ async replaceDuplicateKeysAsync(solution) {
15686
+ const keys = findDuplicateKeys(solution);
15687
+ if (keys.length > 0)
15688
+ throw new DuplicateKeysError(keys);
15689
+ }
15690
+ async describeDuplicateKeys(context, keys, cancellationToken) {
15691
+ const storage = await this.getFileStorageProviderAsync(context, cancellationToken);
15692
+ const files = await storage.getFilesAsync(RESOURCE_FILES_FOLDER_NAME, RESOURCE_FILE_PATTERN, cancellationToken);
15693
+ const pathsByKey = new Map(keys.map((key) => [key, []]));
15694
+ for (const file of [...files].sort()) {
15695
+ const [readError, key] = await catchError(this.readResourceKey(storage, file, cancellationToken));
15696
+ if (readError)
15697
+ continue;
15698
+ pathsByKey.get(key)?.push(toPortableRelativePath(file));
15699
+ }
15700
+ const lines = [...pathsByKey].map(([key, paths]) => `Resource key ${describeKey(key)} is used by: ${paths.join(", ")}`);
15701
+ const fixes = [
15702
+ keys.some((key) => !isKeyless(key)) && FIX_SHARED_KEY,
15703
+ keys.some(isKeyless) && FIX_KEYLESS
15704
+ ].filter(Boolean);
15705
+ return [...lines, ...fixes].join(`
15706
+ `);
15707
+ }
15708
+ async readResourceKey(storage, file, cancellationToken) {
15709
+ const content = await storage.readFileToEndAsync(file, cancellationToken);
15710
+ const wrapper = this.caseInsensitiveSerializer.deserialize(content);
15711
+ if (!wrapper?.resource)
15712
+ throw new Error(`No resource in ${file}`);
15713
+ return wrapper.resource.key;
15714
+ }
15266
15715
  async writeAsync(context, solution, cancellationToken) {
15267
15716
  patchAppPackageLinkage(solution);
15268
15717
  return super.writeAsync(context, solution, cancellationToken);
@@ -15274,6 +15723,22 @@ class ArtefactPairBindingSolutionDefinitionFactory extends MultiFileSolutionDefi
15274
15723
  return new ArtefactPairBindingProvider(this.fileStorageProviderFactory, this.jsonSerializerFactory, this.loggerFactory);
15275
15724
  }
15276
15725
  }
15726
+ function findDuplicateKeys(solution) {
15727
+ const counts = new Map;
15728
+ for (const resource of solution.resources ?? []) {
15729
+ const key = resource.key;
15730
+ counts.set(key, (counts.get(key) ?? 0) + 1);
15731
+ }
15732
+ return [...counts].filter(([, count]) => count > 1).map(([key]) => key);
15733
+ }
15734
+ function isKeyless(key) {
15735
+ return typeof key !== "string" || !key;
15736
+ }
15737
+ function describeKey(key) {
15738
+ if (typeof key === "string" && key)
15739
+ return key;
15740
+ return key === undefined ? "(missing)" : JSON.stringify(key);
15741
+ }
15277
15742
  function patchAppPackageLinkage(solution) {
15278
15743
  const resources = solution.resources ?? [];
15279
15744
  const projectKeys = new Set;
@@ -15745,6 +16210,108 @@ async function createProjectInSolutionBuilder(solutionDir, projectId, projectNam
15745
16210
  await catchError(solutionBuilder.disposeAsync());
15746
16211
  return createError;
15747
16212
  }
16213
+ // ../solution-sdk/src/resources/services/catalog-lookup-failure.ts
16214
+ var NO_CLIENT_MESSAGE = "Unable to create Resource Catalog client";
16215
+ function classifyCatalogFailure(error) {
16216
+ const message = error instanceof Error ? error.message : String(error);
16217
+ if (message.includes(NO_CLIENT_MESSAGE)) {
16218
+ return { message, kind: "no_session" };
16219
+ }
16220
+ const match = /\bHTTP (\d{3})\b/.exec(message);
16221
+ const status = match ? Number(match[1]) : undefined;
16222
+ if (status === 401 || status === 403) {
16223
+ return { message, kind: "refused", status };
16224
+ }
16225
+ return { message, kind: "failed", ...status ? { status } : {} };
16226
+ }
16227
+ function stopsCatalogLookups(failure) {
16228
+ return failure.kind !== "failed";
16229
+ }
16230
+ function describeBindings(bindings) {
16231
+ return bindings.map((b) => `${b.kind} "${b.name}"`).join(", ");
16232
+ }
16233
+ function describeCause(failure) {
16234
+ switch (failure.kind) {
16235
+ case "no_session":
16236
+ return "There is no login, so the Resource Catalog could not be searched";
16237
+ case "refused":
16238
+ return `The Resource Catalog refused this login (${failure.message})`;
16239
+ default:
16240
+ return `A Resource Catalog call failed (${failure.message})`;
16241
+ }
16242
+ }
16243
+ function classify(failure) {
16244
+ const refreshAndCommit = "or run 'uip solution resources refresh' under a login the Resource Catalog accepts and commit the solution's resources. The resources already in the solution are used as they are.";
16245
+ if (failure.kind === "no_session") {
16246
+ return {
16247
+ errorCode: "authentication_required",
16248
+ retry: "RetryWillNotFix",
16249
+ instructions: `Run 'uip login', then re-run; ${refreshAndCommit}`
16250
+ };
16251
+ }
16252
+ if (failure.kind === "refused") {
16253
+ return {
16254
+ errorCode: "permission_denied",
16255
+ retry: "RetryWillNotFix",
16256
+ instructions: `Use a login the Resource Catalog accepts (a user login: 'uip login'), ${refreshAndCommit}`
16257
+ };
16258
+ }
16259
+ const status = failure.status;
16260
+ if (status === 429) {
16261
+ return {
16262
+ errorCode: "rate_limited",
16263
+ retry: "RetryLater",
16264
+ instructions: `Wait, then re-run; ${refreshAndCommit}`
16265
+ };
16266
+ }
16267
+ if (status !== undefined && status >= 500) {
16268
+ return {
16269
+ errorCode: "server_error",
16270
+ retry: "RetryLater",
16271
+ instructions: `Retry once the Resource Catalog is back; ${refreshAndCommit}`
16272
+ };
16273
+ }
16274
+ if (status !== undefined && status >= 400) {
16275
+ return {
16276
+ errorCode: "unknown_error",
16277
+ retry: "RetryWillNotFix",
16278
+ instructions: `The Resource Catalog rejected the lookup for these bindings, so a retry gets the same answer. Check them in the project's bindings, ${refreshAndCommit}`
16279
+ };
16280
+ }
16281
+ return {
16282
+ errorCode: "unknown_error",
16283
+ retry: "RetryLater",
16284
+ instructions: `Retry; if it keeps failing, ${refreshAndCommit}`
16285
+ };
16286
+ }
16287
+ function catalogLookupWarning(failure, kept, unresolved) {
16288
+ const parts = [
16289
+ `${describeCause(failure)}, so ${kept + unresolved.length} binding(s) were not checked against the cloud.`
16290
+ ];
16291
+ if (kept > 0) {
16292
+ parts.push(`${kept} already in the solution were kept as they are.`);
16293
+ }
16294
+ if (unresolved.length > 0) {
16295
+ parts.push(`Not added to the solution: ${describeBindings(unresolved)}.`);
16296
+ }
16297
+ return parts.join(" ");
16298
+ }
16299
+
16300
+ class CatalogLookupError extends Error {
16301
+ errorCode;
16302
+ retry;
16303
+ instructions;
16304
+ unresolved;
16305
+ constructor(failure, unresolved) {
16306
+ super(`${describeCause(failure)}, so these bindings could not be resolved and are not in the solution: ${describeBindings(unresolved)}.`);
16307
+ this.name = "CatalogLookupError";
16308
+ const { errorCode, retry, instructions } = classify(failure);
16309
+ this.errorCode = errorCode;
16310
+ this.retry = retry;
16311
+ this.instructions = instructions;
16312
+ this.unresolved = unresolved;
16313
+ }
16314
+ }
15748
16315
  // ../solution-sdk/src/resources/services/local-resource-matcher.ts
15749
16316
  function normalizeFolderPath(path) {
15750
16317
  if (!path)
@@ -15850,6 +16417,20 @@ async function findCatalogEntityAsync(catalog, query, match) {
15850
16417
  } while (pageCursor);
15851
16418
  return;
15852
16419
  }
16420
+ async function findCatalogEntitiesAsync(catalog, query, match) {
16421
+ const found = [];
16422
+ let pageCursor;
16423
+ do {
16424
+ const page = await catalog.searchFolderEntities({
16425
+ ...query,
16426
+ pageSize: 100,
16427
+ pageCursor
16428
+ });
16429
+ found.push(...(page.items ?? []).filter(match));
16430
+ pageCursor = page.nextPage ?? undefined;
16431
+ } while (pageCursor);
16432
+ return found;
16433
+ }
15853
16434
  function toResourceReference(entity) {
15854
16435
  return toCatalogReference({
15855
16436
  kind: entity.entityType ?? "",
@@ -15903,7 +16484,7 @@ function parseJsonString(raw) {
15903
16484
  return error ? undefined : parsed;
15904
16485
  }
15905
16486
  // ../solution-sdk/src/resources/services/resource-casing.ts
15906
- var RESOURCE_FILES_FOLDER_NAME = "resources";
16487
+ var RESOURCE_FILES_FOLDER_NAME2 = "resources";
15907
16488
  function lowerFirstChar(value) {
15908
16489
  return value ? value.charAt(0).toLowerCase() + value.slice(1) : value;
15909
16490
  }
@@ -15932,7 +16513,7 @@ async function saveCasingNormalized(builder) {
15932
16513
  }
15933
16514
  async function normalizeResourceFileCasing(solutionDir) {
15934
16515
  const fs = getFileSystem();
15935
- const root = fs.path.join(solutionDir, RESOURCE_FILES_FOLDER_NAME);
16516
+ const root = fs.path.join(solutionDir, RESOURCE_FILES_FOLDER_NAME2);
15936
16517
  if (!await fs.exists(root))
15937
16518
  return [];
15938
16519
  const byTarget = new Map;
@@ -15980,13 +16561,17 @@ function targetSegments(segments, kind, type) {
15980
16561
  const kindIndex = type ? target.length - 3 : target.length - 2;
15981
16562
  if (kindIndex < 0)
15982
16563
  return target;
15983
- if (target[kindIndex] === kind)
16564
+ if (sameIgnoringCase(target[kindIndex], kind)) {
15984
16565
  target[kindIndex] = lowerFirstChar(kind);
15985
- if (type && target[kindIndex + 1] === type) {
16566
+ }
16567
+ if (type && sameIgnoringCase(target[kindIndex + 1], type)) {
15986
16568
  target[kindIndex + 1] = lowerFirstChar(type);
15987
16569
  }
15988
16570
  return target;
15989
16571
  }
16572
+ function sameIgnoringCase(a, b) {
16573
+ return a.toLowerCase() === b.toLowerCase();
16574
+ }
15990
16575
  async function collectResourceFiles(root, segments) {
15991
16576
  const fs = getFileSystem();
15992
16577
  const [readError, names] = await catchError(fs.readdir(fs.path.join(root, ...segments)));
@@ -16059,6 +16644,118 @@ function parseResourceHeader(content) {
16059
16644
  return null;
16060
16645
  }
16061
16646
  }
16647
+ // ../solution-sdk/src/resources/services/resource-configurations.ts
16648
+ var ROOT_RESOURCE_TYPES = new Set(["resource", "solutionresource"]);
16649
+ var KEY_NOT_FOUND = /^(?:Solution)?Resource with key '([^']+)' was not found$/i;
16650
+ function isResourceKeyNotFound(error, resourceKey) {
16651
+ if (!(error instanceof Error))
16652
+ return false;
16653
+ const typed = error;
16654
+ const sameKey = (key) => key !== undefined && key.toLowerCase() === resourceKey.toLowerCase();
16655
+ if (typeof typed.resourceType === "string" && typeof typed.resourceKey === "string") {
16656
+ return ROOT_RESOURCE_TYPES.has(typed.resourceType.toLowerCase()) && sameKey(typed.resourceKey);
16657
+ }
16658
+ return sameKey(KEY_NOT_FOUND.exec(error.message.trim())?.[1]);
16659
+ }
16660
+ async function refreshArtefactSpecsAsync(builder, configurations) {
16661
+ const resources = new Map;
16662
+ const [loadError, solution] = await catchError(builder.context.loadAsync());
16663
+ if (loadError || !solution)
16664
+ return resources;
16665
+ for (const configuration of configurations) {
16666
+ const resource = solution.resources.find((r) => r.key === configuration?.key);
16667
+ if (!resource)
16668
+ continue;
16669
+ resources.set(resource.key, resource);
16670
+ if (!resource.projectKey)
16671
+ continue;
16672
+ configuration.spec = await applyEntryPointEnhancementAsync(builder.context, resource, configuration.spec ?? {});
16673
+ }
16674
+ return resources;
16675
+ }
16676
+ async function exportResourceConfigurationsAsync(services, resourceKey, hint = {}) {
16677
+ const { catalog, importer } = getRemoteResourceClients(services);
16678
+ const byKey = (item) => item.entityKey === resourceKey;
16679
+ const entity = (hint.name ? await findCatalogEntityAsync(catalog, { name: hint.name }, byKey) : undefined) ?? await findCatalogEntityAsync(catalog, {}, byKey);
16680
+ if (!entity) {
16681
+ throw new Error(`Resource '${resourceKey}' was not found in the solution or in the resource catalog`);
16682
+ }
16683
+ const payload = await importer.exportResourceAsync(toResourceReference(entity));
16684
+ const definitions = payload.resourceDefinitions ?? [];
16685
+ if (definitions.length === 0) {
16686
+ throw new Error(`FPS export for '${resourceKey}' returned no resource definitions`);
16687
+ }
16688
+ return {
16689
+ resources: definitions.map((d) => ({
16690
+ key: d.key ?? "",
16691
+ spec: d.spec ?? {},
16692
+ locks: d.locks ?? [],
16693
+ apiVersion: d.apiVersion,
16694
+ isOverridable: d.isOverridable,
16695
+ name: d.name ?? "",
16696
+ kind: d.kind ?? "",
16697
+ dependencies: (d.dependencies ?? []).map((dep) => ({
16698
+ kind: dep.kind ?? "",
16699
+ name: dep.name ?? ""
16700
+ }))
16701
+ }))
16702
+ };
16703
+ }
16704
+ async function readLocalAsync(builder, resourceKey, read) {
16705
+ if (!builder)
16706
+ return;
16707
+ const [error, value] = await catchError(read(builder));
16708
+ if (!error)
16709
+ return { builder, value };
16710
+ if (isResourceKeyNotFound(error, resourceKey))
16711
+ return;
16712
+ throw error;
16713
+ }
16714
+ async function readResourceConfigurationsAsync(services, builder, resourceKey, hint = {}) {
16715
+ const local = await readLocalAsync(builder, resourceKey, (b) => b.getAllConfigurationsAsync(resourceKey));
16716
+ if (!local) {
16717
+ return exportResourceConfigurationsAsync(services, resourceKey, hint);
16718
+ }
16719
+ await refreshArtefactSpecsAsync(local.builder, local.value?.resources ?? []);
16720
+ return local.value;
16721
+ }
16722
+ async function readResourceConfigurationAsync(services, builder, resourceKey) {
16723
+ const local = await readLocalAsync(builder, resourceKey, (b) => b.getConfigurationAsync(resourceKey));
16724
+ if (local) {
16725
+ const configuration = local.value;
16726
+ const resources2 = await refreshArtefactSpecsAsync(local.builder, [
16727
+ configuration
16728
+ ]);
16729
+ return { configuration, resource: resources2.get(configuration.key) };
16730
+ }
16731
+ const { resources } = await exportResourceConfigurationsAsync(services, resourceKey);
16732
+ const primary = resources.find((r) => r.key === resourceKey) ?? resources[0];
16733
+ const { key, spec, locks, apiVersion, isOverridable } = primary;
16734
+ return { configuration: { key, spec, locks, apiVersion, isOverridable } };
16735
+ }
16736
+ // ../solution-sdk/src/resources/services/resource-lookup.ts
16737
+ async function findResourcesByNameAsync(services, builder, { kind, name, subTypes, folderKey }) {
16738
+ const same = (a, b) => (a ?? "").toLowerCase() === b.toLowerCase();
16739
+ const ofSubType = (type) => subTypes === undefined || subTypes.some((t) => same(type, t));
16740
+ if (builder) {
16741
+ const solution = await builder.context.loadAsync();
16742
+ const local = solution.resources.filter((r) => same(r.kind, kind) && same(r.name, name) && ofSubType(r.type)).map((r) => ({
16743
+ key: r.key,
16744
+ local: true,
16745
+ folderPath: r.folders?.[0]?.fullyQualifiedName
16746
+ }));
16747
+ if (local.length > 0)
16748
+ return local;
16749
+ }
16750
+ const { catalog } = getRemoteResourceClients(services);
16751
+ const rows = await findCatalogEntitiesAsync(catalog, { name, entityTypes: [kind] }, (row) => same(row.entityType, kind) && same(row.entityName, name) && ofSubType(row.entitySubType) && (folderKey === undefined || same(row.folderKey, folderKey)));
16752
+ return rows.map((row) => ({
16753
+ key: row.entityKey ?? "",
16754
+ local: false,
16755
+ folderPath: row.fullyQualifiedName ?? undefined,
16756
+ folderKey: row.folderKey ?? undefined
16757
+ }));
16758
+ }
16062
16759
  // ../solution-sdk/src/resources/services/resource-name.ts
16063
16760
  var MAX_RESOURCE_NAME_LENGTH = 256;
16064
16761
  var UNSAFE_NAME_CHARS = /[\\/:*?"<>|]/;
@@ -16106,6 +16803,9 @@ var TYPE_IS_IDENTITY_REPLACE_OPTIONS = new Set([
16106
16803
  "SameNameAndType"
16107
16804
  ]);
16108
16805
  var BINDINGS_JSON_FALLBACK_TYPES = new Set(["agent", "function"]);
16806
+
16807
+ class OverwriteRefreshError extends Error {
16808
+ }
16109
16809
  function placeholderForType(type) {
16110
16810
  switch ((type ?? "string").toLowerCase()) {
16111
16811
  case "boolean":
@@ -16206,13 +16906,15 @@ function resolveBindingResourceIdentity(binding) {
16206
16906
  };
16207
16907
  }
16208
16908
  }
16209
- async function syncResourcesFromBindings(solutionDir, projectPaths, projectSubTypes) {
16909
+ async function syncResourcesFromBindings(solutionDir, projectPaths, projectSubTypes, projectBindings) {
16210
16910
  const result = {
16211
16911
  created: 0,
16212
16912
  imported: 0,
16213
16913
  skipped: 0,
16214
16914
  pruned: 0,
16215
- warnings: []
16915
+ projectResourcesCreated: 0,
16916
+ warnings: [],
16917
+ unresolved: []
16216
16918
  };
16217
16919
  const uipxProjects = await readUipxProjects(solutionDir);
16218
16920
  const paths = projectPaths ?? uipxProjects.map((p) => p.path);
@@ -16226,7 +16928,7 @@ async function syncResourcesFromBindings(solutionDir, projectPaths, projectSubTy
16226
16928
  return result;
16227
16929
  }
16228
16930
  const serializer = services.container.resolve(Tokens.IBindingsMetadataSerializer);
16229
- const { bindings: allBindings, parseErrors } = await collectBindings(solutionDir, paths, bindingsJsonFallbackDirs, serializer);
16931
+ const { bindings: allBindings, parseErrors } = await collectBindings(bindingsJsonFallbackDirs, serializer, bindingSources(solutionDir, paths, uipxProjects, projectBindings));
16230
16932
  if (parseErrors.length > 0) {
16231
16933
  const detail = parseErrors.map((e) => `${e.path}: ${e.reason}`).join("; ");
16232
16934
  throw new Error(`Invalid bindings file — ${detail}`);
@@ -16240,7 +16942,8 @@ async function syncResourcesFromBindings(solutionDir, projectPaths, projectSubTy
16240
16942
  logger.warn(`Failed to get solution builder: ${builderError.message}`);
16241
16943
  return result;
16242
16944
  }
16243
- await reconcileSolutionProjects(builder, solutionDir, projectSubTypes);
16945
+ const reconcileOutcome = await reconcileSolutionProjects(builder, solutionDir, projectSubTypes);
16946
+ result.projectResourcesCreated = reconcileOutcome.resourcesAdded;
16244
16947
  const memberProjectKeys = new Set(uipxProjects.map((project) => project.id.toLowerCase()));
16245
16948
  await pruneMemberClones(builder, memberProjectKeys, result);
16246
16949
  if (allBindings.length === 0) {
@@ -16255,6 +16958,28 @@ async function syncResourcesFromBindings(solutionDir, projectPaths, projectSubTy
16255
16958
  const resolveKindMetadata = await buildKindResolver(metadataReader);
16256
16959
  const solution = await builder.context.loadAsync();
16257
16960
  const knownResourceKeys = new Set((solution.resources ?? []).map((r) => r.key?.toLowerCase()).filter((k) => !!k));
16961
+ let keptUnchecked = 0;
16962
+ const resolvedKeys = new Set;
16963
+ const overwrittenKeys = new Set;
16964
+ const bindingKey = (kind, name) => `${kind}:${name ?? ""}`.toLowerCase();
16965
+ const recordUnchecked = async (error, kind, name, directCloudKey) => {
16966
+ if (error) {
16967
+ const failure = classifyCatalogFailure(error);
16968
+ if (!result.catalogLookupFailure || stopsCatalogLookups(failure) && !stopsCatalogLookups(result.catalogLookupFailure)) {
16969
+ result.catalogLookupFailure = failure;
16970
+ }
16971
+ }
16972
+ const covered = await isUncheckedBindingCovered(builder, knownResourceKeys, kind, name, directCloudKey);
16973
+ if (covered) {
16974
+ keptUnchecked++;
16975
+ result.skipped++;
16976
+ return;
16977
+ }
16978
+ result.unresolved.push({
16979
+ kind,
16980
+ name: directCloudKey ?? name
16981
+ });
16982
+ };
16258
16983
  const virtualCandidates = [];
16259
16984
  for (const binding of allBindings) {
16260
16985
  const identity = resolveBindingResourceIdentity(binding);
@@ -16284,7 +17009,12 @@ async function syncResourcesFromBindings(solutionDir, projectPaths, projectSubTy
16284
17009
  logger.info(`Skipping ${kind} "${name}" — the solution provisions this project itself; its member declaration covers the binding`);
16285
17010
  continue;
16286
17011
  }
16287
- const rcsMatch = directCloudKey ? await findResourceByKeyInRcs(builder, kind, directCloudKey, folderPath) : await findResourceInRcs(builder, kind, name, folderPath);
17012
+ const lookupsStopped = !!result.catalogLookupFailure && stopsCatalogLookups(result.catalogLookupFailure);
17013
+ const [lookupError, rcsMatch] = lookupsStopped ? [undefined, undefined] : await catchError(directCloudKey ? findResourceByKeyInRcs(builder, kind, directCloudKey, folderPath, true) : findResourceInRcs(builder, kind, name, folderPath, true));
17014
+ if (lookupsStopped || lookupError) {
17015
+ await recordUnchecked(lookupError, kind, name, directCloudKey);
17016
+ continue;
17017
+ }
16288
17018
  const resolvedType = identity.type ?? rcsMatch?.type ?? metadata?.type;
16289
17019
  if (!rcsMatch) {
16290
17020
  if (isConnection) {
@@ -16303,30 +17033,48 @@ async function syncResourcesFromBindings(solutionDir, projectPaths, projectSubTy
16303
17033
  }
16304
17034
  if (!isConnection && rcsMatch.key && knownResourceKeys.has(rcsMatch.key.toLowerCase())) {
16305
17035
  result.skipped++;
17036
+ resolvedKeys.add(bindingKey(kind, name));
16306
17037
  continue;
16307
17038
  }
16308
17039
  const callType = isConnection ? binding.metadata?.connector : resolvedType;
16309
- const [importError] = await catchError(builder.addOrUpdateResourceToSolutionAsync({
17040
+ const wasKnown = !!rcsMatch.key && knownResourceKeys.has(rcsMatch.key.toLowerCase());
17041
+ const reference = {
16310
17042
  kind,
16311
17043
  type: callType,
16312
17044
  key: rcsMatch.key,
16313
17045
  name: rcsMatch.name,
16314
17046
  folder: rcsMatch.folder
16315
- }, true));
17047
+ };
17048
+ const [importError] = await catchError(wasKnown ? refreshKnownResource(services, builder, reference, overwrittenKeys) : builder.addOrUpdateResourceToSolutionAsync(reference, true));
16316
17049
  if (!importError) {
17050
+ resolvedKeys.add(bindingKey(kind, directCloudKey ?? name));
17051
+ if (wasKnown) {
17052
+ result.skipped++;
17053
+ logger.info(`Refreshed ${kind} "${rcsMatch.name}" (key: ${rcsMatch.key}), already in solution`);
17054
+ continue;
17055
+ }
16317
17056
  if (rcsMatch.key) {
16318
17057
  knownResourceKeys.add(rcsMatch.key.toLowerCase());
17058
+ overwrittenKeys.add(rcsMatch.key.toLowerCase());
16319
17059
  }
16320
17060
  result.imported++;
16321
17061
  logger.info(`Imported ${kind} "${rcsMatch.name}" (key: ${rcsMatch.key}) into solution`);
16322
17062
  continue;
16323
17063
  }
17064
+ if (stopsCatalogLookups(classifyCatalogFailure(importError))) {
17065
+ await recordUnchecked(importError, kind, name, directCloudKey);
17066
+ continue;
17067
+ }
16324
17068
  if (isConnection) {
16325
- result.warnings.push(`Failed to import connection ${directCloudKey}: ${importError.message}`);
16326
- logger.warn(`Failed to import connection ${directCloudKey}: ${importError.message}`);
17069
+ const failedStep = importError instanceof OverwriteRefreshError ? "refresh the debug overwrite for" : "import";
17070
+ const warning = `Failed to ${failedStep} connection ${directCloudKey}: ${importError.message}`;
17071
+ result.warnings.push(warning);
17072
+ logger.warn(warning);
16327
17073
  continue;
16328
17074
  }
16329
- logger.warn(`Failed to import ${kind} "${name}" from Orchestrator: ${importError.message}. Will create locally instead.`);
17075
+ const importWarning = `Failed to import ${kind} "${name}" from Orchestrator: ${importError.message}. Created it locally instead; link it before deploy if it must point at the cloud resource.`;
17076
+ result.warnings.push(importWarning);
17077
+ logger.warn(importWarning);
16330
17078
  virtualCandidates.push({
16331
17079
  binding,
16332
17080
  kind,
@@ -16345,11 +17093,29 @@ async function syncResourcesFromBindings(solutionDir, projectPaths, projectSubTy
16345
17093
  return true;
16346
17094
  });
16347
17095
  for (const candidate of dedupedVirtuals) {
16348
- const [syncError] = await catchError(createVirtualForBinding(builder, candidate.binding, candidate.kind, candidate.type, candidate.metadata, candidate.name, candidate.folderPath, result));
17096
+ const [syncError, created] = await catchError(createVirtualForBinding(builder, candidate.binding, candidate.kind, candidate.type, candidate.metadata, candidate.name, candidate.folderPath, result));
16349
17097
  if (syncError) {
16350
17098
  logger.warn(`Failed to create virtual ${candidate.kind}/${candidate.name}: ${syncError.message}`);
17099
+ } else if (created) {
17100
+ resolvedKeys.add(bindingKey(candidate.kind, candidate.name));
16351
17101
  }
16352
17102
  }
17103
+ if (result.catalogLookupFailure) {
17104
+ const seen = new Set;
17105
+ result.unresolved = result.unresolved.filter((b) => {
17106
+ const key = bindingKey(b.kind, b.name);
17107
+ if (resolvedKeys.has(key)) {
17108
+ keptUnchecked++;
17109
+ result.skipped++;
17110
+ return false;
17111
+ }
17112
+ if (seen.has(key))
17113
+ return false;
17114
+ seen.add(key);
17115
+ return true;
17116
+ });
17117
+ result.warnings.push(catalogLookupWarning(result.catalogLookupFailure, keptUnchecked, result.unresolved));
17118
+ }
16353
17119
  const saveError = await saveAndDisposeBuilder(builder, solutionDir);
16354
17120
  if (saveError) {
16355
17121
  throw new Error(`Failed to save solution changes: ${saveError.message}`);
@@ -16377,6 +17143,43 @@ async function pruneMemberClones(builder, memberProjectKeys, result) {
16377
17143
  logger.info(`Removed duplicate ${clone.kind} "${clone.name}" (key: ${clone.key}) — the solution provisions this project itself`);
16378
17144
  }
16379
17145
  }
17146
+ async function isUncheckedBindingCovered(builder, knownResourceKeys, kind, name, directCloudKey) {
17147
+ if (directCloudKey) {
17148
+ return knownResourceKeys.has(directCloudKey.toLowerCase());
17149
+ }
17150
+ const solution = await builder.context.loadAsync();
17151
+ return !!findMatchingLocalResource(solution.resources ?? [], kind, name, undefined);
17152
+ }
17153
+ async function refreshKnownResource(services, builder, reference, overwrittenKeys) {
17154
+ const solution = await builder.context.loadAsync();
17155
+ const referenceKey = reference.key.toLowerCase();
17156
+ const existing = (solution.resources ?? []).find((resource) => resource.key?.toLowerCase() === referenceKey);
17157
+ const mediator = services.container.resolve(Tokens.IMediator);
17158
+ const response = await mediator.sendCommandAsync(new AddOrUpdateResourceToSolutionCommand(builder.context, reference, true, existing?.key));
17159
+ const sdkWroteOverwrite = response.saved && existing?.key === reference.key;
17160
+ if (!existing || sdkWroteOverwrite || overwrittenKeys.has(referenceKey)) {
17161
+ overwrittenKeys.add(referenceKey);
17162
+ return response;
17163
+ }
17164
+ const [overwriteError] = await catchError(refreshOverwrite(services, builder, reference, existing.key));
17165
+ if (overwriteError)
17166
+ throw new OverwriteRefreshError(overwriteError.message);
17167
+ overwrittenKeys.add(referenceKey);
17168
+ return response;
17169
+ }
17170
+ async function refreshOverwrite(services, builder, reference, solutionResourceKey) {
17171
+ const importer = services.container.resolve(Tokens.IImportResourceHelper);
17172
+ const payload = await importer.exportResourceAsync(reference);
17173
+ const referenceKey = reference.key.toLowerCase();
17174
+ const overwrite = [...payload.overwrites].find(([key]) => key.toLowerCase() === referenceKey)?.[1];
17175
+ if (!overwrite) {
17176
+ throw new Error(`Overwrite not found for resource key '${reference.key}' in exported payload`);
17177
+ }
17178
+ const overwrites = services.container.resolve(Tokens.IResourceOverwritesService);
17179
+ await overwrites.manageSolutionOverwritesAsync(builder.context, [
17180
+ { solutionResourceKey, overwrite }
17181
+ ]);
17182
+ }
16380
17183
  async function saveAndDisposeBuilder(builder, solutionDir) {
16381
17184
  const context = builder.context;
16382
17185
  if (!context?.forceSaveChangesAsync) {
@@ -16446,11 +17249,11 @@ async function createVirtualForBinding(builder, _binding, kind, type, metadata,
16446
17249
  if (alreadyVirtualized) {
16447
17250
  result.skipped++;
16448
17251
  logger.info(`Skipping virtual ${kind} "${name}" — existing resource "${alreadyVirtualized.name}" in solution_folder already covers this binding (requested folder "${folderPath}")`);
16449
- return;
17252
+ return true;
16450
17253
  }
16451
17254
  const minted = await mintVirtualResource(builder, kind, type, name, metadata);
16452
17255
  if (!minted)
16453
- return;
17256
+ return false;
16454
17257
  result.created++;
16455
17258
  logger.info(`Created ${kind} "${name}" in solution`);
16456
17259
  if (!virtualizable) {
@@ -16458,6 +17261,7 @@ async function createVirtualForBinding(builder, _binding, kind, type, metadata,
16458
17261
  result.warnings.push(warning);
16459
17262
  logger.warn(warning);
16460
17263
  }
17264
+ return true;
16461
17265
  }
16462
17266
  async function findResourceByKeyInRcs(builder, kind, expectedKey, folderPath, propagateErrors = false) {
16463
17267
  const expectedLower = expectedKey.toLowerCase();
@@ -16535,8 +17339,8 @@ async function searchRcsResourcesStrict(builder, kind, name) {
16535
17339
  } while (pageCursor);
16536
17340
  return allMatches;
16537
17341
  }
16538
- async function findResourceInRcs(builder, kind, name, folderPath) {
16539
- const allMatches = await searchRcsResources(builder, kind, name);
17342
+ async function findResourceInRcs(builder, kind, name, folderPath, propagateErrors = false) {
17343
+ const allMatches = propagateErrors ? await searchRcsResourcesStrict(builder, kind, name) : await searchRcsResources(builder, kind, name);
16540
17344
  if (allMatches.length === 0) {
16541
17345
  return;
16542
17346
  }
@@ -16634,9 +17438,15 @@ async function readUiprojName(uiprojPath) {
16634
17438
  return;
16635
17439
  }
16636
17440
  }
17441
+ async function snapshotResourceIdentities(builder) {
17442
+ const [loadError, solution] = await catchError(builder.context.loadAsync());
17443
+ if (loadError || !solution)
17444
+ return;
17445
+ return new Set((solution.resources ?? []).map((resource) => resource.key ? resource.key.toLowerCase() : `${resource.kind}:${resource.name}`.toLowerCase()));
17446
+ }
16637
17447
  async function reconcileSolutionProjects(builder, solutionDir, projectSubTypes) {
16638
17448
  const fs = getFileSystem();
16639
- const outcome = { projectsCount: 0 };
17449
+ const outcome = { projectsCount: 0, resourcesAdded: 0 };
16640
17450
  const uipxProjects = await readUipxProjects(solutionDir);
16641
17451
  const projectDetails = uipxProjects.flatMap((project) => {
16642
17452
  const reconcileType = mapUipxTypeToReconcileType(project.type);
@@ -16654,6 +17464,7 @@ async function reconcileSolutionProjects(builder, solutionDir, projectSubTypes)
16654
17464
  if (projectDetails.length === 0)
16655
17465
  return outcome;
16656
17466
  const solutionName = fs.path.basename(solutionDir);
17467
+ const before = await snapshotResourceIdentities(builder);
16657
17468
  const [reconcileError] = await catchError(builder.reconcileProjectsAsync({
16658
17469
  solutionName,
16659
17470
  projects: projectDetails
@@ -16663,6 +17474,10 @@ async function reconcileSolutionProjects(builder, solutionDir, projectSubTypes)
16663
17474
  return outcome;
16664
17475
  }
16665
17476
  outcome.projectsCount = projectDetails.length;
17477
+ const after = before && await snapshotResourceIdentities(builder);
17478
+ if (before && after) {
17479
+ outcome.resourcesAdded = [...after].filter((identity) => !before.has(identity)).length;
17480
+ }
16666
17481
  logger.info(`Reconciled ${projectDetails.length} .uipx project(s) in solution ${solutionName}`);
16667
17482
  return outcome;
16668
17483
  }
@@ -16704,12 +17519,48 @@ function findBindingsSchemaError(content) {
16704
17519
  }
16705
17520
  return null;
16706
17521
  }
16707
- async function collectBindings(solutionDir, projectPaths, bindingsJsonFallbackDirs, serializer) {
17522
+ function bindingSources(solutionDir, projectPaths, projects, projectBindings) {
17523
+ const sources = [{ directory: solutionDir }];
17524
+ const fileDirectories = new Set([solutionDir]);
17525
+ const contributedIds = new Set;
17526
+ for (const directory of new Set(projectPaths)) {
17527
+ const owners = projects.filter((project) => project.path === directory);
17528
+ for (const project of owners) {
17529
+ const bindings = projectBindings?.get(project.id);
17530
+ if (bindings === undefined || contributedIds.has(project.id))
17531
+ continue;
17532
+ contributedIds.add(project.id);
17533
+ sources.push({
17534
+ directory,
17535
+ contribution: { projectId: project.id, bindings }
17536
+ });
17537
+ }
17538
+ const needsFile = owners.length === 0 || owners.some((project) => !projectBindings?.has(project.id));
17539
+ if (needsFile && !fileDirectories.has(directory)) {
17540
+ fileDirectories.add(directory);
17541
+ sources.push({ directory });
17542
+ }
17543
+ }
17544
+ return sources;
17545
+ }
17546
+ async function collectBindings(bindingsJsonFallbackDirs, serializer, sources) {
16708
17547
  const fs = getFileSystem();
16709
17548
  const allBindings = [];
16710
17549
  const parseErrors = [];
16711
- const candidateDirs = [solutionDir, ...projectPaths];
16712
- for (const dir of candidateDirs) {
17550
+ for (const { directory: dir, contribution } of sources) {
17551
+ if (contribution) {
17552
+ if (contribution.bindings.length === 0)
17553
+ continue;
17554
+ const parsed2 = deserializeBindings(JSON.stringify({
17555
+ version: "2.0",
17556
+ resources: contribution.bindings
17557
+ }), `${dir} (bindings contributed by the project's tool; project ${contribution.projectId})`, serializer);
17558
+ if ("error" in parsed2)
17559
+ parseErrors.push(parsed2.error);
17560
+ else
17561
+ allBindings.push(...parsed2.resources);
17562
+ continue;
17563
+ }
16713
17564
  const v2Path = fs.path.join(dir, "bindings_v2.json");
16714
17565
  let bindingsPath = v2Path;
16715
17566
  let exists = await fs.exists(v2Path);
@@ -16728,37 +17579,44 @@ async function collectBindings(solutionDir, projectPaths, bindingsJsonFallbackDi
16728
17579
  });
16729
17580
  continue;
16730
17581
  }
16731
- const decoded = new TextDecoder().decode(content);
16732
- let success;
16733
- let metadata;
16734
- try {
16735
- const result = serializer.tryDeserialize(decoded);
16736
- success = result.success;
16737
- metadata = result.metadata;
16738
- } catch (err) {
16739
- parseErrors.push({
16740
- path: bindingsPath,
17582
+ const parsed = deserializeBindings(new TextDecoder().decode(content), bindingsPath, serializer);
17583
+ if ("error" in parsed)
17584
+ parseErrors.push(parsed.error);
17585
+ else
17586
+ allBindings.push(...parsed.resources);
17587
+ }
17588
+ return { bindings: allBindings, parseErrors };
17589
+ }
17590
+ function deserializeBindings(decoded, source, serializer) {
17591
+ let success;
17592
+ let metadata;
17593
+ try {
17594
+ const result = serializer.tryDeserialize(decoded);
17595
+ success = result.success;
17596
+ metadata = result.metadata;
17597
+ } catch (err) {
17598
+ return {
17599
+ error: {
17600
+ path: source,
16741
17601
  reason: findBindingsSchemaError(decoded) ?? `does not match the expected v2 bindings schema — check each resource's 'kind' and required fields${err instanceof Error ? ` (${err.message})` : ""}`
16742
- });
16743
- continue;
16744
- }
16745
- if (!success) {
16746
- parseErrors.push({
16747
- path: bindingsPath,
17602
+ }
17603
+ };
17604
+ }
17605
+ if (!success) {
17606
+ return {
17607
+ error: {
17608
+ path: source,
16748
17609
  reason: findBindingsSchemaError(decoded) ?? "does not match the expected v2 bindings schema (the serializer rejected it)"
16749
- });
16750
- continue;
16751
- }
16752
- if (!metadata?.resources?.length) {
16753
- continue;
16754
- }
16755
- allBindings.push(...metadata.resources);
17610
+ }
17611
+ };
16756
17612
  }
16757
- return { bindings: allBindings, parseErrors };
17613
+ return { resources: metadata?.resources ?? [] };
16758
17614
  }
16759
- async function syncAndLog(solutionDir, projectSubTypes) {
16760
- const [syncError, syncResult] = await catchError(syncResourcesFromBindings(solutionDir, undefined, projectSubTypes));
17615
+ async function syncAndLog(solutionDir, projectSubTypes, options) {
17616
+ const [syncError, syncResult] = await catchError(syncResourcesFromBindings(solutionDir, undefined, projectSubTypes, options?.projectBindings));
16761
17617
  if (syncError) {
17618
+ if (options?.failOnUnresolved)
17619
+ throw syncError;
16762
17620
  logger.warn(`Resource sync failed: ${syncError.message}. Continuing.`);
16763
17621
  return;
16764
17622
  }
@@ -16768,6 +17626,9 @@ async function syncAndLog(solutionDir, projectSubTypes) {
16768
17626
  for (const warning of syncResult.warnings) {
16769
17627
  logger.warn(warning);
16770
17628
  }
17629
+ if (options?.failOnUnresolved && syncResult.catalogLookupFailure && syncResult.unresolved.length > 0) {
17630
+ throw new CatalogLookupError(syncResult.catalogLookupFailure, syncResult.unresolved);
17631
+ }
16771
17632
  }
16772
17633
 
16773
17634
  // ../solution-sdk/src/resources/services/resource-refresh-service.ts
@@ -16804,7 +17665,11 @@ async function resourceRefreshAsync(solutionPath = ".", options = {}) {
16804
17665
  const resolverWarnings = subTypesError ? [
16805
17666
  `Could not resolve project subTypes: ${subTypesError.message}. Project artefacts for types that need a variant were left as they are; fix the tool install and re-run 'uip solution resources refresh'.`
16806
17667
  ] : [];
16807
- const [syncError, result] = await catchError(syncResourcesFromBindings(resolvedPath, undefined, projectSubTypes ?? new Map));
17668
+ const [bindingsError, projectBindings] = await catchError(options.resolveProjectBindingsAsync?.() ?? Promise.resolve(new Map));
17669
+ if (bindingsError) {
17670
+ resolverWarnings.push(`Could not read the bindings projects contribute: ${bindingsError.message}. Those projects were synced from any bindings_v2.json on disk instead; fix the tool install and re-run 'uip solution resources refresh'.`);
17671
+ }
17672
+ const [syncError, result] = await catchError(syncResourcesFromBindings(resolvedPath, undefined, projectSubTypes ?? new Map, projectBindings ?? new Map));
16808
17673
  if (syncError) {
16809
17674
  return {
16810
17675
  ok: false,
@@ -16818,6 +17683,7 @@ async function resourceRefreshAsync(solutionPath = ".", options = {}) {
16818
17683
  imported: result.imported,
16819
17684
  skipped: result.skipped,
16820
17685
  pruned: result.pruned,
17686
+ projectResourcesCreated: result.projectResourcesCreated,
16821
17687
  warnings: [...resolverWarnings, ...result.warnings]
16822
17688
  };
16823
17689
  }
@@ -16999,6 +17865,7 @@ function sortKeysDeep(value) {
16999
17865
  return sorted;
17000
17866
  }
17001
17867
  export {
17868
+ CatalogLookupError,
17002
17869
  EntryPointSpecEnhancer,
17003
17870
  MAX_RESOURCE_NAME_LENGTH,
17004
17871
  ProjectManifestError,
@@ -17011,7 +17878,9 @@ export {
17011
17878
  createProjectInSolutionBuilder,
17012
17879
  createResourceBuilderServices,
17013
17880
  createResourceKindMetadataResolver,
17881
+ exportResourceConfigurationsAsync,
17014
17882
  exportResourceDefinitionAsync,
17883
+ findCatalogEntitiesAsync,
17015
17884
  findCatalogEntityAsync,
17016
17885
  findMatchingLocalResource,
17017
17886
  findMatchingMemberResource,
@@ -17019,21 +17888,26 @@ export {
17019
17888
  findProjectFile,
17020
17889
  findResourceByKeyInRcs,
17021
17890
  findResourceInRcs,
17891
+ findResourcesByNameAsync,
17022
17892
  formatResourceSubtypes,
17023
17893
  getRemoteResourceClients,
17024
17894
  hasAnyTemplateRow,
17025
17895
  hasBareTemplateRow,
17026
17896
  isMissingProjectTypeError,
17027
17897
  isProjectManifestError,
17898
+ isResourceKeyNotFound,
17028
17899
  normalizeFolderPath,
17029
17900
  normalizeResourceCasing,
17030
17901
  normalizeResourceFileCasing,
17031
17902
  readProjectFile,
17903
+ readResourceConfigurationAsync,
17904
+ readResourceConfigurationsAsync,
17032
17905
  readSolutionFile,
17033
17906
  readSolutionManifest,
17034
17907
  readSpecEntryPoints,
17035
17908
  readSpecProperty,
17036
17909
  readUipxProjects,
17910
+ refreshArtefactSpecsAsync,
17037
17911
  resolveProjectDirFromManifest,
17038
17912
  resolveResourceKindMetadata,
17039
17913
  resolveSolutionFilePath,
@@ -17053,4 +17927,4 @@ export {
17053
17927
  writeSolutionFile
17054
17928
  };
17055
17929
 
17056
- //# debugId=39079007F372953464756E2164756E21
17930
+ //# debugId=6F9276B12E557AA364756E2164756E21