@uipath/project-packager 1.1.10 → 1.196.0

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 (44) hide show
  1. package/dist/browser.js +2380 -0
  2. package/dist/index.js +1331 -131
  3. package/dist/node.js +1225 -110
  4. package/dist/src/base-browser-packager-factory.d.ts +37 -0
  5. package/dist/src/base-node-packager-factory.d.ts +9 -2
  6. package/dist/src/browser-project-packager-factory.d.ts +26 -0
  7. package/dist/src/browser.d.ts +3 -0
  8. package/dist/src/i18n/locales/en.d.ts +30 -1
  9. package/dist/src/index.d.ts +6 -2
  10. package/dist/src/models/packager-config.d.ts +2 -2
  11. package/dist/src/models/packager-parameters.d.ts +8 -0
  12. package/dist/src/models/project-build-options.d.ts +4 -0
  13. package/dist/src/models/project-models.d.ts +0 -11
  14. package/dist/src/node.d.ts +18 -3
  15. package/dist/src/publish/models/publish-options.d.ts +158 -0
  16. package/dist/src/publish/node-project-publisher-factory.d.ts +6 -0
  17. package/dist/src/publish/services/local-folder-publisher.d.ts +19 -0
  18. package/dist/src/publish/services/nuget-feed-publisher.d.ts +29 -0
  19. package/dist/src/publish/services/orchestrator-feed-types.d.ts +98 -0
  20. package/dist/src/publish/services/orchestrator-feeds-service.d.ts +44 -0
  21. package/dist/src/publish/services/orchestrator-publisher.d.ts +78 -0
  22. package/dist/src/publish/services/project-publisher.d.ts +29 -0
  23. package/dist/src/services/dotnet-discovery-service.d.ts +18 -0
  24. package/dist/src/services/nupkg-resolver.d.ts +20 -0
  25. package/dist/src/services/package-sign-service.d.ts +3 -2
  26. package/dist/src/services/package-signer.d.ts +24 -0
  27. package/dist/src/services/project-loader.d.ts +0 -1
  28. package/dist/src/services/project-packager.d.ts +19 -13
  29. package/dist/src/services/project-tool-executor.d.ts +1 -1
  30. package/dist/tests/{project-packager-e2e.test.d.ts → project-packager.e2e.test.d.ts} +1 -0
  31. package/dist/tests/project-packager.spec.d.ts +1 -0
  32. package/dist/tests/publish/local-folder-publisher.spec.d.ts +1 -0
  33. package/dist/tests/publish/nuget-feed-publisher.spec.d.ts +1 -0
  34. package/dist/tests/publish/orchestrator-feeds-service.spec.d.ts +1 -0
  35. package/dist/tests/publish/orchestrator-publisher.spec.d.ts +1 -0
  36. package/dist/tests/publish/project-publisher.spec.d.ts +1 -0
  37. package/dist/tests/tools-factory-repository.spec.d.ts +1 -0
  38. package/package.json +23 -30
  39. /package/dist/tests/{governance-policy-service.test.d.ts → governance-policy-service.spec.d.ts} +0 -0
  40. /package/dist/tests/{pack-service.test.d.ts → pack-service.spec.d.ts} +0 -0
  41. /package/dist/tests/{project-loader.test.d.ts → project-loader.spec.d.ts} +0 -0
  42. /package/dist/tests/{project-packager.test.d.ts → project-pack-options-builder.spec.d.ts} +0 -0
  43. /package/dist/tests/{project-tool-executor.test.d.ts → project-tool-executor.spec.d.ts} +0 -0
  44. /package/dist/tests/{tools-factory-repository.test.d.ts → publish/node-project-publisher-factory.spec.d.ts} +0 -0
package/dist/node.js CHANGED
@@ -46,9 +46,38 @@ var de_default = {
46
46
  signing: {
47
47
  errors: {
48
48
  dotnetNotAvailable: "dotnet CLI is not available. Package signing requires dotnet CLI to be installed."
49
- },
49
+ }
50
+ },
51
+ dotnet: {
50
52
  info: {
51
- dotnetNotAvailable: "dotnet CLI is not available. Cannot sign package."
53
+ available: "dotnet CLI is available (version {version})."
54
+ },
55
+ warnings: {
56
+ notAvailable: "dotnet CLI is not available. Workflow compiler functionality and package signing will not be available."
57
+ }
58
+ },
59
+ publish: {
60
+ errors: {
61
+ atLeastOnePackage: "At least one package path is required.",
62
+ packageNotFound: "Package file not found: {path}",
63
+ unknownDestination: "Unknown publish destination: {destination}",
64
+ publishFailed: "Publish failed: {message}",
65
+ failedToReadPackage: "Failed to read package file: {path}",
66
+ localFolderRequired: "Local folder destination requires a folderPath.",
67
+ localFolderFileExists: "File already exists at destination and overwrite is disabled: {path}",
68
+ nugetFeedUrlRequired: "NuGet feed destination requires a feedUrl.",
69
+ nugetPushFailed: "NuGet push failed for {fileName}: {status} {statusText}{body}",
70
+ nugetPushUrlResolutionFailed: "Failed to resolve NuGet push URL from {feedUrl}: {message}",
71
+ orchestratorCloudUrlRequired: "Orchestrator destination requires connectionInfo.cloudUrl.",
72
+ orchestratorCustomPublishUrlRequired: "OrchestratorCustom destination requires a publishUrl.",
73
+ orchestratorFeedResolutionFailed: "Could not resolve a target Orchestrator feed: {message}",
74
+ orchestratorFeedNotFound: "No accessible Orchestrator feed matches destination {kind}. Available feeds: {available}",
75
+ orchestratorPersonalWorkspaceFolderNotFound: "No personal-workspace folder is accessible — make sure the authenticated user has a personal workspace. Folders returned: {folders}",
76
+ orchestratorNoPackages: "No package files were provided to publish.",
77
+ orchestratorPublishFailed: "Orchestrator publish failed: {status} {statusText}{body}",
78
+ orchestratorUrlRequired: "Orchestrator URL is required.",
79
+ getAccessibleFeedsFailed: "GetAccessibleFeeds failed: {status} {statusText}{body}",
80
+ getFoldersForCurrentUserFailed: "GetAllFoldersForCurrentUser failed: {status} {statusText}{body}"
52
81
  }
53
82
  }
54
83
  }
@@ -100,9 +129,38 @@ var en = {
100
129
  signing: {
101
130
  errors: {
102
131
  dotnetNotAvailable: "dotnet CLI is not available. Package signing requires dotnet CLI to be installed."
103
- },
132
+ }
133
+ },
134
+ dotnet: {
104
135
  info: {
105
- dotnetNotAvailable: "dotnet CLI is not available. Cannot sign package."
136
+ available: "dotnet CLI is available (version {version})."
137
+ },
138
+ warnings: {
139
+ notAvailable: "dotnet CLI is not available. Workflow compiler functionality and package signing will not be available."
140
+ }
141
+ },
142
+ publish: {
143
+ errors: {
144
+ atLeastOnePackage: "At least one package path is required.",
145
+ packageNotFound: "Package file not found: {path}",
146
+ unknownDestination: "Unknown publish destination: {destination}",
147
+ publishFailed: "Publish failed: {message}",
148
+ failedToReadPackage: "Failed to read package file: {path}",
149
+ localFolderRequired: "Local folder destination requires a folderPath.",
150
+ localFolderFileExists: "File already exists at destination and overwrite is disabled: {path}",
151
+ nugetFeedUrlRequired: "NuGet feed destination requires a feedUrl.",
152
+ nugetPushFailed: "NuGet push failed for {fileName}: {status} {statusText}{body}",
153
+ nugetPushUrlResolutionFailed: "Failed to resolve NuGet push URL from {feedUrl}: {message}",
154
+ orchestratorCloudUrlRequired: "Orchestrator destination requires connectionInfo.cloudUrl.",
155
+ orchestratorCustomPublishUrlRequired: "OrchestratorCustom destination requires a publishUrl.",
156
+ orchestratorFeedResolutionFailed: "Could not resolve a target Orchestrator feed: {message}",
157
+ orchestratorFeedNotFound: "No accessible Orchestrator feed matches destination {kind}. Available feeds: {available}",
158
+ orchestratorPersonalWorkspaceFolderNotFound: "No personal-workspace folder is accessible — make sure the authenticated user has a personal workspace. Folders returned: {folders}",
159
+ orchestratorNoPackages: "No package files were provided to publish.",
160
+ orchestratorPublishFailed: "Orchestrator publish failed: {status} {statusText}{body}",
161
+ orchestratorUrlRequired: "Orchestrator URL is required.",
162
+ getAccessibleFeedsFailed: "GetAccessibleFeeds failed: {status} {statusText}{body}",
163
+ getFoldersForCurrentUserFailed: "GetAllFoldersForCurrentUser failed: {status} {statusText}{body}"
106
164
  }
107
165
  }
108
166
  }
@@ -153,9 +211,38 @@ var es_default = {
153
211
  signing: {
154
212
  errors: {
155
213
  dotnetNotAvailable: "dotnet CLI is not available. Package signing requires dotnet CLI to be installed."
156
- },
214
+ }
215
+ },
216
+ dotnet: {
157
217
  info: {
158
- dotnetNotAvailable: "dotnet CLI is not available. Cannot sign package."
218
+ available: "dotnet CLI is available (version {version})."
219
+ },
220
+ warnings: {
221
+ notAvailable: "dotnet CLI is not available. Workflow compiler functionality and package signing will not be available."
222
+ }
223
+ },
224
+ publish: {
225
+ errors: {
226
+ atLeastOnePackage: "At least one package path is required.",
227
+ packageNotFound: "Package file not found: {path}",
228
+ unknownDestination: "Unknown publish destination: {destination}",
229
+ publishFailed: "Publish failed: {message}",
230
+ failedToReadPackage: "Failed to read package file: {path}",
231
+ localFolderRequired: "Local folder destination requires a folderPath.",
232
+ localFolderFileExists: "File already exists at destination and overwrite is disabled: {path}",
233
+ nugetFeedUrlRequired: "NuGet feed destination requires a feedUrl.",
234
+ nugetPushFailed: "NuGet push failed for {fileName}: {status} {statusText}{body}",
235
+ nugetPushUrlResolutionFailed: "Failed to resolve NuGet push URL from {feedUrl}: {message}",
236
+ orchestratorCloudUrlRequired: "Orchestrator destination requires connectionInfo.cloudUrl.",
237
+ orchestratorCustomPublishUrlRequired: "OrchestratorCustom destination requires a publishUrl.",
238
+ orchestratorFeedResolutionFailed: "Could not resolve a target Orchestrator feed: {message}",
239
+ orchestratorFeedNotFound: "No accessible Orchestrator feed matches destination {kind}. Available feeds: {available}",
240
+ orchestratorPersonalWorkspaceFolderNotFound: "No personal-workspace folder is accessible — make sure the authenticated user has a personal workspace. Folders returned: {folders}",
241
+ orchestratorNoPackages: "No package files were provided to publish.",
242
+ orchestratorPublishFailed: "Orchestrator publish failed: {status} {statusText}{body}",
243
+ orchestratorUrlRequired: "Orchestrator URL is required.",
244
+ getAccessibleFeedsFailed: "GetAccessibleFeeds failed: {status} {statusText}{body}",
245
+ getFoldersForCurrentUserFailed: "GetAllFoldersForCurrentUser failed: {status} {statusText}{body}"
159
246
  }
160
247
  }
161
248
  }
@@ -206,9 +293,38 @@ var es_MX_default = {
206
293
  signing: {
207
294
  errors: {
208
295
  dotnetNotAvailable: "dotnet CLI is not available. Package signing requires dotnet CLI to be installed."
209
- },
296
+ }
297
+ },
298
+ dotnet: {
210
299
  info: {
211
- dotnetNotAvailable: "dotnet CLI is not available. Cannot sign package."
300
+ available: "dotnet CLI is available (version {version})."
301
+ },
302
+ warnings: {
303
+ notAvailable: "dotnet CLI is not available. Workflow compiler functionality and package signing will not be available."
304
+ }
305
+ },
306
+ publish: {
307
+ errors: {
308
+ atLeastOnePackage: "At least one package path is required.",
309
+ packageNotFound: "Package file not found: {path}",
310
+ unknownDestination: "Unknown publish destination: {destination}",
311
+ publishFailed: "Publish failed: {message}",
312
+ failedToReadPackage: "Failed to read package file: {path}",
313
+ localFolderRequired: "Local folder destination requires a folderPath.",
314
+ localFolderFileExists: "File already exists at destination and overwrite is disabled: {path}",
315
+ nugetFeedUrlRequired: "NuGet feed destination requires a feedUrl.",
316
+ nugetPushFailed: "NuGet push failed for {fileName}: {status} {statusText}{body}",
317
+ nugetPushUrlResolutionFailed: "Failed to resolve NuGet push URL from {feedUrl}: {message}",
318
+ orchestratorCloudUrlRequired: "Orchestrator destination requires connectionInfo.cloudUrl.",
319
+ orchestratorCustomPublishUrlRequired: "OrchestratorCustom destination requires a publishUrl.",
320
+ orchestratorFeedResolutionFailed: "Could not resolve a target Orchestrator feed: {message}",
321
+ orchestratorFeedNotFound: "No accessible Orchestrator feed matches destination {kind}. Available feeds: {available}",
322
+ orchestratorPersonalWorkspaceFolderNotFound: "No personal-workspace folder is accessible — make sure the authenticated user has a personal workspace. Folders returned: {folders}",
323
+ orchestratorNoPackages: "No package files were provided to publish.",
324
+ orchestratorPublishFailed: "Orchestrator publish failed: {status} {statusText}{body}",
325
+ orchestratorUrlRequired: "Orchestrator URL is required.",
326
+ getAccessibleFeedsFailed: "GetAccessibleFeeds failed: {status} {statusText}{body}",
327
+ getFoldersForCurrentUserFailed: "GetAllFoldersForCurrentUser failed: {status} {statusText}{body}"
212
328
  }
213
329
  }
214
330
  }
@@ -259,9 +375,38 @@ var fr_default = {
259
375
  signing: {
260
376
  errors: {
261
377
  dotnetNotAvailable: "dotnet CLI is not available. Package signing requires dotnet CLI to be installed."
262
- },
378
+ }
379
+ },
380
+ dotnet: {
263
381
  info: {
264
- dotnetNotAvailable: "dotnet CLI is not available. Cannot sign package."
382
+ available: "dotnet CLI is available (version {version})."
383
+ },
384
+ warnings: {
385
+ notAvailable: "dotnet CLI is not available. Workflow compiler functionality and package signing will not be available."
386
+ }
387
+ },
388
+ publish: {
389
+ errors: {
390
+ atLeastOnePackage: "At least one package path is required.",
391
+ packageNotFound: "Package file not found: {path}",
392
+ unknownDestination: "Unknown publish destination: {destination}",
393
+ publishFailed: "Publish failed: {message}",
394
+ failedToReadPackage: "Failed to read package file: {path}",
395
+ localFolderRequired: "Local folder destination requires a folderPath.",
396
+ localFolderFileExists: "File already exists at destination and overwrite is disabled: {path}",
397
+ nugetFeedUrlRequired: "NuGet feed destination requires a feedUrl.",
398
+ nugetPushFailed: "NuGet push failed for {fileName}: {status} {statusText}{body}",
399
+ nugetPushUrlResolutionFailed: "Failed to resolve NuGet push URL from {feedUrl}: {message}",
400
+ orchestratorCloudUrlRequired: "Orchestrator destination requires connectionInfo.cloudUrl.",
401
+ orchestratorCustomPublishUrlRequired: "OrchestratorCustom destination requires a publishUrl.",
402
+ orchestratorFeedResolutionFailed: "Could not resolve a target Orchestrator feed: {message}",
403
+ orchestratorFeedNotFound: "No accessible Orchestrator feed matches destination {kind}. Available feeds: {available}",
404
+ orchestratorPersonalWorkspaceFolderNotFound: "No personal-workspace folder is accessible — make sure the authenticated user has a personal workspace. Folders returned: {folders}",
405
+ orchestratorNoPackages: "No package files were provided to publish.",
406
+ orchestratorPublishFailed: "Orchestrator publish failed: {status} {statusText}{body}",
407
+ orchestratorUrlRequired: "Orchestrator URL is required.",
408
+ getAccessibleFeedsFailed: "GetAccessibleFeeds failed: {status} {statusText}{body}",
409
+ getFoldersForCurrentUserFailed: "GetAllFoldersForCurrentUser failed: {status} {statusText}{body}"
265
410
  }
266
411
  }
267
412
  }
@@ -312,9 +457,38 @@ var ja_default = {
312
457
  signing: {
313
458
  errors: {
314
459
  dotnetNotAvailable: "dotnet CLI is not available. Package signing requires dotnet CLI to be installed."
315
- },
460
+ }
461
+ },
462
+ dotnet: {
316
463
  info: {
317
- dotnetNotAvailable: "dotnet CLI is not available. Cannot sign package."
464
+ available: "dotnet CLI is available (version {version})."
465
+ },
466
+ warnings: {
467
+ notAvailable: "dotnet CLI is not available. Workflow compiler functionality and package signing will not be available."
468
+ }
469
+ },
470
+ publish: {
471
+ errors: {
472
+ atLeastOnePackage: "At least one package path is required.",
473
+ packageNotFound: "Package file not found: {path}",
474
+ unknownDestination: "Unknown publish destination: {destination}",
475
+ publishFailed: "Publish failed: {message}",
476
+ failedToReadPackage: "Failed to read package file: {path}",
477
+ localFolderRequired: "Local folder destination requires a folderPath.",
478
+ localFolderFileExists: "File already exists at destination and overwrite is disabled: {path}",
479
+ nugetFeedUrlRequired: "NuGet feed destination requires a feedUrl.",
480
+ nugetPushFailed: "NuGet push failed for {fileName}: {status} {statusText}{body}",
481
+ nugetPushUrlResolutionFailed: "Failed to resolve NuGet push URL from {feedUrl}: {message}",
482
+ orchestratorCloudUrlRequired: "Orchestrator destination requires connectionInfo.cloudUrl.",
483
+ orchestratorCustomPublishUrlRequired: "OrchestratorCustom destination requires a publishUrl.",
484
+ orchestratorFeedResolutionFailed: "Could not resolve a target Orchestrator feed: {message}",
485
+ orchestratorFeedNotFound: "No accessible Orchestrator feed matches destination {kind}. Available feeds: {available}",
486
+ orchestratorPersonalWorkspaceFolderNotFound: "No personal-workspace folder is accessible — make sure the authenticated user has a personal workspace. Folders returned: {folders}",
487
+ orchestratorNoPackages: "No package files were provided to publish.",
488
+ orchestratorPublishFailed: "Orchestrator publish failed: {status} {statusText}{body}",
489
+ orchestratorUrlRequired: "Orchestrator URL is required.",
490
+ getAccessibleFeedsFailed: "GetAccessibleFeeds failed: {status} {statusText}{body}",
491
+ getFoldersForCurrentUserFailed: "GetAllFoldersForCurrentUser failed: {status} {statusText}{body}"
318
492
  }
319
493
  }
320
494
  }
@@ -365,9 +539,38 @@ var ko_default = {
365
539
  signing: {
366
540
  errors: {
367
541
  dotnetNotAvailable: "dotnet CLI is not available. Package signing requires dotnet CLI to be installed."
368
- },
542
+ }
543
+ },
544
+ dotnet: {
369
545
  info: {
370
- dotnetNotAvailable: "dotnet CLI is not available. Cannot sign package."
546
+ available: "dotnet CLI is available (version {version})."
547
+ },
548
+ warnings: {
549
+ notAvailable: "dotnet CLI is not available. Workflow compiler functionality and package signing will not be available."
550
+ }
551
+ },
552
+ publish: {
553
+ errors: {
554
+ atLeastOnePackage: "At least one package path is required.",
555
+ packageNotFound: "Package file not found: {path}",
556
+ unknownDestination: "Unknown publish destination: {destination}",
557
+ publishFailed: "Publish failed: {message}",
558
+ failedToReadPackage: "Failed to read package file: {path}",
559
+ localFolderRequired: "Local folder destination requires a folderPath.",
560
+ localFolderFileExists: "File already exists at destination and overwrite is disabled: {path}",
561
+ nugetFeedUrlRequired: "NuGet feed destination requires a feedUrl.",
562
+ nugetPushFailed: "NuGet push failed for {fileName}: {status} {statusText}{body}",
563
+ nugetPushUrlResolutionFailed: "Failed to resolve NuGet push URL from {feedUrl}: {message}",
564
+ orchestratorCloudUrlRequired: "Orchestrator destination requires connectionInfo.cloudUrl.",
565
+ orchestratorCustomPublishUrlRequired: "OrchestratorCustom destination requires a publishUrl.",
566
+ orchestratorFeedResolutionFailed: "Could not resolve a target Orchestrator feed: {message}",
567
+ orchestratorFeedNotFound: "No accessible Orchestrator feed matches destination {kind}. Available feeds: {available}",
568
+ orchestratorPersonalWorkspaceFolderNotFound: "No personal-workspace folder is accessible — make sure the authenticated user has a personal workspace. Folders returned: {folders}",
569
+ orchestratorNoPackages: "No package files were provided to publish.",
570
+ orchestratorPublishFailed: "Orchestrator publish failed: {status} {statusText}{body}",
571
+ orchestratorUrlRequired: "Orchestrator URL is required.",
572
+ getAccessibleFeedsFailed: "GetAccessibleFeeds failed: {status} {statusText}{body}",
573
+ getFoldersForCurrentUserFailed: "GetAllFoldersForCurrentUser failed: {status} {statusText}{body}"
371
574
  }
372
575
  }
373
576
  }
@@ -418,9 +621,38 @@ var pt_default = {
418
621
  signing: {
419
622
  errors: {
420
623
  dotnetNotAvailable: "dotnet CLI is not available. Package signing requires dotnet CLI to be installed."
421
- },
624
+ }
625
+ },
626
+ dotnet: {
422
627
  info: {
423
- dotnetNotAvailable: "dotnet CLI is not available. Cannot sign package."
628
+ available: "dotnet CLI is available (version {version})."
629
+ },
630
+ warnings: {
631
+ notAvailable: "dotnet CLI is not available. Workflow compiler functionality and package signing will not be available."
632
+ }
633
+ },
634
+ publish: {
635
+ errors: {
636
+ atLeastOnePackage: "At least one package path is required.",
637
+ packageNotFound: "Package file not found: {path}",
638
+ unknownDestination: "Unknown publish destination: {destination}",
639
+ publishFailed: "Publish failed: {message}",
640
+ failedToReadPackage: "Failed to read package file: {path}",
641
+ localFolderRequired: "Local folder destination requires a folderPath.",
642
+ localFolderFileExists: "File already exists at destination and overwrite is disabled: {path}",
643
+ nugetFeedUrlRequired: "NuGet feed destination requires a feedUrl.",
644
+ nugetPushFailed: "NuGet push failed for {fileName}: {status} {statusText}{body}",
645
+ nugetPushUrlResolutionFailed: "Failed to resolve NuGet push URL from {feedUrl}: {message}",
646
+ orchestratorCloudUrlRequired: "Orchestrator destination requires connectionInfo.cloudUrl.",
647
+ orchestratorCustomPublishUrlRequired: "OrchestratorCustom destination requires a publishUrl.",
648
+ orchestratorFeedResolutionFailed: "Could not resolve a target Orchestrator feed: {message}",
649
+ orchestratorFeedNotFound: "No accessible Orchestrator feed matches destination {kind}. Available feeds: {available}",
650
+ orchestratorPersonalWorkspaceFolderNotFound: "No personal-workspace folder is accessible — make sure the authenticated user has a personal workspace. Folders returned: {folders}",
651
+ orchestratorNoPackages: "No package files were provided to publish.",
652
+ orchestratorPublishFailed: "Orchestrator publish failed: {status} {statusText}{body}",
653
+ orchestratorUrlRequired: "Orchestrator URL is required.",
654
+ getAccessibleFeedsFailed: "GetAccessibleFeeds failed: {status} {statusText}{body}",
655
+ getFoldersForCurrentUserFailed: "GetAllFoldersForCurrentUser failed: {status} {statusText}{body}"
424
656
  }
425
657
  }
426
658
  }
@@ -471,9 +703,38 @@ var pt_BR_default = {
471
703
  signing: {
472
704
  errors: {
473
705
  dotnetNotAvailable: "dotnet CLI is not available. Package signing requires dotnet CLI to be installed."
474
- },
706
+ }
707
+ },
708
+ dotnet: {
475
709
  info: {
476
- dotnetNotAvailable: "dotnet CLI is not available. Cannot sign package."
710
+ available: "dotnet CLI is available (version {version})."
711
+ },
712
+ warnings: {
713
+ notAvailable: "dotnet CLI is not available. Workflow compiler functionality and package signing will not be available."
714
+ }
715
+ },
716
+ publish: {
717
+ errors: {
718
+ atLeastOnePackage: "At least one package path is required.",
719
+ packageNotFound: "Package file not found: {path}",
720
+ unknownDestination: "Unknown publish destination: {destination}",
721
+ publishFailed: "Publish failed: {message}",
722
+ failedToReadPackage: "Failed to read package file: {path}",
723
+ localFolderRequired: "Local folder destination requires a folderPath.",
724
+ localFolderFileExists: "File already exists at destination and overwrite is disabled: {path}",
725
+ nugetFeedUrlRequired: "NuGet feed destination requires a feedUrl.",
726
+ nugetPushFailed: "NuGet push failed for {fileName}: {status} {statusText}{body}",
727
+ nugetPushUrlResolutionFailed: "Failed to resolve NuGet push URL from {feedUrl}: {message}",
728
+ orchestratorCloudUrlRequired: "Orchestrator destination requires connectionInfo.cloudUrl.",
729
+ orchestratorCustomPublishUrlRequired: "OrchestratorCustom destination requires a publishUrl.",
730
+ orchestratorFeedResolutionFailed: "Could not resolve a target Orchestrator feed: {message}",
731
+ orchestratorFeedNotFound: "No accessible Orchestrator feed matches destination {kind}. Available feeds: {available}",
732
+ orchestratorPersonalWorkspaceFolderNotFound: "No personal-workspace folder is accessible — make sure the authenticated user has a personal workspace. Folders returned: {folders}",
733
+ orchestratorNoPackages: "No package files were provided to publish.",
734
+ orchestratorPublishFailed: "Orchestrator publish failed: {status} {statusText}{body}",
735
+ orchestratorUrlRequired: "Orchestrator URL is required.",
736
+ getAccessibleFeedsFailed: "GetAccessibleFeeds failed: {status} {statusText}{body}",
737
+ getFoldersForCurrentUserFailed: "GetAllFoldersForCurrentUser failed: {status} {statusText}{body}"
477
738
  }
478
739
  }
479
740
  }
@@ -524,9 +785,38 @@ var ro_default = {
524
785
  signing: {
525
786
  errors: {
526
787
  dotnetNotAvailable: "dotnet CLI is not available. Package signing requires dotnet CLI to be installed."
527
- },
788
+ }
789
+ },
790
+ dotnet: {
528
791
  info: {
529
- dotnetNotAvailable: "dotnet CLI is not available. Cannot sign package."
792
+ available: "dotnet CLI is available (version {version})."
793
+ },
794
+ warnings: {
795
+ notAvailable: "dotnet CLI is not available. Workflow compiler functionality and package signing will not be available."
796
+ }
797
+ },
798
+ publish: {
799
+ errors: {
800
+ atLeastOnePackage: "At least one package path is required.",
801
+ packageNotFound: "Package file not found: {path}",
802
+ unknownDestination: "Unknown publish destination: {destination}",
803
+ publishFailed: "Publish failed: {message}",
804
+ failedToReadPackage: "Failed to read package file: {path}",
805
+ localFolderRequired: "Local folder destination requires a folderPath.",
806
+ localFolderFileExists: "File already exists at destination and overwrite is disabled: {path}",
807
+ nugetFeedUrlRequired: "NuGet feed destination requires a feedUrl.",
808
+ nugetPushFailed: "NuGet push failed for {fileName}: {status} {statusText}{body}",
809
+ nugetPushUrlResolutionFailed: "Failed to resolve NuGet push URL from {feedUrl}: {message}",
810
+ orchestratorCloudUrlRequired: "Orchestrator destination requires connectionInfo.cloudUrl.",
811
+ orchestratorCustomPublishUrlRequired: "OrchestratorCustom destination requires a publishUrl.",
812
+ orchestratorFeedResolutionFailed: "Could not resolve a target Orchestrator feed: {message}",
813
+ orchestratorFeedNotFound: "No accessible Orchestrator feed matches destination {kind}. Available feeds: {available}",
814
+ orchestratorPersonalWorkspaceFolderNotFound: "No personal-workspace folder is accessible — make sure the authenticated user has a personal workspace. Folders returned: {folders}",
815
+ orchestratorNoPackages: "No package files were provided to publish.",
816
+ orchestratorPublishFailed: "Orchestrator publish failed: {status} {statusText}{body}",
817
+ orchestratorUrlRequired: "Orchestrator URL is required.",
818
+ getAccessibleFeedsFailed: "GetAccessibleFeeds failed: {status} {statusText}{body}",
819
+ getFoldersForCurrentUserFailed: "GetAllFoldersForCurrentUser failed: {status} {statusText}{body}"
530
820
  }
531
821
  }
532
822
  }
@@ -577,9 +867,38 @@ var ru_default = {
577
867
  signing: {
578
868
  errors: {
579
869
  dotnetNotAvailable: "dotnet CLI is not available. Package signing requires dotnet CLI to be installed."
580
- },
870
+ }
871
+ },
872
+ dotnet: {
581
873
  info: {
582
- dotnetNotAvailable: "dotnet CLI is not available. Cannot sign package."
874
+ available: "dotnet CLI is available (version {version})."
875
+ },
876
+ warnings: {
877
+ notAvailable: "dotnet CLI is not available. Workflow compiler functionality and package signing will not be available."
878
+ }
879
+ },
880
+ publish: {
881
+ errors: {
882
+ atLeastOnePackage: "At least one package path is required.",
883
+ packageNotFound: "Package file not found: {path}",
884
+ unknownDestination: "Unknown publish destination: {destination}",
885
+ publishFailed: "Publish failed: {message}",
886
+ failedToReadPackage: "Failed to read package file: {path}",
887
+ localFolderRequired: "Local folder destination requires a folderPath.",
888
+ localFolderFileExists: "File already exists at destination and overwrite is disabled: {path}",
889
+ nugetFeedUrlRequired: "NuGet feed destination requires a feedUrl.",
890
+ nugetPushFailed: "NuGet push failed for {fileName}: {status} {statusText}{body}",
891
+ nugetPushUrlResolutionFailed: "Failed to resolve NuGet push URL from {feedUrl}: {message}",
892
+ orchestratorCloudUrlRequired: "Orchestrator destination requires connectionInfo.cloudUrl.",
893
+ orchestratorCustomPublishUrlRequired: "OrchestratorCustom destination requires a publishUrl.",
894
+ orchestratorFeedResolutionFailed: "Could not resolve a target Orchestrator feed: {message}",
895
+ orchestratorFeedNotFound: "No accessible Orchestrator feed matches destination {kind}. Available feeds: {available}",
896
+ orchestratorPersonalWorkspaceFolderNotFound: "No personal-workspace folder is accessible — make sure the authenticated user has a personal workspace. Folders returned: {folders}",
897
+ orchestratorNoPackages: "No package files were provided to publish.",
898
+ orchestratorPublishFailed: "Orchestrator publish failed: {status} {statusText}{body}",
899
+ orchestratorUrlRequired: "Orchestrator URL is required.",
900
+ getAccessibleFeedsFailed: "GetAccessibleFeeds failed: {status} {statusText}{body}",
901
+ getFoldersForCurrentUserFailed: "GetAllFoldersForCurrentUser failed: {status} {statusText}{body}"
583
902
  }
584
903
  }
585
904
  }
@@ -630,9 +949,38 @@ var tr_default = {
630
949
  signing: {
631
950
  errors: {
632
951
  dotnetNotAvailable: "dotnet CLI is not available. Package signing requires dotnet CLI to be installed."
633
- },
952
+ }
953
+ },
954
+ dotnet: {
634
955
  info: {
635
- dotnetNotAvailable: "dotnet CLI is not available. Cannot sign package."
956
+ available: "dotnet CLI is available (version {version})."
957
+ },
958
+ warnings: {
959
+ notAvailable: "dotnet CLI is not available. Workflow compiler functionality and package signing will not be available."
960
+ }
961
+ },
962
+ publish: {
963
+ errors: {
964
+ atLeastOnePackage: "At least one package path is required.",
965
+ packageNotFound: "Package file not found: {path}",
966
+ unknownDestination: "Unknown publish destination: {destination}",
967
+ publishFailed: "Publish failed: {message}",
968
+ failedToReadPackage: "Failed to read package file: {path}",
969
+ localFolderRequired: "Local folder destination requires a folderPath.",
970
+ localFolderFileExists: "File already exists at destination and overwrite is disabled: {path}",
971
+ nugetFeedUrlRequired: "NuGet feed destination requires a feedUrl.",
972
+ nugetPushFailed: "NuGet push failed for {fileName}: {status} {statusText}{body}",
973
+ nugetPushUrlResolutionFailed: "Failed to resolve NuGet push URL from {feedUrl}: {message}",
974
+ orchestratorCloudUrlRequired: "Orchestrator destination requires connectionInfo.cloudUrl.",
975
+ orchestratorCustomPublishUrlRequired: "OrchestratorCustom destination requires a publishUrl.",
976
+ orchestratorFeedResolutionFailed: "Could not resolve a target Orchestrator feed: {message}",
977
+ orchestratorFeedNotFound: "No accessible Orchestrator feed matches destination {kind}. Available feeds: {available}",
978
+ orchestratorPersonalWorkspaceFolderNotFound: "No personal-workspace folder is accessible — make sure the authenticated user has a personal workspace. Folders returned: {folders}",
979
+ orchestratorNoPackages: "No package files were provided to publish.",
980
+ orchestratorPublishFailed: "Orchestrator publish failed: {status} {statusText}{body}",
981
+ orchestratorUrlRequired: "Orchestrator URL is required.",
982
+ getAccessibleFeedsFailed: "GetAccessibleFeeds failed: {status} {statusText}{body}",
983
+ getFoldersForCurrentUserFailed: "GetAllFoldersForCurrentUser failed: {status} {statusText}{body}"
636
984
  }
637
985
  }
638
986
  }
@@ -683,9 +1031,38 @@ var zh_CN_default = {
683
1031
  signing: {
684
1032
  errors: {
685
1033
  dotnetNotAvailable: "dotnet CLI is not available. Package signing requires dotnet CLI to be installed."
686
- },
1034
+ }
1035
+ },
1036
+ dotnet: {
687
1037
  info: {
688
- dotnetNotAvailable: "dotnet CLI is not available. Cannot sign package."
1038
+ available: "dotnet CLI is available (version {version})."
1039
+ },
1040
+ warnings: {
1041
+ notAvailable: "dotnet CLI is not available. Workflow compiler functionality and package signing will not be available."
1042
+ }
1043
+ },
1044
+ publish: {
1045
+ errors: {
1046
+ atLeastOnePackage: "At least one package path is required.",
1047
+ packageNotFound: "Package file not found: {path}",
1048
+ unknownDestination: "Unknown publish destination: {destination}",
1049
+ publishFailed: "Publish failed: {message}",
1050
+ failedToReadPackage: "Failed to read package file: {path}",
1051
+ localFolderRequired: "Local folder destination requires a folderPath.",
1052
+ localFolderFileExists: "File already exists at destination and overwrite is disabled: {path}",
1053
+ nugetFeedUrlRequired: "NuGet feed destination requires a feedUrl.",
1054
+ nugetPushFailed: "NuGet push failed for {fileName}: {status} {statusText}{body}",
1055
+ nugetPushUrlResolutionFailed: "Failed to resolve NuGet push URL from {feedUrl}: {message}",
1056
+ orchestratorCloudUrlRequired: "Orchestrator destination requires connectionInfo.cloudUrl.",
1057
+ orchestratorCustomPublishUrlRequired: "OrchestratorCustom destination requires a publishUrl.",
1058
+ orchestratorFeedResolutionFailed: "Could not resolve a target Orchestrator feed: {message}",
1059
+ orchestratorFeedNotFound: "No accessible Orchestrator feed matches destination {kind}. Available feeds: {available}",
1060
+ orchestratorPersonalWorkspaceFolderNotFound: "No personal-workspace folder is accessible — make sure the authenticated user has a personal workspace. Folders returned: {folders}",
1061
+ orchestratorNoPackages: "No package files were provided to publish.",
1062
+ orchestratorPublishFailed: "Orchestrator publish failed: {status} {statusText}{body}",
1063
+ orchestratorUrlRequired: "Orchestrator URL is required.",
1064
+ getAccessibleFeedsFailed: "GetAccessibleFeeds failed: {status} {statusText}{body}",
1065
+ getFoldersForCurrentUserFailed: "GetAllFoldersForCurrentUser failed: {status} {statusText}{body}"
689
1066
  }
690
1067
  }
691
1068
  }
@@ -736,9 +1113,38 @@ var zh_TW_default = {
736
1113
  signing: {
737
1114
  errors: {
738
1115
  dotnetNotAvailable: "dotnet CLI is not available. Package signing requires dotnet CLI to be installed."
739
- },
1116
+ }
1117
+ },
1118
+ dotnet: {
740
1119
  info: {
741
- dotnetNotAvailable: "dotnet CLI is not available. Cannot sign package."
1120
+ available: "dotnet CLI is available (version {version})."
1121
+ },
1122
+ warnings: {
1123
+ notAvailable: "dotnet CLI is not available. Workflow compiler functionality and package signing will not be available."
1124
+ }
1125
+ },
1126
+ publish: {
1127
+ errors: {
1128
+ atLeastOnePackage: "At least one package path is required.",
1129
+ packageNotFound: "Package file not found: {path}",
1130
+ unknownDestination: "Unknown publish destination: {destination}",
1131
+ publishFailed: "Publish failed: {message}",
1132
+ failedToReadPackage: "Failed to read package file: {path}",
1133
+ localFolderRequired: "Local folder destination requires a folderPath.",
1134
+ localFolderFileExists: "File already exists at destination and overwrite is disabled: {path}",
1135
+ nugetFeedUrlRequired: "NuGet feed destination requires a feedUrl.",
1136
+ nugetPushFailed: "NuGet push failed for {fileName}: {status} {statusText}{body}",
1137
+ nugetPushUrlResolutionFailed: "Failed to resolve NuGet push URL from {feedUrl}: {message}",
1138
+ orchestratorCloudUrlRequired: "Orchestrator destination requires connectionInfo.cloudUrl.",
1139
+ orchestratorCustomPublishUrlRequired: "OrchestratorCustom destination requires a publishUrl.",
1140
+ orchestratorFeedResolutionFailed: "Could not resolve a target Orchestrator feed: {message}",
1141
+ orchestratorFeedNotFound: "No accessible Orchestrator feed matches destination {kind}. Available feeds: {available}",
1142
+ orchestratorPersonalWorkspaceFolderNotFound: "No personal-workspace folder is accessible — make sure the authenticated user has a personal workspace. Folders returned: {folders}",
1143
+ orchestratorNoPackages: "No package files were provided to publish.",
1144
+ orchestratorPublishFailed: "Orchestrator publish failed: {status} {statusText}{body}",
1145
+ orchestratorUrlRequired: "Orchestrator URL is required.",
1146
+ getAccessibleFeedsFailed: "GetAccessibleFeeds failed: {status} {statusText}{body}",
1147
+ getFoldersForCurrentUserFailed: "GetAllFoldersForCurrentUser failed: {status} {statusText}{body}"
742
1148
  }
743
1149
  }
744
1150
  }
@@ -789,9 +1195,38 @@ var zu_default = {
789
1195
  signing: {
790
1196
  errors: {
791
1197
  dotnetNotAvailable: "dotnet CLI is not available. Package signing requires dotnet CLI to be installed."
792
- },
1198
+ }
1199
+ },
1200
+ dotnet: {
793
1201
  info: {
794
- dotnetNotAvailable: "dotnet CLI is not available. Cannot sign package."
1202
+ available: "dotnet CLI is available (version {version})."
1203
+ },
1204
+ warnings: {
1205
+ notAvailable: "dotnet CLI is not available. Workflow compiler functionality and package signing will not be available."
1206
+ }
1207
+ },
1208
+ publish: {
1209
+ errors: {
1210
+ atLeastOnePackage: "At least one package path is required.",
1211
+ packageNotFound: "Package file not found: {path}",
1212
+ unknownDestination: "Unknown publish destination: {destination}",
1213
+ publishFailed: "Publish failed: {message}",
1214
+ failedToReadPackage: "Failed to read package file: {path}",
1215
+ localFolderRequired: "Local folder destination requires a folderPath.",
1216
+ localFolderFileExists: "File already exists at destination and overwrite is disabled: {path}",
1217
+ nugetFeedUrlRequired: "NuGet feed destination requires a feedUrl.",
1218
+ nugetPushFailed: "NuGet push failed for {fileName}: {status} {statusText}{body}",
1219
+ nugetPushUrlResolutionFailed: "Failed to resolve NuGet push URL from {feedUrl}: {message}",
1220
+ orchestratorCloudUrlRequired: "Orchestrator destination requires connectionInfo.cloudUrl.",
1221
+ orchestratorCustomPublishUrlRequired: "OrchestratorCustom destination requires a publishUrl.",
1222
+ orchestratorFeedResolutionFailed: "Could not resolve a target Orchestrator feed: {message}",
1223
+ orchestratorFeedNotFound: "No accessible Orchestrator feed matches destination {kind}. Available feeds: {available}",
1224
+ orchestratorPersonalWorkspaceFolderNotFound: "No personal-workspace folder is accessible — make sure the authenticated user has a personal workspace. Folders returned: {folders}",
1225
+ orchestratorNoPackages: "No package files were provided to publish.",
1226
+ orchestratorPublishFailed: "Orchestrator publish failed: {status} {statusText}{body}",
1227
+ orchestratorUrlRequired: "Orchestrator URL is required.",
1228
+ getAccessibleFeedsFailed: "GetAccessibleFeeds failed: {status} {statusText}{body}",
1229
+ getFoldersForCurrentUserFailed: "GetAllFoldersForCurrentUser failed: {status} {statusText}{body}"
795
1230
  }
796
1231
  }
797
1232
  }
@@ -816,20 +1251,20 @@ I18nManager.registerTranslations("zu", zu_default);
816
1251
 
817
1252
  // src/node.ts
818
1253
  import {
819
- ConsoleTelemetryProvider as ConsoleTelemetryProvider2,
1254
+ DebugTelemetryProvider as DebugTelemetryProvider2,
820
1255
  NodeContextStorage as NodeContextStorage2,
821
1256
  TelemetryService as TelemetryService2
822
- } from "@uipath/telemetry/node";
1257
+ } from "@uipath/common";
1258
+ import { ConsoleTelemetryProvider } from "@uipath/common/telemetry";
823
1259
 
824
1260
  // src/base-node-packager-factory.ts
825
- import { execSync } from "node:child_process";
826
- import { NodeFileSystem } from "@uipath/filesystem";
827
- import { translate } from "@uipath/solutionpackager-tool-core";
828
1261
  import {
829
- ConsoleTelemetryProvider,
1262
+ DebugTelemetryProvider,
830
1263
  NodeContextStorage,
831
1264
  TelemetryService
832
- } from "@uipath/telemetry/node";
1265
+ } from "@uipath/common";
1266
+ import { NodeFileSystem } from "@uipath/filesystem";
1267
+ import { translate } from "@uipath/solutionpackager-tool-core";
833
1268
 
834
1269
  // src/services/tool-logger.ts
835
1270
  import {
@@ -919,6 +1354,7 @@ class ToolLogger {
919
1354
 
920
1355
  // src/base-node-packager-factory.ts
921
1356
  class BaseNodePackagerFactory {
1357
+ dotnetDiscovery;
922
1358
  getOrCreateFileSystem(config) {
923
1359
  return config?.fileSystem ?? new NodeFileSystem;
924
1360
  }
@@ -926,19 +1362,21 @@ class BaseNodePackagerFactory {
926
1362
  if (config?.telemetryService) {
927
1363
  return config.telemetryService;
928
1364
  }
929
- const provider = new ConsoleTelemetryProvider;
1365
+ const provider = new DebugTelemetryProvider;
930
1366
  const contextStorage = new NodeContextStorage;
931
1367
  return new TelemetryService(provider, contextStorage);
932
1368
  }
933
1369
  checkDotnetAvailability(logger) {
934
- logger.info("Checking for dotnet CLI availability...");
935
- try {
936
- execSync("dotnet --version", {
937
- stdio: ["ignore", "pipe", "ignore"]
938
- });
939
- logger.info("dotnet CLI is available.");
940
- } catch {
941
- logger.error("dotnet CLI is not available. Workflow compiler functionality and package signing will not be available.");
1370
+ if (!this.dotnetDiscovery) {
1371
+ return;
1372
+ }
1373
+ const version = this.dotnetDiscovery.getDotnetVersion();
1374
+ if (version) {
1375
+ logger.info(translate.t("solutionpackager.dotnet.info.available", {
1376
+ version
1377
+ }));
1378
+ } else {
1379
+ logger.warn(translate.t("solutionpackager.dotnet.warnings.notAvailable"));
942
1380
  }
943
1381
  }
944
1382
  configureLogHandler(config) {
@@ -964,6 +1402,7 @@ var RulesConfigFileType;
964
1402
 
965
1403
  class PackagerParameters {
966
1404
  inputPath;
1405
+ downloadUrl;
967
1406
  logLevel = LogLevel2.Warn;
968
1407
  outputPath;
969
1408
  targetFramework;
@@ -981,12 +1420,14 @@ class ProjectRestoreOptions extends PackagerParameters {
981
1420
  class ProjectValidateOptions extends ProjectRestoreOptions {
982
1421
  validateOptions = {
983
1422
  skipAnalyze: false,
1423
+ skipValidate: false,
984
1424
  governanceFileType: "Default" /* Default */
985
1425
  };
986
1426
  }
987
1427
 
988
1428
  // src/models/project-build-options.ts
989
1429
  class ProjectBuildOptions extends ProjectValidateOptions {
1430
+ outputType;
990
1431
  }
991
1432
  // src/models/project-pack-options.ts
992
1433
  class ProjectPackOptions extends ProjectBuildOptions {
@@ -995,8 +1436,33 @@ class ProjectPackOptions extends ProjectBuildOptions {
995
1436
  signingInfo;
996
1437
  packOptions;
997
1438
  }
1439
+ // src/services/dotnet-discovery-service.ts
1440
+ import { execSync } from "node:child_process";
1441
+
1442
+ class DotnetDiscoveryService {
1443
+ cachedVersion;
1444
+ isDotnetAvailable() {
1445
+ return this.getDotnetVersion() !== undefined;
1446
+ }
1447
+ getDotnetVersion() {
1448
+ if (this.cachedVersion !== undefined) {
1449
+ return this.cachedVersion;
1450
+ }
1451
+ try {
1452
+ const output = execSync("dotnet --version", {
1453
+ stdio: ["ignore", "pipe", "ignore"],
1454
+ encoding: "utf-8"
1455
+ });
1456
+ this.cachedVersion = output.trim();
1457
+ return this.cachedVersion;
1458
+ } catch {
1459
+ return;
1460
+ }
1461
+ }
1462
+ }
1463
+
998
1464
  // src/services/package-sign-service.ts
999
- import { execSync as execSync2, spawn } from "node:child_process";
1465
+ import { spawn } from "node:child_process";
1000
1466
  import {
1001
1467
  ToolErrorCodes,
1002
1468
  ToolResult,
@@ -1004,13 +1470,14 @@ import {
1004
1470
  } from "@uipath/solutionpackager-tool-core";
1005
1471
 
1006
1472
  class NodePackageSignService {
1473
+ dotnetDiscovery;
1007
1474
  logger;
1008
- constructor(logger) {
1475
+ constructor(dotnetDiscovery, logger) {
1476
+ this.dotnetDiscovery = dotnetDiscovery;
1009
1477
  this.logger = logger;
1010
1478
  }
1011
1479
  async signPackageAsync(packagePath, certificatePath, certificatePassword, timestampServer) {
1012
- if (!this.checkAvailable()) {
1013
- this.logger.error(translate2.t("solutionpackager.signing.info.dotnetNotAvailable"));
1480
+ if (!this.dotnetDiscovery.isDotnetAvailable()) {
1014
1481
  return ToolResult.error(ToolErrorCodes.InternalError, translate2.t("solutionpackager.signing.errors.dotnetNotAvailable"));
1015
1482
  }
1016
1483
  const args = [
@@ -1056,18 +1523,6 @@ class NodePackageSignService {
1056
1523
  });
1057
1524
  });
1058
1525
  }
1059
- checkAvailable() {
1060
- try {
1061
- const output = execSync2("dotnet nuget --version", {
1062
- stdio: ["ignore", "pipe", "ignore"],
1063
- encoding: "utf-8"
1064
- });
1065
- this.logger.info(`dotnet CLI found, version ${output.trim()}`);
1066
- return true;
1067
- } catch {
1068
- return false;
1069
- }
1070
- }
1071
1526
  }
1072
1527
 
1073
1528
  // src/services/project-packager.ts
@@ -1075,6 +1530,7 @@ import {
1075
1530
  toolsFactoryRepository as defaultToolsFactoryRepository,
1076
1531
  NugetPackager,
1077
1532
  Path as Path3,
1533
+ TargetFramework,
1078
1534
  TemporaryStorageService,
1079
1535
  ToolErrorCodes as ToolErrorCodes4,
1080
1536
  ToolResult as ToolResult4,
@@ -1099,7 +1555,6 @@ var TelemetryNames;
1099
1555
  // src/services/governance-policy-service.ts
1100
1556
  import {
1101
1557
  Path,
1102
- toRelativeUrl,
1103
1558
  translate as translate3
1104
1559
  } from "@uipath/solutionpackager-tool-core";
1105
1560
  var LICENSE_TYPES = {
@@ -1136,7 +1591,7 @@ class GovernancePolicyService {
1136
1591
  this.logger.info(t("info.alreadyProvided"));
1137
1592
  return;
1138
1593
  }
1139
- const cloudUrl = connectionInfo?.cloudUrl;
1594
+ let cloudUrl = connectionInfo?.cloudUrl;
1140
1595
  const organizationId = connectionInfo?.organizationId;
1141
1596
  const tenantId = connectionInfo?.tenantId;
1142
1597
  const accessToken = connectionInfo?.accessToken;
@@ -1146,9 +1601,17 @@ class GovernancePolicyService {
1146
1601
  return;
1147
1602
  }
1148
1603
  const profileKey = validateOptions.profileKey ?? DEFAULT_PROFILE_KEY;
1149
- const orchestratorUrl = toRelativeUrl(cloudUrl);
1150
- const licenseType = await this.resolveLicenseTypeAsync(profileKey, orchestratorUrl, accessToken, cancellationToken);
1151
- const policy = await this.downloadPolicyAsync(organizationId, tenantId, accessToken, licenseType, profileKey, cancellationToken);
1604
+ let cloudOrigin;
1605
+ try {
1606
+ cloudOrigin = new URL(cloudUrl).origin;
1607
+ cloudUrl = cloudUrl.replace(/\/+$/, "");
1608
+ } catch {
1609
+ this.logger.warn(t("errors.connectionIncomplete"));
1610
+ validateOptions.governanceFileType = "Default" /* Default */;
1611
+ return;
1612
+ }
1613
+ const licenseType = await this.resolveLicenseTypeAsync(profileKey, cloudUrl, accessToken, cancellationToken);
1614
+ const policy = await this.downloadPolicyAsync(cloudOrigin, organizationId, tenantId, accessToken, licenseType, profileKey, cancellationToken);
1152
1615
  if (!policy) {
1153
1616
  validateOptions.governanceFileType = "Default" /* Default */;
1154
1617
  return;
@@ -1166,8 +1629,8 @@ class GovernancePolicyService {
1166
1629
  validateOptions.governanceFileType = "Default" /* Default */;
1167
1630
  }
1168
1631
  }
1169
- async downloadPolicyAsync(organizationId, tenantId, accessToken, licenseType, profileKey, cancellationToken) {
1170
- const policyUrl = `/${organizationId}/roboticsops_` + `/api/Policy/license/${licenseType}/product/${profileKey}/tenant/${tenantId}`;
1632
+ async downloadPolicyAsync(cloudOrigin, organizationId, tenantId, accessToken, licenseType, profileKey, cancellationToken) {
1633
+ const policyUrl = `${cloudOrigin}/${organizationId}/roboticsops_` + `/api/Policy/license/${licenseType}/product/${profileKey}/tenant/${tenantId}`;
1171
1634
  this.logger.info(t("info.downloading", { url: policyUrl }));
1172
1635
  try {
1173
1636
  const response = await this.fetchFn(policyUrl, {
@@ -1199,11 +1662,11 @@ class GovernancePolicyService {
1199
1662
  return null;
1200
1663
  }
1201
1664
  }
1202
- async resolveLicenseTypeAsync(profileKey, orchestratorUrl, accessToken, cancellationToken) {
1665
+ async resolveLicenseTypeAsync(profileKey, cloudUrl, accessToken, cancellationToken) {
1203
1666
  const isStudioWeb = profileKey === DEFAULT_PROFILE_KEY;
1204
1667
  const fallback = isStudioWeb ? LICENSE_TYPES.NoLicense : LICENSE_TYPES.Development;
1205
1668
  try {
1206
- const response = await this.fetchFn(`${orchestratorUrl}${ACQUIRE_LICENSE_PATH}`, {
1669
+ const response = await this.fetchFn(`${cloudUrl}${ACQUIRE_LICENSE_PATH}`, {
1207
1670
  method: "POST",
1208
1671
  headers: { Authorization: `Bearer ${accessToken}` },
1209
1672
  signal: cancellationToken
@@ -1239,7 +1702,7 @@ class GovernancePolicyService {
1239
1702
 
1240
1703
  // src/services/pack-service.ts
1241
1704
  class PackService {
1242
- disallowedCharsRegex = /[^\w.-]/g;
1705
+ disallowedCharsRegex = /[^\p{L}\p{N}_.-]/gu;
1243
1706
  spacesDotRegex = /[\s.]+/g;
1244
1707
  dotDashRegex = /\.{0,10}[-:]\.{0,10}/g;
1245
1708
  MaxPackageIdLength = 100;
@@ -1328,13 +1791,13 @@ class ProjectBuildOptionsValidator extends PackagerParametersValidator {
1328
1791
  // src/services/project-loader.ts
1329
1792
  import {
1330
1793
  Path as Path2,
1794
+ ProjectTool,
1331
1795
  ProjectTypes,
1332
1796
  translate as translate5
1333
1797
  } from "@uipath/solutionpackager-tool-core";
1334
1798
 
1335
1799
  class ProjectLoader {
1336
1800
  fileSystem;
1337
- static ProjectFileName = "project.uiproj";
1338
1801
  static WebAppManifestFileName = "webAppManifest.json";
1339
1802
  constructor(fileSystem) {
1340
1803
  this.fileSystem = fileSystem;
@@ -1343,7 +1806,7 @@ class ProjectLoader {
1343
1806
  if (!projectPath) {
1344
1807
  throw new Error(translate5.t("solutionpackager.projectLoader.errors.pathRequired"));
1345
1808
  }
1346
- const projectFilePath = Path2.join(projectPath, ProjectLoader.ProjectFileName);
1809
+ const projectFilePath = Path2.join(projectPath, ProjectTool.ProjectFileName);
1347
1810
  const projectFileExists = await this.fileSystem.exists(projectFilePath);
1348
1811
  if (projectFileExists) {
1349
1812
  return await this.loadFromProjectFile(projectPath, projectFilePath);
@@ -1354,7 +1817,7 @@ class ProjectLoader {
1354
1817
  return this.loadFromWebAppManifest(projectPath, webAppManifestPath);
1355
1818
  }
1356
1819
  throw new Error(translate5.t("solutionpackager.projectLoader.errors.noProjectFile", {
1357
- projectFile: ProjectLoader.ProjectFileName,
1820
+ projectFile: ProjectTool.ProjectFileName,
1358
1821
  manifestFile: ProjectLoader.WebAppManifestFileName,
1359
1822
  path: projectPath
1360
1823
  }));
@@ -1416,12 +1879,12 @@ class ProjectPackOptionsBuilder {
1416
1879
  nuGetSourcesConfigPath: parameters.nuGetSourcesConfigPath,
1417
1880
  logLevel: parameters.logLevel,
1418
1881
  skipAnalyze: parameters.validateOptions.skipAnalyze,
1419
- skipValidate: false,
1882
+ skipValidate: parameters.validateOptions.skipValidate,
1420
1883
  detailedLogPath: parameters.detailedLogPath,
1421
1884
  policyFilePath: parameters.validateOptions.governanceFilePath,
1422
1885
  policyFileType: parameters.validateOptions.governanceFileType,
1423
1886
  outputPath: parameters.outputPath,
1424
- outputType: undefined,
1887
+ outputType: parameters.outputType,
1425
1888
  projectType: project.type,
1426
1889
  package: packageInfo,
1427
1890
  skipDependencyOptimization: parameters.packOptions?.skipDependencyOptimization ?? false,
@@ -1595,10 +2058,6 @@ class ProjectPackager {
1595
2058
  this.projectLoader = new ProjectLoader(this.fileSystem);
1596
2059
  this.governancePolicyService = new GovernancePolicyService(this.fileSystem, this.temporaryStorage);
1597
2060
  }
1598
- async canPackProjectAsync(projectPath) {
1599
- const project = await this.projectLoader.loadProject(projectPath);
1600
- return this.repository.canHandleProject(project.type);
1601
- }
1602
2061
  async setupAsync(input, operationId) {
1603
2062
  this.telemetryService.setOperationId(operationId);
1604
2063
  await this.temporaryStorage.cleanup();
@@ -1642,12 +2101,14 @@ class ProjectPackager {
1642
2101
  nuGetSourcesConfigPath: options.nuGetSourcesConfigPath,
1643
2102
  logLevel: options.logLevel,
1644
2103
  skipAnalyze: options.validateOptions.skipAnalyze,
2104
+ skipValidate: options.validateOptions.skipValidate,
1645
2105
  defaultSeverity: options.validateOptions.defaultSeverity,
1646
2106
  detailedLogPath: options.detailedLogPath,
1647
2107
  policyFilePath: options.validateOptions.governanceFilePath,
1648
2108
  policyFileType: options.validateOptions.governanceFileType
1649
2109
  };
1650
- return await this.projectExecutor.validateAsync(validateOptions, uiPathProject, undefined, cancellationToken);
2110
+ const context = this.createOperationContext(options, uiPathProject);
2111
+ return await this.projectExecutor.validateAsync(validateOptions, uiPathProject, context, cancellationToken);
1651
2112
  }, cancellationToken);
1652
2113
  }
1653
2114
  async buildProjectAsync(options, cancellationToken) {
@@ -1666,12 +2127,12 @@ class ProjectPackager {
1666
2127
  nuGetSourcesConfigPath: options.nuGetSourcesConfigPath,
1667
2128
  logLevel: options.logLevel,
1668
2129
  skipAnalyze: options.validateOptions.skipAnalyze,
1669
- skipValidate: false,
2130
+ skipValidate: options.validateOptions.skipValidate,
1670
2131
  detailedLogPath: options.detailedLogPath,
1671
2132
  policyFilePath: options.validateOptions.governanceFilePath,
1672
2133
  policyFileType: options.validateOptions.governanceFileType,
1673
2134
  outputPath: options.outputPath,
1674
- outputType: undefined,
2135
+ outputType: options.outputType,
1675
2136
  projectType: uiPathProject.Type
1676
2137
  };
1677
2138
  return await this.projectExecutor.buildAsync(buildOptions, uiPathProject, undefined, cancellationToken);
@@ -1697,7 +2158,8 @@ class ProjectPackager {
1697
2158
  ProjectPath: loadedProject.projectPath,
1698
2159
  Id: loadedProject.name
1699
2160
  };
1700
- result = await this.projectExecutor.packAsync(projectPackOptions, uiPathProject, undefined, options.signingInfo, cancellationToken);
2161
+ const context = this.createOperationContext(options, uiPathProject);
2162
+ result = await this.projectExecutor.packAsync(projectPackOptions, uiPathProject, context, options.signingInfo, cancellationToken);
1701
2163
  if (result.isSuccess && result.packages.length > 0) {
1702
2164
  const destinationPackages = await this.copyPackagesToDestination(result.packages, options.destinationPath, projectPackOptions.package);
1703
2165
  result = new ToolResult4(ToolErrorCodes4.Success, undefined, destinationPackages);
@@ -1766,6 +2228,34 @@ class ProjectPackager {
1766
2228
  }
1767
2229
  });
1768
2230
  }
2231
+ createOperationContext(options, uiPathProject) {
2232
+ return {
2233
+ id: crypto.randomUUID(),
2234
+ projects: [uiPathProject],
2235
+ downloadUrl: options.downloadUrl,
2236
+ targetFramework: options.targetFramework ?? TargetFramework.Portable,
2237
+ connection: options.connection,
2238
+ logger: this.logger,
2239
+ workflowCompilerVersion: options.workflowCompilerVersion
2240
+ };
2241
+ }
2242
+ async findNupkgInParentDir(packagePath) {
2243
+ const dirName = Path3.basename(packagePath);
2244
+ const parentDir = Path3.dirname(packagePath);
2245
+ const parentFiles = await this.fileSystem.readdir(parentDir);
2246
+ const matchingFiles = parentFiles.filter((f) => f.endsWith(".nupkg") && f.startsWith(`${dirName}.`));
2247
+ return { dir: parentDir, files: matchingFiles };
2248
+ }
2249
+ async copyFileToDestination(sourcePath, destinationPath) {
2250
+ const fileName = Path3.basename(sourcePath);
2251
+ const destPath = Path3.join(destinationPath, fileName);
2252
+ const data = await this.fileSystem.readFile(sourcePath);
2253
+ if (!data) {
2254
+ throw new Error(translate6.t("solutionpackager.packager.errors.failedToReadPackage", { path: sourcePath }));
2255
+ }
2256
+ await this.fileSystem.writeFile(destPath, data);
2257
+ return destPath;
2258
+ }
1769
2259
  async copyPackagesToDestination(packagePaths, destinationPath, packageInfo) {
1770
2260
  await this.fileSystem.mkdir(destinationPath);
1771
2261
  const destinationPackages = [];
@@ -1777,33 +2267,27 @@ class ProjectPackager {
1777
2267
  if (nupkgFiles.length > 0) {
1778
2268
  for (const nupkgFile of nupkgFiles) {
1779
2269
  const filePath = Path3.join(packagePath, nupkgFile);
1780
- const destPath = Path3.join(destinationPath, nupkgFile);
1781
- const data = await this.fileSystem.readFile(filePath);
1782
- if (!data) {
1783
- throw new Error(translate6.t("solutionpackager.packager.errors.failedToReadPackage", {
1784
- path: filePath
1785
- }));
1786
- }
1787
- await this.fileSystem.writeFile(destPath, data);
1788
- destinationPackages.push(destPath);
2270
+ const dest = await this.copyFileToDestination(filePath, destinationPath);
2271
+ destinationPackages.push(dest);
1789
2272
  }
1790
2273
  } else {
1791
- const nupkgFileName = `${packageInfo.id}.${packageInfo.version}.nupkg`;
1792
- const destPath = Path3.join(destinationPath, nupkgFileName);
1793
- const packResult = await this.nugetPackager.packAsync(packagePath, packageInfo, destPath);
1794
- destinationPackages.push(packResult.outputPath);
2274
+ const parent = await this.findNupkgInParentDir(packagePath);
2275
+ if (parent.files.length > 0) {
2276
+ for (const nupkgFile of parent.files) {
2277
+ const filePath = Path3.join(parent.dir, nupkgFile);
2278
+ const dest = await this.copyFileToDestination(filePath, destinationPath);
2279
+ destinationPackages.push(dest);
2280
+ }
2281
+ } else {
2282
+ const nupkgFileName = `${packageInfo.id}.${packageInfo.version}.nupkg`;
2283
+ const destPath = Path3.join(destinationPath, nupkgFileName);
2284
+ const packResult = await this.nugetPackager.packAsync(packagePath, packageInfo, destPath);
2285
+ destinationPackages.push(packResult.outputPath);
2286
+ }
1795
2287
  }
1796
2288
  } else {
1797
- const fileName = packagePath.split(/[\\/]/).pop() || packagePath;
1798
- const destPath = Path3.join(destinationPath, fileName);
1799
- const data = await this.fileSystem.readFile(packagePath);
1800
- if (!data) {
1801
- throw new Error(translate6.t("solutionpackager.packager.errors.failedToReadPackage", {
1802
- path: packagePath
1803
- }));
1804
- }
1805
- await this.fileSystem.writeFile(destPath, data);
1806
- destinationPackages.push(destPath);
2289
+ const dest = await this.copyFileToDestination(packagePath, destinationPath);
2290
+ destinationPackages.push(dest);
1807
2291
  }
1808
2292
  }
1809
2293
  return destinationPackages;
@@ -1819,7 +2303,8 @@ class NodeProjectPackagerFactory extends BaseNodePackagerFactory {
1819
2303
  logger.info("Creating ProjectPackager instance...");
1820
2304
  const fileSystem = this.getOrCreateFileSystem(config);
1821
2305
  const telemetryService = this.getOrCreateTelemetryService(config);
1822
- const packageSignService = new NodePackageSignService(logger);
2306
+ this.dotnetDiscovery = new DotnetDiscoveryService;
2307
+ const packageSignService = new NodePackageSignService(this.dotnetDiscovery, logger);
1823
2308
  const projectPackager = new ProjectPackager(fileSystem, telemetryService, packageSignService);
1824
2309
  this.checkDotnetAvailability(logger);
1825
2310
  logger.info("ProjectPackager created successfully.");
@@ -1830,18 +2315,645 @@ async function createNodeProjectPackager(options) {
1830
2315
  const factory = new NodeProjectPackagerFactory;
1831
2316
  return factory.createAsync(options);
1832
2317
  }
2318
+ // src/publish/models/publish-options.ts
2319
+ var PublishDestinationKind;
2320
+ ((PublishDestinationKind2) => {
2321
+ PublishDestinationKind2["LocalFolder"] = "LocalFolder";
2322
+ PublishDestinationKind2["NugetFeed"] = "NugetFeed";
2323
+ PublishDestinationKind2["OrchestratorPersonalWorkspace"] = "OrchestratorPersonalWorkspace";
2324
+ PublishDestinationKind2["OrchestratorTenantProcesses"] = "OrchestratorTenantProcesses";
2325
+ PublishDestinationKind2["OrchestratorSharedLibraries"] = "OrchestratorSharedLibraries";
2326
+ PublishDestinationKind2["OrchestratorCustom"] = "OrchestratorCustom";
2327
+ })(PublishDestinationKind ||= {});
2328
+
2329
+ class ProjectPublishOptions {
2330
+ packagePaths;
2331
+ destination;
2332
+ constructor(packagePaths, destination) {
2333
+ this.packagePaths = packagePaths;
2334
+ this.destination = destination;
2335
+ }
2336
+ }
2337
+ // src/publish/services/project-publisher.ts
2338
+ import {
2339
+ ToolErrorCodes as ToolErrorCodes8,
2340
+ ToolResult as ToolResult8,
2341
+ translate as translate11
2342
+ } from "@uipath/solutionpackager-tool-core";
2343
+
2344
+ // src/publish/services/local-folder-publisher.ts
2345
+ import {
2346
+ ToolErrorCodes as ToolErrorCodes5,
2347
+ ToolResult as ToolResult5,
2348
+ translate as translate7
2349
+ } from "@uipath/solutionpackager-tool-core";
2350
+ class LocalFolderPublisher {
2351
+ fileSystem;
2352
+ logger;
2353
+ constructor(fileSystem) {
2354
+ this.fileSystem = fileSystem;
2355
+ this.logger = new ToolLogger("ProjectPublisher", "LocalFolder");
2356
+ }
2357
+ async publishAsync(packagePaths, destination) {
2358
+ const overwrite = destination.overwrite ?? true;
2359
+ if (!destination.folderPath) {
2360
+ return ToolResult5.error(ToolErrorCodes5.InternalError, translate7.t("solutionpackager.publish.errors.localFolderRequired"));
2361
+ }
2362
+ if (!await this.fileSystem.exists(destination.folderPath)) {
2363
+ await this.fileSystem.mkdir(destination.folderPath);
2364
+ }
2365
+ const written = [];
2366
+ for (const sourcePath of packagePaths) {
2367
+ const fileName = this.fileSystem.path.basename(sourcePath);
2368
+ const destPath = this.fileSystem.path.join(destination.folderPath, fileName);
2369
+ if (!overwrite && await this.fileSystem.exists(destPath)) {
2370
+ return ToolResult5.error(ToolErrorCodes5.InternalError, translate7.t("solutionpackager.publish.errors.localFolderFileExists", { path: destPath }));
2371
+ }
2372
+ const data = await this.fileSystem.readFile(sourcePath);
2373
+ if (!data) {
2374
+ return ToolResult5.error(ToolErrorCodes5.InternalError, translate7.t("solutionpackager.publish.errors.failedToReadPackage", { path: sourcePath }));
2375
+ }
2376
+ await this.fileSystem.writeFile(destPath, data);
2377
+ written.push(destPath);
2378
+ this.logger.info(`Copied package to ${destPath}`);
2379
+ }
2380
+ return new ToolResult5(ToolErrorCodes5.Success, undefined, written);
2381
+ }
2382
+ }
2383
+
2384
+ // src/publish/services/nuget-feed-publisher.ts
2385
+ import {
2386
+ ToolErrorCodes as ToolErrorCodes6,
2387
+ ToolResult as ToolResult6,
2388
+ translate as translate8
2389
+ } from "@uipath/solutionpackager-tool-core";
2390
+ var NUGET_V3_PACKAGE_PUBLISH_TYPE = "PackagePublish/2.0.0";
2391
+
2392
+ class NugetFeedPublisher {
2393
+ fileSystem;
2394
+ logger;
2395
+ constructor(fileSystem) {
2396
+ this.fileSystem = fileSystem;
2397
+ this.logger = new ToolLogger("ProjectPublisher", "NugetFeed");
2398
+ }
2399
+ async publishAsync(packagePaths, destination) {
2400
+ if (!destination.feedUrl) {
2401
+ return ToolResult6.error(ToolErrorCodes6.InternalError, translate8.t("solutionpackager.publish.errors.nugetFeedUrlRequired"));
2402
+ }
2403
+ let pushUrl;
2404
+ try {
2405
+ pushUrl = await this.resolvePushUrl(destination.feedUrl, destination.apiKey);
2406
+ } catch (error) {
2407
+ const message = error instanceof Error ? error.message : String(error);
2408
+ return ToolResult6.error(ToolErrorCodes6.InternalError, translate8.t("solutionpackager.publish.errors.nugetPushUrlResolutionFailed", { feedUrl: destination.feedUrl, message }));
2409
+ }
2410
+ const published = [];
2411
+ for (const packagePath of packagePaths) {
2412
+ const data = await this.fileSystem.readFile(packagePath);
2413
+ if (!data) {
2414
+ return ToolResult6.error(ToolErrorCodes6.InternalError, translate8.t("solutionpackager.publish.errors.failedToReadPackage", { path: packagePath }));
2415
+ }
2416
+ const fileName = this.fileSystem.path.basename(packagePath);
2417
+ const form = new FormData;
2418
+ form.append("package", new Blob([data], {
2419
+ type: "application/octet-stream"
2420
+ }), fileName);
2421
+ const headers = {};
2422
+ if (destination.apiKey) {
2423
+ headers["X-NuGet-ApiKey"] = destination.apiKey;
2424
+ }
2425
+ this.logger.info(`Pushing ${fileName} to ${pushUrl}`);
2426
+ const response = await fetch(pushUrl, {
2427
+ method: "PUT",
2428
+ headers,
2429
+ body: form
2430
+ });
2431
+ if (!response.ok) {
2432
+ const body = await this.safeReadBody(response);
2433
+ return ToolResult6.error(ToolErrorCodes6.InternalError, translate8.t("solutionpackager.publish.errors.nugetPushFailed", {
2434
+ fileName,
2435
+ status: response.status,
2436
+ statusText: response.statusText,
2437
+ body: body ? ` - ${body}` : ""
2438
+ }));
2439
+ }
2440
+ published.push(packagePath);
2441
+ this.logger.info(`Pushed ${fileName} successfully.`);
2442
+ }
2443
+ return new ToolResult6(ToolErrorCodes6.Success, undefined, published);
2444
+ }
2445
+ async resolvePushUrl(feedUrl, apiKey) {
2446
+ let end = feedUrl.length;
2447
+ while (end > 0 && feedUrl.charCodeAt(end - 1) === 47)
2448
+ end--;
2449
+ const trimmed = feedUrl.slice(0, end);
2450
+ if (/\/api\/v2\/package\/?$/i.test(trimmed)) {
2451
+ return trimmed;
2452
+ }
2453
+ if (/\.json$/i.test(trimmed)) {
2454
+ return this.resolveFromServiceIndex(trimmed, apiKey);
2455
+ }
2456
+ return `${trimmed}/api/v2/package`;
2457
+ }
2458
+ async resolveFromServiceIndex(serviceIndexUrl, apiKey) {
2459
+ const headers = { Accept: "application/json" };
2460
+ if (apiKey) {
2461
+ headers["X-NuGet-ApiKey"] = apiKey;
2462
+ }
2463
+ const response = await fetch(serviceIndexUrl, { headers });
2464
+ if (!response.ok) {
2465
+ throw new Error(`service index returned ${response.status} ${response.statusText}`);
2466
+ }
2467
+ const index = await response.json();
2468
+ const resource = index.resources?.find((r) => r["@type"] === NUGET_V3_PACKAGE_PUBLISH_TYPE);
2469
+ if (!resource?.["@id"]) {
2470
+ throw new Error(`service index has no ${NUGET_V3_PACKAGE_PUBLISH_TYPE} resource`);
2471
+ }
2472
+ return resource["@id"];
2473
+ }
2474
+ async safeReadBody(response) {
2475
+ try {
2476
+ const text = await response.text();
2477
+ return text.slice(0, 500);
2478
+ } catch {
2479
+ return "";
2480
+ }
2481
+ }
2482
+ }
2483
+
2484
+ // src/publish/services/orchestrator-publisher.ts
2485
+ import {
2486
+ ToolErrorCodes as ToolErrorCodes7,
2487
+ ToolResult as ToolResult7,
2488
+ translate as translate10
2489
+ } from "@uipath/solutionpackager-tool-core";
2490
+
2491
+ // src/publish/services/orchestrator-feed-types.ts
2492
+ var PackageFeedDtoPurposeEnum = {
2493
+ Undefined: "Undefined",
2494
+ Processes: "Processes",
2495
+ Libraries: "Libraries",
2496
+ PersonalWorkspace: "PersonalWorkspace",
2497
+ FolderHierarchy: "FolderHierarchy"
2498
+ };
2499
+ var PackageFeedDtoAuthenticationTypeEnum = {
2500
+ Secure: "Secure",
2501
+ ApiKey: "ApiKey",
2502
+ Basic: "Basic"
2503
+ };
2504
+ var ExtendedFolderDtoFeedTypeEnum = {
2505
+ Undefined: "Undefined",
2506
+ Processes: "Processes",
2507
+ Libraries: "Libraries",
2508
+ PersonalWorkspace: "PersonalWorkspace",
2509
+ FolderHierarchy: "FolderHierarchy"
2510
+ };
2511
+
2512
+ // src/publish/services/orchestrator-feeds-service.ts
2513
+ import { addSdkUserAgentHeader } from "@uipath/common/sdk-user-agent";
2514
+ import { translate as translate9 } from "@uipath/solutionpackager-tool-core";
2515
+ // package.json
2516
+ var package_default = {
2517
+ name: "@uipath/project-packager",
2518
+ license: "MIT",
2519
+ version: "1.196.0",
2520
+ description: "UiPath Project Packager - core library for packing individual UiPath projects",
2521
+ type: "module",
2522
+ main: "./dist/index.js",
2523
+ exports: {
2524
+ ".": {
2525
+ types: "./dist/src/index.d.ts",
2526
+ default: "./dist/index.js"
2527
+ },
2528
+ "./node": {
2529
+ types: "./dist/src/node.d.ts",
2530
+ default: "./dist/node.js"
2531
+ },
2532
+ "./browser": {
2533
+ types: "./dist/src/browser.d.ts",
2534
+ default: "./dist/browser.js"
2535
+ }
2536
+ },
2537
+ types: "./dist/src/index.d.ts",
2538
+ repository: {
2539
+ type: "git",
2540
+ url: "https://github.com/UiPath/cli.git",
2541
+ directory: "packages/packager/project-packager"
2542
+ },
2543
+ publishConfig: {
2544
+ registry: "https://npm.pkg.github.com/"
2545
+ },
2546
+ files: [
2547
+ "dist",
2548
+ "!dist/**/*.map"
2549
+ ],
2550
+ scripts: {
2551
+ build: "bun build ./src/index.ts --outdir dist --format esm --target browser --external @uipath/solutionpackager-tool-core --external '@uipath/filesystem/*' --external @uipath/filesystem && bun build ./src/browser.ts --outdir dist --format esm --target browser --external @uipath/solutionpackager-tool-core --external '@uipath/filesystem/*' --external @uipath/filesystem && bun build ./src/node.ts --outdir dist --format esm --target node --external @uipath/solutionpackager-tool-core --external '@uipath/common/*' --external @uipath/common --external '@uipath/filesystem/*' --external @uipath/filesystem && tsc --emitDeclarationOnly --outDir dist",
2552
+ clean: "rimraf dist",
2553
+ test: "vitest run",
2554
+ e2e: "vitest run --config vitest.e2e.config.ts",
2555
+ "test:coverage": "vitest run --coverage",
2556
+ prepack: "bun run build",
2557
+ "publish:dry": "bun publish --dry-run",
2558
+ "publish:gh": "bun publish",
2559
+ "version:patch": "bun version patch --no-git-tag-version",
2560
+ "version:minor": "bun version minor --no-git-tag-version",
2561
+ "version:major": "bun version major --no-git-tag-version",
2562
+ lint: "biome check ."
2563
+ },
2564
+ dependencies: {
2565
+ "@uipath/filesystem": "workspace:*",
2566
+ "@uipath/solutionpackager-tool-core": "workspace:*",
2567
+ "@uipath/common": "workspace:*"
2568
+ },
2569
+ peerDependencies: {
2570
+ fflate: "^0.8.2"
2571
+ },
2572
+ devDependencies: {
2573
+ "@types/node": "^25.5.2",
2574
+ "@uipath/resource-builder-tool": "2025.11.0-alpha2928-3101",
2575
+ "@uipath/tool-agent": "^1.2.6",
2576
+ "@uipath/packager-tool-apiworkflow": "workspace:*",
2577
+ "@uipath/packager-tool-connector": "workspace:*",
2578
+ "@uipath/packager-tool-flow": "workspace:*",
2579
+ "@uipath/packager-tool-functions": "workspace:*",
2580
+ "@uipath/packager-tool-webapp": "workspace:*",
2581
+ "@uipath/packager-tool-workflowcompiler": "workspace:*",
2582
+ "@vitest/coverage-v8": "^4.1.6",
2583
+ jsdom: "^29.0.0",
2584
+ typescript: "^6.0.2",
2585
+ "vite-tsconfig-paths": "^6.1.1",
2586
+ vitest: "^4.1.6"
2587
+ }
2588
+ };
2589
+
2590
+ // src/publish/services/orchestrator-feeds-service.ts
2591
+ var HEADER_TENANT_ID = "X-UIPATH-TenantId";
2592
+ var FEEDS_PATH = "/api/PackageFeeds/GetFeeds";
2593
+ var FOLDERS_PATH = "/api/FoldersNavigation/GetAllFoldersForCurrentUser";
2594
+ var SDK_USER_AGENT = `${package_default.name.replace(/^@uipath\//, "")}/${package_default.version}`;
2595
+
2596
+ class OrchestratorFeedsService {
2597
+ logger;
2598
+ constructor() {
2599
+ this.logger = new ToolLogger("OrchestratorFeedsService", "Feeds");
2600
+ }
2601
+ async getAccessibleFeedsAsync(connection) {
2602
+ this.ensureOrchestratorUrl(connection);
2603
+ this.logger.info(`Fetching accessible feeds from ${connection.orchestratorUrl}`);
2604
+ try {
2605
+ const json = await orchestratorGet(connection, FEEDS_PATH);
2606
+ return Array.isArray(json) ? json : [];
2607
+ } catch (error) {
2608
+ const { status, statusText, body } = await describeResponseError(error);
2609
+ throw new Error(translate9.t("solutionpackager.publish.errors.getAccessibleFeedsFailed", { status, statusText, body }));
2610
+ }
2611
+ }
2612
+ async getFoldersForCurrentUserAsync(connection) {
2613
+ this.ensureOrchestratorUrl(connection);
2614
+ this.logger.info(`Fetching folders from ${connection.orchestratorUrl}`);
2615
+ try {
2616
+ const json = await orchestratorGet(connection, FOLDERS_PATH);
2617
+ return Array.isArray(json) ? json.map(mapExtendedFolder) : [];
2618
+ } catch (error) {
2619
+ const { status, statusText, body } = await describeResponseError(error);
2620
+ throw new Error(translate9.t("solutionpackager.publish.errors.getFoldersForCurrentUserFailed", { status, statusText, body }));
2621
+ }
2622
+ }
2623
+ ensureOrchestratorUrl(connection) {
2624
+ if (!connection.orchestratorUrl) {
2625
+ throw new Error(translate9.t("solutionpackager.publish.errors.orchestratorUrlRequired"));
2626
+ }
2627
+ }
2628
+ }
2629
+ function mapExtendedFolder(json) {
2630
+ return {
2631
+ isSelectable: json.IsSelectable,
2632
+ hasChildren: json.HasChildren,
2633
+ level: json.Level,
2634
+ key: json.Key,
2635
+ displayName: json.DisplayName,
2636
+ fullyQualifiedName: json.FullyQualifiedName,
2637
+ description: json.Description,
2638
+ folderType: json.FolderType,
2639
+ isPersonal: json.IsPersonal,
2640
+ provisionType: json.ProvisionType,
2641
+ permissionModel: json.PermissionModel,
2642
+ parentId: json.ParentId,
2643
+ parentKey: json.ParentKey,
2644
+ feedType: json.FeedType,
2645
+ id: json.Id
2646
+ };
2647
+ }
2648
+
2649
+ class OrchestratorResponseError extends Error {
2650
+ response;
2651
+ constructor(response) {
2652
+ super(`Orchestrator request failed with status ${response.status}.`);
2653
+ this.response = response;
2654
+ this.name = "OrchestratorResponseError";
2655
+ }
2656
+ }
2657
+ async function orchestratorGet(connection, relativePath) {
2658
+ const url = `${normalizeOrchestratorBasePath(connection.orchestratorUrl)}${relativePath}`;
2659
+ const response = await fetch(url, {
2660
+ method: "GET",
2661
+ headers: buildHeaders(connection)
2662
+ });
2663
+ if (!response.ok) {
2664
+ throw new OrchestratorResponseError(response);
2665
+ }
2666
+ const text = await response.text();
2667
+ if (text === "" || text === "null") {
2668
+ return null;
2669
+ }
2670
+ return JSON.parse(text);
2671
+ }
2672
+ function buildHeaders(connection) {
2673
+ const headers = {};
2674
+ if (connection.accessToken) {
2675
+ headers.Authorization = `Bearer ${connection.accessToken}`;
2676
+ }
2677
+ if (connection.tenantId) {
2678
+ headers[HEADER_TENANT_ID] = connection.tenantId;
2679
+ }
2680
+ return addSdkUserAgentHeader(headers, SDK_USER_AGENT);
2681
+ }
2682
+ function normalizeOrchestratorBasePath(orchestratorUrl) {
2683
+ let end = orchestratorUrl.length;
2684
+ while (end > 0 && orchestratorUrl.charCodeAt(end - 1) === 47)
2685
+ end--;
2686
+ const trimmed = orchestratorUrl.slice(0, end);
2687
+ return /\/orchestrator_$/i.test(trimmed) ? trimmed : `${trimmed}/orchestrator_`;
2688
+ }
2689
+ async function describeResponseError(error) {
2690
+ const response = error?.response;
2691
+ if (response) {
2692
+ let body = "";
2693
+ try {
2694
+ body = (await response.text()).slice(0, 500);
2695
+ } catch {
2696
+ body = "";
2697
+ }
2698
+ return {
2699
+ status: response.status,
2700
+ statusText: response.statusText,
2701
+ body: body ? ` - ${body}` : ""
2702
+ };
2703
+ }
2704
+ const cause = error?.cause;
2705
+ const message = cause instanceof Error ? cause.message : error instanceof Error ? error.message : String(error);
2706
+ return { status: "?", statusText: message, body: "" };
2707
+ }
2708
+
2709
+ // src/publish/services/orchestrator-publisher.ts
2710
+ var HEADER_FOLDER_ID = "X-UIPATH-OrganizationUnitId";
2711
+ var HEADER_TENANT_ID2 = "X-UIPATH-TenantId";
2712
+ var HEADER_NUGET_API_KEY = "X-NuGet-ApiKey";
2713
+ var ORCHESTRATOR_RELATIVE_URL = "/orchestrator_";
2714
+ var PROCESSES_UPLOAD_PATH = "/odata/Processes/UiPath.Server.Configuration.OData.UploadPackage";
2715
+ var LIBRARIES_UPLOAD_PATH = "/odata/Libraries/UiPath.Server.Configuration.OData.UploadPackage";
2716
+
2717
+ class OrchestratorPublisher {
2718
+ fileSystem;
2719
+ logger;
2720
+ feedsService;
2721
+ constructor(fileSystem, feedsService) {
2722
+ this.fileSystem = fileSystem;
2723
+ this.logger = new ToolLogger("ProjectPublisher", "Orchestrator");
2724
+ this.feedsService = feedsService ?? new OrchestratorFeedsService;
2725
+ }
2726
+ async publishAsync(packagePaths, destination) {
2727
+ if (packagePaths.length === 0) {
2728
+ return ToolResult7.error(ToolErrorCodes7.InternalError, translate10.t("solutionpackager.publish.errors.orchestratorNoPackages"));
2729
+ }
2730
+ if (destination.kind === "OrchestratorCustom" /* OrchestratorCustom */) {
2731
+ if (!destination.publishUrl) {
2732
+ return ToolResult7.error(ToolErrorCodes7.InternalError, translate10.t("solutionpackager.publish.errors.orchestratorCustomPublishUrlRequired"));
2733
+ }
2734
+ this.logger.info(`Publishing ${packagePaths.length} package(s) to ${destination.publishUrl} (custom)`);
2735
+ return this.postPackages(packagePaths, destination.publishUrl, this.buildCustomHeaders(destination));
2736
+ }
2737
+ if (!destination.connectionInfo?.cloudUrl) {
2738
+ return ToolResult7.error(ToolErrorCodes7.InternalError, translate10.t("solutionpackager.publish.errors.orchestratorCloudUrlRequired"));
2739
+ }
2740
+ const orchestratorUrl = this.deriveOrchestratorUrl(destination.connectionInfo);
2741
+ let feed;
2742
+ try {
2743
+ feed = await this.resolveFeed(destination, orchestratorUrl);
2744
+ } catch (error) {
2745
+ const message = error instanceof Error ? error.message : String(error);
2746
+ return ToolResult7.error(ToolErrorCodes7.InternalError, translate10.t("solutionpackager.publish.errors.orchestratorFeedResolutionFailed", { message }));
2747
+ }
2748
+ const targetUrl = this.buildPublishUrl(orchestratorUrl, feed);
2749
+ const headers = this.buildHeaders(destination, feed);
2750
+ this.logger.info(`Publishing ${packagePaths.length} package(s) to ${targetUrl} (feed ${feed.name}, ${feed.purpose})`);
2751
+ return this.postPackages(packagePaths, targetUrl, headers);
2752
+ }
2753
+ async postPackages(packagePaths, targetUrl, headers) {
2754
+ const form = new FormData;
2755
+ for (const packagePath of packagePaths) {
2756
+ const data = await this.fileSystem.readFile(packagePath);
2757
+ if (!data) {
2758
+ return ToolResult7.error(ToolErrorCodes7.InternalError, translate10.t("solutionpackager.publish.errors.failedToReadPackage", { path: packagePath }));
2759
+ }
2760
+ const fileName = this.fileSystem.path.basename(packagePath);
2761
+ form.append("file", new Blob([data], {
2762
+ type: "application/octet-stream"
2763
+ }), fileName);
2764
+ }
2765
+ const response = await fetch(targetUrl, {
2766
+ method: "POST",
2767
+ headers,
2768
+ body: form
2769
+ });
2770
+ if (!response.ok) {
2771
+ const body = await this.safeReadBody(response);
2772
+ return ToolResult7.error(ToolErrorCodes7.InternalError, translate10.t("solutionpackager.publish.errors.orchestratorPublishFailed", {
2773
+ status: response.status,
2774
+ statusText: response.statusText,
2775
+ body: body ? ` - ${body}` : ""
2776
+ }));
2777
+ }
2778
+ this.logger.info("Orchestrator publish completed.");
2779
+ return new ToolResult7(ToolErrorCodes7.Success, undefined, packagePaths);
2780
+ }
2781
+ async resolveFeed(destination, orchestratorUrl) {
2782
+ const connection = {
2783
+ orchestratorUrl,
2784
+ accessToken: destination.connectionInfo.accessToken,
2785
+ tenantId: destination.connectionInfo.tenantId
2786
+ };
2787
+ const feeds = await this.feedsService.getAccessibleFeedsAsync(connection);
2788
+ if (destination.kind === "OrchestratorPersonalWorkspace" /* OrchestratorPersonalWorkspace */) {
2789
+ const folders = await this.feedsService.getFoldersForCurrentUserAsync(connection);
2790
+ const personalFolder = folders.find((f) => f.feedType === ExtendedFolderDtoFeedTypeEnum.PersonalWorkspace);
2791
+ if (!personalFolder) {
2792
+ const foldersDebug = folders.length === 0 ? "<none>" : folders.map((f) => `${f.displayName} (id=${f.id}, feedType=${f.feedType})`).join(", ");
2793
+ throw new Error(translate10.t("solutionpackager.publish.errors.orchestratorPersonalWorkspaceFolderNotFound", { folders: foldersDebug }));
2794
+ }
2795
+ if (personalFolder.id == null) {
2796
+ throw new Error(`Personal-workspace folder "${personalFolder.displayName}" has no id; cannot resolve its feed.`);
2797
+ }
2798
+ const match2 = feeds.find((f) => f.folderId === personalFolder.id);
2799
+ if (!match2) {
2800
+ this.throwFeedNotFound(destination, feeds);
2801
+ }
2802
+ return match2;
2803
+ }
2804
+ const expectedPurpose = destination.kind === "OrchestratorSharedLibraries" /* OrchestratorSharedLibraries */ ? PackageFeedDtoPurposeEnum.Libraries : PackageFeedDtoPurposeEnum.Processes;
2805
+ const match = feeds.find((f) => f.purpose === expectedPurpose && f.folderId == null);
2806
+ if (!match) {
2807
+ this.throwFeedNotFound(destination, feeds);
2808
+ }
2809
+ return match;
2810
+ }
2811
+ throwFeedNotFound(destination, feeds) {
2812
+ const available = feeds.length === 0 ? "<none>" : feeds.map((f) => `${f.name} (purpose=${f.purpose}, folderId=${f.folderId ?? "null"})`).join(", ");
2813
+ throw new Error(translate10.t("solutionpackager.publish.errors.orchestratorFeedNotFound", {
2814
+ kind: destination.kind,
2815
+ available
2816
+ }));
2817
+ }
2818
+ buildPublishUrl(orchestratorUrl, feed) {
2819
+ const baseUrl = feed.publishUrl ? feed.publishUrl : `${orchestratorUrl}${feed.purpose === PackageFeedDtoPurposeEnum.Libraries ? LIBRARIES_UPLOAD_PATH : PROCESSES_UPLOAD_PATH}`;
2820
+ const parsed = new URL(baseUrl);
2821
+ if (feed.id) {
2822
+ parsed.searchParams.set("feedId", feed.id);
2823
+ }
2824
+ return parsed.toString();
2825
+ }
2826
+ deriveOrchestratorUrl(connectionInfo) {
2827
+ const raw = connectionInfo.cloudUrl ?? "";
2828
+ let end = raw.length;
2829
+ while (end > 0 && raw.charCodeAt(end - 1) === 47)
2830
+ end--;
2831
+ return `${raw.slice(0, end)}${ORCHESTRATOR_RELATIVE_URL}`;
2832
+ }
2833
+ buildHeaders(destination, feed) {
2834
+ const headers = this.buildAuthHeaders(destination.connectionInfo);
2835
+ const folderHeader = destination.kind === "OrchestratorSharedLibraries" /* OrchestratorSharedLibraries */ ? destination.folderId : feed.folderId;
2836
+ if (folderHeader != null) {
2837
+ headers[HEADER_FOLDER_ID] = String(folderHeader);
2838
+ }
2839
+ if (feed.authenticationType === PackageFeedDtoAuthenticationTypeEnum.ApiKey && feed.apiKey) {
2840
+ headers[HEADER_NUGET_API_KEY] = feed.apiKey;
2841
+ }
2842
+ return headers;
2843
+ }
2844
+ buildCustomHeaders(destination) {
2845
+ const headers = this.buildAuthHeaders(destination.connectionInfo);
2846
+ if (destination.folderId != null) {
2847
+ headers[HEADER_FOLDER_ID] = String(destination.folderId);
2848
+ }
2849
+ if (destination.apiKey) {
2850
+ headers[HEADER_NUGET_API_KEY] = destination.apiKey;
2851
+ }
2852
+ return headers;
2853
+ }
2854
+ buildAuthHeaders(connectionInfo) {
2855
+ const headers = {};
2856
+ if (connectionInfo.accessToken) {
2857
+ headers.Authorization = `Bearer ${connectionInfo.accessToken}`;
2858
+ }
2859
+ if (connectionInfo.tenantId) {
2860
+ headers[HEADER_TENANT_ID2] = connectionInfo.tenantId;
2861
+ }
2862
+ return headers;
2863
+ }
2864
+ async safeReadBody(response) {
2865
+ try {
2866
+ const text = await response.text();
2867
+ return text.slice(0, 500);
2868
+ } catch {
2869
+ return "";
2870
+ }
2871
+ }
2872
+ }
2873
+
2874
+ // src/publish/services/project-publisher.ts
2875
+ class ProjectPublisher {
2876
+ fileSystem;
2877
+ logger;
2878
+ localFolderPublisher;
2879
+ nugetFeedPublisher;
2880
+ orchestratorPublisher;
2881
+ constructor(fileSystem, publishers) {
2882
+ this.fileSystem = fileSystem;
2883
+ this.logger = new ToolLogger("ProjectPublisher", "Publish");
2884
+ this.localFolderPublisher = publishers?.localFolder ?? new LocalFolderPublisher(fileSystem);
2885
+ this.nugetFeedPublisher = publishers?.nugetFeed ?? new NugetFeedPublisher(fileSystem);
2886
+ this.orchestratorPublisher = publishers?.orchestrator ?? new OrchestratorPublisher(fileSystem);
2887
+ }
2888
+ async publishAsync(options) {
2889
+ if (!options.packagePaths || options.packagePaths.length === 0) {
2890
+ return ToolResult8.error(ToolErrorCodes8.InternalError, translate11.t("solutionpackager.publish.errors.atLeastOnePackage"));
2891
+ }
2892
+ for (const path of options.packagePaths) {
2893
+ if (!await this.fileSystem.exists(path)) {
2894
+ return ToolResult8.error(ToolErrorCodes8.InternalError, translate11.t("solutionpackager.publish.errors.packageNotFound", { path }));
2895
+ }
2896
+ }
2897
+ try {
2898
+ const destination = options.destination;
2899
+ switch (destination.kind) {
2900
+ case "LocalFolder" /* LocalFolder */:
2901
+ return await this.localFolderPublisher.publishAsync(options.packagePaths, destination);
2902
+ case "NugetFeed" /* NugetFeed */:
2903
+ return await this.nugetFeedPublisher.publishAsync(options.packagePaths, destination);
2904
+ case "OrchestratorPersonalWorkspace" /* OrchestratorPersonalWorkspace */:
2905
+ case "OrchestratorTenantProcesses" /* OrchestratorTenantProcesses */:
2906
+ case "OrchestratorSharedLibraries" /* OrchestratorSharedLibraries */:
2907
+ case "OrchestratorCustom" /* OrchestratorCustom */:
2908
+ return await this.orchestratorPublisher.publishAsync(options.packagePaths, destination);
2909
+ default: {
2910
+ const exhaustive = destination;
2911
+ return ToolResult8.error(ToolErrorCodes8.InternalError, translate11.t("solutionpackager.publish.errors.unknownDestination", { destination: JSON.stringify(exhaustive) }));
2912
+ }
2913
+ }
2914
+ } catch (error) {
2915
+ const message = error instanceof Error ? error.message : String(error);
2916
+ const localized = translate11.t("solutionpackager.publish.errors.publishFailed", { message });
2917
+ this.logger.error(localized);
2918
+ return ToolResult8.error(ToolErrorCodes8.InternalError, localized);
2919
+ }
2920
+ }
2921
+ }
2922
+
2923
+ // src/publish/node-project-publisher-factory.ts
2924
+ class NodeProjectPublisherFactory extends BaseNodePackagerFactory {
2925
+ async createAsync(config) {
2926
+ const logger = new ToolLogger("ProjectPublisherFactory", "Create");
2927
+ this.configureLanguage(config);
2928
+ this.configureLogHandler(config);
2929
+ logger.info("Creating ProjectPublisher instance...");
2930
+ const fileSystem = this.getOrCreateFileSystem(config);
2931
+ this.getOrCreateTelemetryService(config);
2932
+ const projectPublisher = new ProjectPublisher(fileSystem);
2933
+ logger.info("ProjectPublisher created successfully.");
2934
+ return projectPublisher;
2935
+ }
2936
+ }
2937
+ async function createNodeProjectPublisher(options) {
2938
+ const factory = new NodeProjectPublisherFactory;
2939
+ return factory.createAsync(options);
2940
+ }
1833
2941
  export {
1834
2942
  setGlobalLogHandler,
2943
+ createNodeProjectPublisher,
1835
2944
  createNodeProjectPackager,
1836
2945
  ToolsFactory,
1837
2946
  ToolLogger,
1838
2947
  TelemetryService2 as TelemetryService,
1839
2948
  TelemetryNames,
1840
2949
  RulesConfigFileType,
2950
+ PublishDestinationKind,
1841
2951
  ProjectValidateOptionsValidator,
1842
2952
  ProjectValidateOptions,
1843
2953
  ProjectToolExecutor,
1844
2954
  ProjectRestoreOptions,
2955
+ ProjectPublisher,
2956
+ ProjectPublishOptions,
1845
2957
  ProjectPackager,
1846
2958
  ProjectPackOptions,
1847
2959
  ProjectLoader,
@@ -1852,6 +2964,9 @@ export {
1852
2964
  PackService,
1853
2965
  NodePackageSignService,
1854
2966
  NodeContextStorage2 as NodeContextStorage,
1855
- ConsoleTelemetryProvider2 as ConsoleTelemetryProvider,
2967
+ GovernancePolicyService,
2968
+ DotnetDiscoveryService,
2969
+ DebugTelemetryProvider2 as DebugTelemetryProvider,
2970
+ ConsoleTelemetryProvider,
1856
2971
  BaseNodePackagerFactory
1857
2972
  };