@uipath/solution-sdk 1.201.0-preview.115 → 1.201.0-preview.122

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -8534,7 +8534,7 @@ class TextApiResponse {
8534
8534
  var package_default = {
8535
8535
  name: "@uipath/solution-sdk",
8536
8536
  license: "MIT",
8537
- version: "1.201.0-preview.115",
8537
+ version: "1.201.0-preview.122",
8538
8538
  repository: {
8539
8539
  type: "git",
8540
8540
  url: "https://github.com/UiPath/cli.git",
@@ -9404,6 +9404,14 @@ function TestManagerMetadataDtoFromJSONTyped(json, ignoreDiscriminator) {
9404
9404
  };
9405
9405
  }
9406
9406
 
9407
+ // ../studioweb-sdk/generated/src/models/TargetPlatform.ts
9408
+ function TargetPlatformFromJSON(json) {
9409
+ return TargetPlatformFromJSONTyped(json, false);
9410
+ }
9411
+ function TargetPlatformFromJSONTyped(json, ignoreDiscriminator) {
9412
+ return json;
9413
+ }
9414
+
9407
9415
  // ../studioweb-sdk/generated/src/models/ProjectErrorCode.ts
9408
9416
  function ProjectErrorCodeFromJSON(json) {
9409
9417
  return ProjectErrorCodeFromJSONTyped(json, false);
@@ -9444,6 +9452,91 @@ function SapContextDtoFromJSONTyped(json, ignoreDiscriminator) {
9444
9452
  };
9445
9453
  }
9446
9454
 
9455
+ // ../studioweb-sdk/generated/src/models/PreviewProjectDto.ts
9456
+ function PreviewProjectDtoFromJSON(json) {
9457
+ return PreviewProjectDtoFromJSONTyped(json, false);
9458
+ }
9459
+ function PreviewProjectDtoFromJSONTyped(json, ignoreDiscriminator) {
9460
+ if (json == null) {
9461
+ return json;
9462
+ }
9463
+ return {
9464
+ id: json["id"] == null ? undefined : json["id"],
9465
+ designId: json["designId"] == null ? undefined : json["designId"],
9466
+ expressionLanguage: json["expressionLanguage"] == null ? undefined : json["expressionLanguage"],
9467
+ projectType: json["projectType"] == null ? undefined : json["projectType"],
9468
+ name: json["name"] == null ? undefined : json["name"],
9469
+ description: json["description"] == null ? undefined : json["description"],
9470
+ tenantId: json["tenantId"] == null ? undefined : json["tenantId"],
9471
+ status: json["status"] == null ? undefined : ProjectStatusFromJSON(json["status"]),
9472
+ message: json["message"] == null ? undefined : json["message"],
9473
+ lastModifiedTime: json["lastModifiedTime"] == null ? undefined : new Date(json["lastModifiedTime"]),
9474
+ pinDate: json["pinDate"] == null ? undefined : new Date(json["pinDate"]),
9475
+ triggerType: json["triggerType"] == null ? undefined : json["triggerType"],
9476
+ trigger: json["trigger"] == null ? undefined : MetadataTriggerDtoFromJSON(json["trigger"]),
9477
+ connections: json["connections"] == null ? undefined : json["connections"].map(MetadataConnectionDtoFromJSON),
9478
+ lockedBy: json["lockedBy"] == null ? undefined : json["lockedBy"],
9479
+ isSharedByMe: json["isSharedByMe"] == null ? undefined : json["isSharedByMe"],
9480
+ isSharedWithMe: json["isSharedWithMe"] == null ? undefined : json["isSharedWithMe"],
9481
+ projectAppId: json["projectAppId"] == null ? undefined : json["projectAppId"],
9482
+ isSwFileSystemEnabledForApps: json["isSwFileSystemEnabledForApps"] == null ? undefined : json["isSwFileSystemEnabledForApps"],
9483
+ ownerId: json["ownerId"] == null ? undefined : json["ownerId"],
9484
+ sapContext: json["sapContext"] == null ? undefined : SapContextDtoFromJSON(json["sapContext"]),
9485
+ hasDefaultName: json["hasDefaultName"] == null ? undefined : json["hasDefaultName"],
9486
+ errorList: json["errorList"] == null ? undefined : json["errorList"].map(ProjectErrorInformationFromJSON),
9487
+ solutionId: json["solutionId"] == null ? undefined : json["solutionId"],
9488
+ testManagerMetadata: json["testManagerMetadata"] == null ? undefined : TestManagerMetadataDtoFromJSON(json["testManagerMetadata"]),
9489
+ isPreview: json["isPreview"] == null ? undefined : json["isPreview"],
9490
+ lastPublishedVersion: json["lastPublishedVersion"] == null ? undefined : PublishResultModelFromJSON(json["lastPublishedVersion"]),
9491
+ publishedToFeeds: json["publishedToFeeds"] == null ? undefined : json["publishedToFeeds"],
9492
+ sortIndex: json["sortIndex"] == null ? undefined : json["sortIndex"],
9493
+ hasTestCases: json["hasTestCases"] == null ? undefined : json["hasTestCases"],
9494
+ isApp: json["isApp"] == null ? undefined : json["isApp"],
9495
+ targetPlatform: json["targetPlatform"] == null ? undefined : TargetPlatformFromJSON(json["targetPlatform"])
9496
+ };
9497
+ }
9498
+ // ../studioweb-sdk/generated/src/models/SolutionStatus.ts
9499
+ function SolutionStatusFromJSON(json) {
9500
+ return SolutionStatusFromJSONTyped(json, false);
9501
+ }
9502
+ function SolutionStatusFromJSONTyped(json, ignoreDiscriminator) {
9503
+ return json;
9504
+ }
9505
+
9506
+ // ../studioweb-sdk/generated/src/models/SolutionPublishStatus.ts
9507
+ function SolutionPublishStatusFromJSON(json) {
9508
+ return SolutionPublishStatusFromJSONTyped(json, false);
9509
+ }
9510
+ function SolutionPublishStatusFromJSONTyped(json, ignoreDiscriminator) {
9511
+ return json;
9512
+ }
9513
+
9514
+ // ../studioweb-sdk/generated/src/models/PreviewSolutionDto.ts
9515
+ function PreviewSolutionDtoFromJSON(json) {
9516
+ return PreviewSolutionDtoFromJSONTyped(json, false);
9517
+ }
9518
+ function PreviewSolutionDtoFromJSONTyped(json, ignoreDiscriminator) {
9519
+ if (json == null) {
9520
+ return json;
9521
+ }
9522
+ return {
9523
+ id: json["id"] == null ? undefined : json["id"],
9524
+ name: json["name"] == null ? undefined : json["name"],
9525
+ ownerId: json["ownerId"] == null ? undefined : json["ownerId"],
9526
+ creationTime: json["creationTime"] == null ? undefined : new Date(json["creationTime"]),
9527
+ lastModifiedTime: json["lastModifiedTime"] == null ? undefined : new Date(json["lastModifiedTime"]),
9528
+ pinDate: json["pinDate"] == null ? undefined : new Date(json["pinDate"]),
9529
+ projects: json["projects"] == null ? undefined : json["projects"].map(PreviewProjectDtoFromJSON),
9530
+ sortIndex: json["sortIndex"] == null ? undefined : json["sortIndex"],
9531
+ hasTestCases: json["hasTestCases"] == null ? undefined : json["hasTestCases"],
9532
+ status: json["status"] == null ? undefined : SolutionStatusFromJSON(json["status"]),
9533
+ lockedBy: json["lockedBy"] == null ? undefined : json["lockedBy"],
9534
+ isSharedByMe: json["isSharedByMe"] == null ? undefined : json["isSharedByMe"],
9535
+ isSharedWithMe: json["isSharedWithMe"] == null ? undefined : json["isSharedWithMe"],
9536
+ permissions: json["permissions"] == null ? undefined : SharingPermissionsFromJSON(json["permissions"]),
9537
+ publishStatus: json["publishStatus"] == null ? undefined : SolutionPublishStatusFromJSON(json["publishStatus"])
9538
+ };
9539
+ }
9447
9540
  // ../studioweb-sdk/generated/src/models/WorkflowUiState.ts
9448
9541
  function WorkflowUiStateFromJSON(json) {
9449
9542
  return WorkflowUiStateFromJSONTyped(json, false);
@@ -9460,14 +9553,6 @@ function WorkflowUiStateFromJSONTyped(json, ignoreDiscriminator) {
9460
9553
  };
9461
9554
  }
9462
9555
 
9463
- // ../studioweb-sdk/generated/src/models/TargetPlatform.ts
9464
- function TargetPlatformFromJSON(json) {
9465
- return TargetPlatformFromJSONTyped(json, false);
9466
- }
9467
- function TargetPlatformFromJSONTyped(json, ignoreDiscriminator) {
9468
- return json;
9469
- }
9470
-
9471
9556
  // ../studioweb-sdk/generated/src/models/ProjectDto.ts
9472
9557
  function ProjectDtoFromJSON(json) {
9473
9558
  return ProjectDtoFromJSONTyped(json, false);
@@ -9531,22 +9616,20 @@ function ProjectDtoFromJSONTyped(json, ignoreDiscriminator) {
9531
9616
  jitVersion: json["jitVersion"] == null ? undefined : json["jitVersion"]
9532
9617
  };
9533
9618
  }
9534
- // ../studioweb-sdk/generated/src/models/SolutionStatus.ts
9535
- function SolutionStatusFromJSON(json) {
9536
- return SolutionStatusFromJSONTyped(json, false);
9537
- }
9538
- function SolutionStatusFromJSONTyped(json, ignoreDiscriminator) {
9539
- return json;
9540
- }
9541
-
9542
- // ../studioweb-sdk/generated/src/models/SolutionPublishStatus.ts
9543
- function SolutionPublishStatusFromJSON(json) {
9544
- return SolutionPublishStatusFromJSONTyped(json, false);
9619
+ // ../studioweb-sdk/generated/src/models/SolutionAndProjectSearchModelDto.ts
9620
+ function SolutionAndProjectSearchModelDtoFromJSON(json) {
9621
+ return SolutionAndProjectSearchModelDtoFromJSONTyped(json, false);
9545
9622
  }
9546
- function SolutionPublishStatusFromJSONTyped(json, ignoreDiscriminator) {
9547
- return json;
9623
+ function SolutionAndProjectSearchModelDtoFromJSONTyped(json, ignoreDiscriminator) {
9624
+ if (json == null) {
9625
+ return json;
9626
+ }
9627
+ return {
9628
+ solutions: json["solutions"] == null ? undefined : json["solutions"].map(PreviewSolutionDtoFromJSON),
9629
+ standaloneProjects: json["standaloneProjects"] == null ? undefined : json["standaloneProjects"].map(PreviewProjectDtoFromJSON),
9630
+ totalCount: json["totalCount"] == null ? undefined : json["totalCount"]
9631
+ };
9548
9632
  }
9549
-
9550
9633
  // ../studioweb-sdk/generated/src/models/SolutionDto.ts
9551
9634
  function SolutionDtoFromJSON(json) {
9552
9635
  return SolutionDtoFromJSONTyped(json, false);
@@ -9718,6 +9801,68 @@ class SolutionApi extends BaseAPI2 {
9718
9801
  const response = await this.solutionOverwriteSolutionRaw(requestParameters, initOverrides);
9719
9802
  return await response.value();
9720
9803
  }
9804
+ async solutionSearchSolutionsAndProjectsRaw(requestParameters, initOverrides) {
9805
+ const queryParameters = {};
9806
+ if (requestParameters["triggerTypes"] != null) {
9807
+ queryParameters["triggerTypes"] = requestParameters["triggerTypes"];
9808
+ }
9809
+ if (requestParameters["owners"] != null) {
9810
+ queryParameters["owners"] = requestParameters["owners"];
9811
+ }
9812
+ if (requestParameters["isPublished"] != null) {
9813
+ queryParameters["isPublished"] = requestParameters["isPublished"];
9814
+ }
9815
+ if (requestParameters["hasTestCases"] != null) {
9816
+ queryParameters["hasTestCases"] = requestParameters["hasTestCases"];
9817
+ }
9818
+ if (requestParameters["publishStatus"] != null) {
9819
+ queryParameters["publishStatus"] = requestParameters["publishStatus"];
9820
+ }
9821
+ if (requestParameters["validIds"] != null) {
9822
+ queryParameters["validIds"] = requestParameters["validIds"];
9823
+ }
9824
+ if (requestParameters["keywords"] != null) {
9825
+ queryParameters["keywords"] = requestParameters["keywords"];
9826
+ }
9827
+ if (requestParameters["connectors"] != null) {
9828
+ queryParameters["connectors"] = requestParameters["connectors"];
9829
+ }
9830
+ if (requestParameters["pagingOptionsLimit"] != null) {
9831
+ queryParameters["pagingOptions.limit"] = requestParameters["pagingOptionsLimit"];
9832
+ }
9833
+ if (requestParameters["pagingOptionsSkip"] != null) {
9834
+ queryParameters["pagingOptions.skip"] = requestParameters["pagingOptionsSkip"];
9835
+ }
9836
+ if (requestParameters["sortBy"] != null) {
9837
+ queryParameters["sortBy"] = requestParameters["sortBy"];
9838
+ }
9839
+ if (requestParameters["sortOrder"] != null) {
9840
+ queryParameters["sortOrder"] = requestParameters["sortOrder"];
9841
+ }
9842
+ if (requestParameters["apiVersion"] != null) {
9843
+ queryParameters["api-version"] = requestParameters["apiVersion"];
9844
+ }
9845
+ const headerParameters = {};
9846
+ if (this.configuration && this.configuration.accessToken) {
9847
+ const token = this.configuration.accessToken;
9848
+ const tokenString = await token("Bearer", []);
9849
+ if (tokenString) {
9850
+ headerParameters["Authorization"] = `Bearer ${tokenString}`;
9851
+ }
9852
+ }
9853
+ let urlPath = `/api/Solution/SearchSolutionsAndProjects`;
9854
+ const response = await this.request({
9855
+ path: urlPath,
9856
+ method: "GET",
9857
+ headers: headerParameters,
9858
+ query: queryParameters
9859
+ }, initOverrides);
9860
+ return new JSONApiResponse2(response, (jsonValue) => SolutionAndProjectSearchModelDtoFromJSON(jsonValue));
9861
+ }
9862
+ async solutionSearchSolutionsAndProjects(requestParameters = {}, initOverrides) {
9863
+ const response = await this.solutionSearchSolutionsAndProjectsRaw(requestParameters, initOverrides);
9864
+ return await response.value();
9865
+ }
9721
9866
  }
9722
9867
  // ../studioweb-sdk/src/client.ts
9723
9868
  function studioWebBasePath(config, organizationName) {
@@ -11904,17 +12049,18 @@ var TLS_ERROR_CODES = new Set([
11904
12049
  ]);
11905
12050
  var TLS_INSTRUCTIONS = "The server's TLS certificate could not be verified. Most often a " + "corporate proxy/firewall re-signs HTTPS with a root CA that Node does " + "not trust — set NODE_EXTRA_CA_CERTS to that CA's PEM file (and HTTPS_PROXY " + "if you connect through a proxy). If the certificate is instead expired or " + "its hostname does not match, fix the endpoint URL or the system clock. " + "Then retry.";
11906
12051
  var NETWORK_INSTRUCTIONS = "Could not reach the UiPath service. Check your network connection and " + "VPN, confirm any HTTP_PROXY/HTTPS_PROXY/NO_PROXY settings are correct, " + "then retry.";
12052
+ var LOCAL_PERMISSION_ERROR_CODES = new Set(["EACCES", "EPERM", "EROFS"]);
12053
+ var LOCAL_PERMISSION_MESSAGE_PATTERN = /\b(EACCES|EPERM|EROFS)\b/;
12054
+ function localPermissionInstructions(code, path3) {
12055
+ const target = path3 !== undefined ? `'${path3}'` : "a local file or resource";
12056
+ if (code === "EROFS") {
12057
+ return `The filesystem containing ${target} is read-only (EROFS), so the ` + "CLI could not write to it. This is a local environment problem, " + "not a UiPath service error — retrying will not help. Use a " + "writable location, or give this environment write access to the " + "path.";
12058
+ }
12059
+ const remedy = process.platform === "win32" ? "Re-run from an elevated terminal, close any program holding " + "the file open, or grant your user access to the path." : "Grant this user (or the sandbox the command runs in) access " + "to the path, or run the command outside the sandbox.";
12060
+ return `The operating system denied access to ${target} (${code}). This is ` + "a local permission problem, not a UiPath service error — retrying " + `without a permission change will not help. ${remedy}`;
12061
+ }
11907
12062
  function describeConnectivityError(error) {
11908
- const queue = [error];
11909
- const seen = new Set;
11910
- for (let steps = 0;queue.length > 0 && steps < 32; steps++) {
11911
- const current = queue.shift();
11912
- if (current === null || typeof current !== "object")
11913
- continue;
11914
- if (seen.has(current))
11915
- continue;
11916
- seen.add(current);
11917
- const cur = current;
12063
+ for (const cur of walkErrorGraph(error)) {
11918
12064
  const code = typeof cur.code === "string" ? cur.code : undefined;
11919
12065
  const message = typeof cur.message === "string" ? cur.message : undefined;
11920
12066
  if (code && TLS_ERROR_CODES.has(code)) {
@@ -11933,6 +12079,49 @@ function describeConnectivityError(error) {
11933
12079
  instructions: NETWORK_INSTRUCTIONS
11934
12080
  };
11935
12081
  }
12082
+ }
12083
+ return;
12084
+ }
12085
+ function describePermissionError(error) {
12086
+ for (const cur of walkErrorGraph(error)) {
12087
+ const message = typeof cur.message === "string" ? cur.message : undefined;
12088
+ const code = matchLocalPermissionCode(cur.code, message);
12089
+ if (!code)
12090
+ continue;
12091
+ const path3 = localPermissionPath(cur.path, message);
12092
+ return {
12093
+ code,
12094
+ message: message ?? code,
12095
+ ...path3 !== undefined ? { path: path3 } : {},
12096
+ instructions: localPermissionInstructions(code, path3)
12097
+ };
12098
+ }
12099
+ return;
12100
+ }
12101
+ function matchLocalPermissionCode(code, message) {
12102
+ if (typeof code === "string" && LOCAL_PERMISSION_ERROR_CODES.has(code)) {
12103
+ return code;
12104
+ }
12105
+ const match = message ? LOCAL_PERMISSION_MESSAGE_PATTERN.exec(message) : null;
12106
+ return match ? match[1] : undefined;
12107
+ }
12108
+ function localPermissionPath(path3, message) {
12109
+ if (typeof path3 === "string")
12110
+ return path3;
12111
+ return message ? /'([^']+)'/.exec(message)?.[1] : undefined;
12112
+ }
12113
+ function* walkErrorGraph(error) {
12114
+ const queue = [error];
12115
+ const seen = new Set;
12116
+ for (let steps = 0;queue.length > 0 && steps < 32; steps++) {
12117
+ const current = queue.shift();
12118
+ if (current === null || typeof current !== "object")
12119
+ continue;
12120
+ if (seen.has(current))
12121
+ continue;
12122
+ seen.add(current);
12123
+ const cur = current;
12124
+ yield cur;
11936
12125
  if (cur.cause !== undefined)
11937
12126
  queue.push(cur.cause);
11938
12127
  if (Array.isArray(cur.errors))
@@ -11993,6 +12182,12 @@ function classifyError(status, error) {
11993
12182
  if (status !== undefined && status >= 500 && status < 600) {
11994
12183
  return { errorCode: "server_error", retry: "RetryLater" };
11995
12184
  }
12185
+ if (status === undefined && describePermissionError(error)) {
12186
+ return {
12187
+ errorCode: "local_permission_denied",
12188
+ retry: "RetryWillNotFix"
12189
+ };
12190
+ }
11996
12191
  const connectivity = describeConnectivityError(error);
11997
12192
  if (connectivity) {
11998
12193
  return {
@@ -12095,6 +12290,16 @@ async function extractErrorDetails(error, options) {
12095
12290
  message = `${message}: ${connectivity.message}`;
12096
12291
  }
12097
12292
  }
12293
+ const permission = status === undefined ? describePermissionError(error) : undefined;
12294
+ if (permission) {
12295
+ if (permission.message !== message && !message.includes(permission.message)) {
12296
+ message = `${message}: ${permission.message}`;
12297
+ }
12298
+ if (!message.includes(permission.instructions)) {
12299
+ const punctuated = message.endsWith(".") ? message : `${message}.`;
12300
+ message = `${punctuated} ${permission.instructions}`;
12301
+ }
12302
+ }
12098
12303
  let details = rawMessage;
12099
12304
  if (rawBody) {
12100
12305
  if (parsedBody) {
@@ -12134,6 +12339,9 @@ async function extractErrorDetails(error, options) {
12134
12339
  if (parsedBody?.traceId && typeof parsedBody.traceId === "string") {
12135
12340
  context.traceId = parsedBody.traceId;
12136
12341
  }
12342
+ if (permission?.path !== undefined) {
12343
+ context.path = permission.path;
12344
+ }
12137
12345
  if (status === 429) {
12138
12346
  const resp = response;
12139
12347
  const headersObj = resp?.headers;
@@ -13338,6 +13546,7 @@ var CLI_ERROR_CODES = [
13338
13546
  "invalid_argument",
13339
13547
  "authentication_required",
13340
13548
  "permission_denied",
13549
+ "local_permission_denied",
13341
13550
  "not_found",
13342
13551
  "rate_limited",
13343
13552
  "network_error",
@@ -13773,12 +13982,16 @@ function defaultErrorCodeForHttpStatus(status) {
13773
13982
  return "server_error";
13774
13983
  return;
13775
13984
  }
13985
+ var LOCAL_PERMISSION_TEXT_PATTERN = /(?:\b|\()(?:EACCES|EPERM|EROFS)(?::\s|\))/;
13776
13986
  function defaultErrorCodeForFailure(data) {
13777
13987
  if (data.Result === RESULTS.Failure) {
13778
13988
  const status = data.Context?.httpStatus ?? parseHttpStatusFromMessage2(data.Message);
13779
13989
  const errorCode = defaultErrorCodeForHttpStatus(status);
13780
13990
  if (errorCode)
13781
13991
  return errorCode;
13992
+ if (status === undefined && (LOCAL_PERMISSION_TEXT_PATTERN.test(data.Message) || LOCAL_PERMISSION_TEXT_PATTERN.test(data.Instructions))) {
13993
+ return "local_permission_denied";
13994
+ }
13782
13995
  }
13783
13996
  return defaultErrorCodeForResult(data.Result);
13784
13997
  }
@@ -14262,9 +14475,6 @@ var ScreenLogger;
14262
14475
  }
14263
14476
  ScreenLogger.progress = progress;
14264
14477
  })(ScreenLogger ||= {});
14265
- // ../common/src/tool-provider.ts
14266
- var factorySlot = singleton("PackagerFactoryProvider");
14267
- var moduleSlot = singleton("ToolModuleProvider");
14268
14478
  // ../common/src/solution-project-types.ts
14269
14479
  var LIBRARY_NOT_A_PROJECT = "A library cannot be a project inside a solution — it is a reusable .nupkg that other projects consume as a NuGet dependency, not a deployable unit. Build and publish it on its own ('uip rpa pack <project-dir> <output-path>', then 'uip or libraries upload --file <nupkg-path>'), and reference it from a project's dependencies. To make the published library part of this solution, add it as a resource instead: 'uip solution resources add --source remote --kind Library --name <library-name>'.";
14270
14480
  function unsupportedSolutionProjectType(projectType) {
@@ -14275,6 +14485,8 @@ function unsupportedSolutionProjectType(projectType) {
14275
14485
  }
14276
14486
  // ../common/src/telemetry/ship-succeeded.ts
14277
14487
  var shippedKeysSlot = singleton("ShipSucceededDedupeKeys");
14488
+ // ../common/src/tool-provider.ts
14489
+ var factorySlot = singleton("PackagerFactoryProvider");
14278
14490
  // src/solution-file.ts
14279
14491
  var STUDIO_WEB_PROJECT_TYPE_OVERRIDES = {
14280
14492
  ProcessOrchestration: "processOrchestration"
@@ -15774,6 +15986,21 @@ async function deploymentsAutoInstall(config, request, feedFolderKey) {
15774
15986
  return {};
15775
15987
  }
15776
15988
  }
15989
+ // src/project-debug-status.ts
15990
+ var SUCCEEDED = "creationsucceeded";
15991
+ var TERMINAL = new Set([SUCCEEDED, "creationfailed", "validationfailed"]);
15992
+ var isDebugProvisioningTerminal = (status) => TERMINAL.has((status ?? "").toLowerCase());
15993
+ var isDebugProvisioningSucceeded = (status) => (status ?? "").toLowerCase() === SUCCEEDED;
15994
+ async function getProjectDebugStatus(config, solutionKey, debugSessionId) {
15995
+ const url = `${config.basePath}/api/v1/solutions/${encodeURIComponent(solutionKey)}` + `/projects/debug/status?debugSessionId=${encodeURIComponent(debugSessionId)}`;
15996
+ const response = await fetch(url, {
15997
+ headers: { Authorization: `Bearer ${config.accessToken}` }
15998
+ });
15999
+ if (!response.ok) {
16000
+ throw new ResponseError(response, "Response returned an error code");
16001
+ }
16002
+ return await response.json();
16003
+ }
15777
16004
  // src/search-package-versions.ts
15778
16005
  async function searchPackageVersions(config, packageKey, filter, feedFolderKey) {
15779
16006
  const url = `${config.basePath}/api/search/packages/${encodeURIComponent(packageKey)}/versions`;
@@ -15819,6 +16046,30 @@ async function getStudioWebSolutionProjects(config, organizationName, solutionId
15819
16046
  throw error;
15820
16047
  }
15821
16048
  }
16049
+ async function listStudioWebSolutions(config, organizationName, options = {}) {
16050
+ const api = createSolutionApi(config, organizationName);
16051
+ try {
16052
+ const result = await api.solutionSearchSolutionsAndProjects({
16053
+ keywords: options.name === undefined ? undefined : [options.name],
16054
+ pagingOptionsLimit: options.limit,
16055
+ pagingOptionsSkip: options.skip,
16056
+ sortBy: options.sortBy,
16057
+ sortOrder: options.sortOrder
16058
+ });
16059
+ const solutions = result.solutions ?? [];
16060
+ return {
16061
+ solutions,
16062
+ combinedCount: solutions.length + (result.standaloneProjects?.length ?? 0),
16063
+ totalCount: result.totalCount
16064
+ };
16065
+ } catch (error) {
16066
+ if (error instanceof ResponseError2) {
16067
+ const text = await error.response.text().catch(() => "");
16068
+ throw new Error(`Studio Web solution listing failed (${error.response.status}): ${text}`);
16069
+ }
16070
+ throw error;
16071
+ }
16072
+ }
15822
16073
  // src/upload-service.ts
15823
16074
  class HttpError extends Error {
15824
16075
  status;
@@ -15827,12 +16078,47 @@ class HttpError extends Error {
15827
16078
  this.status = status;
15828
16079
  }
15829
16080
  }
16081
+ var DEFAULT_UPLOAD_TIMEOUT_MS = 120000;
16082
+ function resolveUploadTimeoutMs() {
16083
+ const raw = Number(process.env?.UIPATH_SOLUTION_UPLOAD_TIMEOUT_MS);
16084
+ return Number.isFinite(raw) && raw > 0 ? raw : DEFAULT_UPLOAD_TIMEOUT_MS;
16085
+ }
16086
+ function formatTimeout(timeoutMs) {
16087
+ return timeoutMs < 1000 ? `${Math.round(timeoutMs)}ms` : `${Math.round(timeoutMs / 1000)}s`;
16088
+ }
16089
+ function timeoutMessage(what, timeoutMs) {
16090
+ return `${what} timed out after ${formatTimeout(timeoutMs)} — the connection ` + `stalled with no response from Studio Web. Retry the command; if it keeps ` + `timing out, check connectivity (VPN/proxy) to the tenant, or raise the ` + `ceiling with UIPATH_SOLUTION_UPLOAD_TIMEOUT_MS.`;
16091
+ }
16092
+ function isTimeoutError(error) {
16093
+ let current = error;
16094
+ for (let depth = 0;depth < 5 && current instanceof Error; depth += 1) {
16095
+ if (current.name === "TimeoutError")
16096
+ return true;
16097
+ current = current.cause;
16098
+ }
16099
+ return false;
16100
+ }
16101
+ async function fetchWithUploadTimeout(url, init, what) {
16102
+ const timeoutMs = resolveUploadTimeoutMs();
16103
+ const [error, response] = await catchError(fetch(url, { ...init, signal: AbortSignal.timeout(timeoutMs) }));
16104
+ if (error) {
16105
+ if (isTimeoutError(error)) {
16106
+ throw new Error(timeoutMessage(what, timeoutMs));
16107
+ }
16108
+ throw error;
16109
+ }
16110
+ return response;
16111
+ }
15830
16112
  async function solutionExistsOnStudioWeb(config, organizationName, solutionId) {
15831
16113
  const api = createSolutionApi(config, organizationName);
16114
+ const timeoutMs = resolveUploadTimeoutMs();
15832
16115
  try {
15833
- await api.solutionGetSolutionRaw({ solutionId });
16116
+ await api.solutionGetSolutionRaw({ solutionId }, { signal: AbortSignal.timeout(timeoutMs) });
15834
16117
  return true;
15835
16118
  } catch (error) {
16119
+ if (isTimeoutError(error)) {
16120
+ throw new Error(timeoutMessage("Studio Web solution existence probe", timeoutMs));
16121
+ }
15836
16122
  if (error instanceof ResponseError2) {
15837
16123
  if (error.response.status === 404) {
15838
16124
  return false;
@@ -15857,11 +16143,7 @@ async function importSolution(config, organizationName, fileBuffer, fileName) {
15857
16143
  if (config.tenantId) {
15858
16144
  headers["x-uipath-tenantid"] = config.tenantId;
15859
16145
  }
15860
- const response = await fetch(importUrl, {
15861
- method: "POST",
15862
- headers,
15863
- body: formData
15864
- });
16146
+ const response = await fetchWithUploadTimeout(importUrl, { method: "POST", headers, body: formData }, "Studio Web solution import");
15865
16147
  if (!response.ok) {
15866
16148
  const text = await response.text();
15867
16149
  throw new HttpError(response.status, `Import failed (${response.status}): ${text}`);
@@ -15881,11 +16163,7 @@ async function overwriteSolution(config, organizationName, fileBuffer, fileName,
15881
16163
  if (config.tenantId) {
15882
16164
  headers["x-uipath-tenantid"] = config.tenantId;
15883
16165
  }
15884
- const response = await fetch(overwriteUrl, {
15885
- method: "POST",
15886
- headers,
15887
- body: formData
15888
- });
16166
+ const response = await fetchWithUploadTimeout(overwriteUrl, { method: "POST", headers, body: formData }, "Studio Web solution overwrite");
15889
16167
  if (!response.ok) {
15890
16168
  const text = await response.text();
15891
16169
  throw new HttpError(response.status, `Overwrite failed (${response.status}): ${text}`);
@@ -15941,7 +16219,10 @@ export {
15941
16219
  overwriteSolution,
15942
16220
  normalizeProjectType,
15943
16221
  mapValues,
16222
+ listStudioWebSolutions,
15944
16223
  isProjectRegisteredInSolution,
16224
+ isDebugProvisioningTerminal,
16225
+ isDebugProvisioningSucceeded,
15945
16226
  instanceOfWorkflowAction,
15946
16227
  instanceOfSearchFilter,
15947
16228
  instanceOfRuntimeSetup,
@@ -15982,6 +16263,7 @@ export {
15982
16263
  instanceOfBlobFileAccessDto,
15983
16264
  importSolution,
15984
16265
  getStudioWebSolutionProjects,
16266
+ getProjectDebugStatus,
15985
16267
  getAvailablePublishLocationsV2,
15986
16268
  findSolutionFileUpward,
15987
16269
  findSolutionFile,
@@ -16180,4 +16462,4 @@ export {
16180
16462
  BASE_PATH
16181
16463
  };
16182
16464
 
16183
- //# debugId=B3CA1AACA0FB6AE064756E2164756E21
16465
+ //# debugId=FE2418EC3658851464756E2164756E21
@@ -11813,6 +11813,8 @@ init_constants();
11813
11813
 
11814
11814
  // ../auth/src/interactive.ts
11815
11815
  init_src();
11816
+ // ../auth/src/tenantSelection.ts
11817
+ var IDENTIFIER_STATUSES = new Set([400, 403, 404]);
11816
11818
 
11817
11819
  // ../auth/src/selectTenant.ts
11818
11820
  var TENANT_SELECTION_REQUIRED_CODE = "TENANT_SELECTION_REQUIRED";
@@ -11903,17 +11905,18 @@ var TLS_ERROR_CODES = new Set([
11903
11905
  ]);
11904
11906
  var TLS_INSTRUCTIONS = "The server's TLS certificate could not be verified. Most often a " + "corporate proxy/firewall re-signs HTTPS with a root CA that Node does " + "not trust — set NODE_EXTRA_CA_CERTS to that CA's PEM file (and HTTPS_PROXY " + "if you connect through a proxy). If the certificate is instead expired or " + "its hostname does not match, fix the endpoint URL or the system clock. " + "Then retry.";
11905
11907
  var NETWORK_INSTRUCTIONS = "Could not reach the UiPath service. Check your network connection and " + "VPN, confirm any HTTP_PROXY/HTTPS_PROXY/NO_PROXY settings are correct, " + "then retry.";
11908
+ var LOCAL_PERMISSION_ERROR_CODES = new Set(["EACCES", "EPERM", "EROFS"]);
11909
+ var LOCAL_PERMISSION_MESSAGE_PATTERN = /\b(EACCES|EPERM|EROFS)\b/;
11910
+ function localPermissionInstructions(code, path3) {
11911
+ const target = path3 !== undefined ? `'${path3}'` : "a local file or resource";
11912
+ if (code === "EROFS") {
11913
+ return `The filesystem containing ${target} is read-only (EROFS), so the ` + "CLI could not write to it. This is a local environment problem, " + "not a UiPath service error — retrying will not help. Use a " + "writable location, or give this environment write access to the " + "path.";
11914
+ }
11915
+ const remedy = process.platform === "win32" ? "Re-run from an elevated terminal, close any program holding " + "the file open, or grant your user access to the path." : "Grant this user (or the sandbox the command runs in) access " + "to the path, or run the command outside the sandbox.";
11916
+ return `The operating system denied access to ${target} (${code}). This is ` + "a local permission problem, not a UiPath service error — retrying " + `without a permission change will not help. ${remedy}`;
11917
+ }
11906
11918
  function describeConnectivityError(error) {
11907
- const queue = [error];
11908
- const seen = new Set;
11909
- for (let steps = 0;queue.length > 0 && steps < 32; steps++) {
11910
- const current = queue.shift();
11911
- if (current === null || typeof current !== "object")
11912
- continue;
11913
- if (seen.has(current))
11914
- continue;
11915
- seen.add(current);
11916
- const cur = current;
11919
+ for (const cur of walkErrorGraph(error)) {
11917
11920
  const code = typeof cur.code === "string" ? cur.code : undefined;
11918
11921
  const message = typeof cur.message === "string" ? cur.message : undefined;
11919
11922
  if (code && TLS_ERROR_CODES.has(code)) {
@@ -11932,6 +11935,49 @@ function describeConnectivityError(error) {
11932
11935
  instructions: NETWORK_INSTRUCTIONS
11933
11936
  };
11934
11937
  }
11938
+ }
11939
+ return;
11940
+ }
11941
+ function describePermissionError(error) {
11942
+ for (const cur of walkErrorGraph(error)) {
11943
+ const message = typeof cur.message === "string" ? cur.message : undefined;
11944
+ const code = matchLocalPermissionCode(cur.code, message);
11945
+ if (!code)
11946
+ continue;
11947
+ const path3 = localPermissionPath(cur.path, message);
11948
+ return {
11949
+ code,
11950
+ message: message ?? code,
11951
+ ...path3 !== undefined ? { path: path3 } : {},
11952
+ instructions: localPermissionInstructions(code, path3)
11953
+ };
11954
+ }
11955
+ return;
11956
+ }
11957
+ function matchLocalPermissionCode(code, message) {
11958
+ if (typeof code === "string" && LOCAL_PERMISSION_ERROR_CODES.has(code)) {
11959
+ return code;
11960
+ }
11961
+ const match = message ? LOCAL_PERMISSION_MESSAGE_PATTERN.exec(message) : null;
11962
+ return match ? match[1] : undefined;
11963
+ }
11964
+ function localPermissionPath(path3, message) {
11965
+ if (typeof path3 === "string")
11966
+ return path3;
11967
+ return message ? /'([^']+)'/.exec(message)?.[1] : undefined;
11968
+ }
11969
+ function* walkErrorGraph(error) {
11970
+ const queue = [error];
11971
+ const seen = new Set;
11972
+ for (let steps = 0;queue.length > 0 && steps < 32; steps++) {
11973
+ const current = queue.shift();
11974
+ if (current === null || typeof current !== "object")
11975
+ continue;
11976
+ if (seen.has(current))
11977
+ continue;
11978
+ seen.add(current);
11979
+ const cur = current;
11980
+ yield cur;
11935
11981
  if (cur.cause !== undefined)
11936
11982
  queue.push(cur.cause);
11937
11983
  if (Array.isArray(cur.errors))
@@ -11992,6 +12038,12 @@ function classifyError(status, error) {
11992
12038
  if (status !== undefined && status >= 500 && status < 600) {
11993
12039
  return { errorCode: "server_error", retry: "RetryLater" };
11994
12040
  }
12041
+ if (status === undefined && describePermissionError(error)) {
12042
+ return {
12043
+ errorCode: "local_permission_denied",
12044
+ retry: "RetryWillNotFix"
12045
+ };
12046
+ }
11995
12047
  const connectivity = describeConnectivityError(error);
11996
12048
  if (connectivity) {
11997
12049
  return {
@@ -12094,6 +12146,16 @@ async function extractErrorDetails(error, options) {
12094
12146
  message = `${message}: ${connectivity.message}`;
12095
12147
  }
12096
12148
  }
12149
+ const permission = status === undefined ? describePermissionError(error) : undefined;
12150
+ if (permission) {
12151
+ if (permission.message !== message && !message.includes(permission.message)) {
12152
+ message = `${message}: ${permission.message}`;
12153
+ }
12154
+ if (!message.includes(permission.instructions)) {
12155
+ const punctuated = message.endsWith(".") ? message : `${message}.`;
12156
+ message = `${punctuated} ${permission.instructions}`;
12157
+ }
12158
+ }
12097
12159
  let details = rawMessage;
12098
12160
  if (rawBody) {
12099
12161
  if (parsedBody) {
@@ -12133,6 +12195,9 @@ async function extractErrorDetails(error, options) {
12133
12195
  if (parsedBody?.traceId && typeof parsedBody.traceId === "string") {
12134
12196
  context.traceId = parsedBody.traceId;
12135
12197
  }
12198
+ if (permission?.path !== undefined) {
12199
+ context.path = permission.path;
12200
+ }
12136
12201
  if (status === 429) {
12137
12202
  const resp = response;
12138
12203
  const headersObj = resp?.headers;
@@ -13373,6 +13438,7 @@ var CLI_ERROR_CODES = [
13373
13438
  "invalid_argument",
13374
13439
  "authentication_required",
13375
13440
  "permission_denied",
13441
+ "local_permission_denied",
13376
13442
  "not_found",
13377
13443
  "rate_limited",
13378
13444
  "network_error",
@@ -13808,12 +13874,16 @@ function defaultErrorCodeForHttpStatus(status) {
13808
13874
  return "server_error";
13809
13875
  return;
13810
13876
  }
13877
+ var LOCAL_PERMISSION_TEXT_PATTERN = /(?:\b|\()(?:EACCES|EPERM|EROFS)(?::\s|\))/;
13811
13878
  function defaultErrorCodeForFailure(data) {
13812
13879
  if (data.Result === RESULTS.Failure) {
13813
13880
  const status = data.Context?.httpStatus ?? parseHttpStatusFromMessage2(data.Message);
13814
13881
  const errorCode2 = defaultErrorCodeForHttpStatus(status);
13815
13882
  if (errorCode2)
13816
13883
  return errorCode2;
13884
+ if (status === undefined && (LOCAL_PERMISSION_TEXT_PATTERN.test(data.Message) || LOCAL_PERMISSION_TEXT_PATTERN.test(data.Instructions))) {
13885
+ return "local_permission_denied";
13886
+ }
13817
13887
  }
13818
13888
  return defaultErrorCodeForResult(data.Result);
13819
13889
  }
@@ -14371,9 +14441,6 @@ function installRequestHeaderForwarding(BaseApiClass, patchKey, forward) {
14371
14441
  function installSdkUserAgentHeader(BaseApiClass, userAgent) {
14372
14442
  installRequestHeaderForwarding(BaseApiClass, userAgentPatchKey(userAgent), (headers) => addSdkUserAgentHeader(headers, userAgent));
14373
14443
  }
14374
- // ../common/src/tool-provider.ts
14375
- var factorySlot = singleton("PackagerFactoryProvider");
14376
- var moduleSlot = singleton("ToolModuleProvider");
14377
14444
  // ../common/src/solution-project-types.ts
14378
14445
  var LIBRARY_NOT_A_PROJECT = "A library cannot be a project inside a solution — it is a reusable .nupkg that other projects consume as a NuGet dependency, not a deployable unit. Build and publish it on its own ('uip rpa pack <project-dir> <output-path>', then 'uip or libraries upload --file <nupkg-path>'), and reference it from a project's dependencies. To make the published library part of this solution, add it as a resource instead: 'uip solution resources add --source remote --kind Library --name <library-name>'.";
14379
14446
  function unsupportedSolutionProjectType(projectType) {
@@ -14384,6 +14451,8 @@ function unsupportedSolutionProjectType(projectType) {
14384
14451
  }
14385
14452
  // ../common/src/telemetry/ship-succeeded.ts
14386
14453
  var shippedKeysSlot = singleton("ShipSucceededDedupeKeys");
14454
+ // ../common/src/tool-provider.ts
14455
+ var factorySlot = singleton("PackagerFactoryProvider");
14387
14456
  // src/resources/commands/project-utils.ts
14388
14457
  init_src();
14389
14458
  // ../../node_modules/fflate/esm/index.mjs
@@ -32320,4 +32389,4 @@ export {
32320
32389
  EntryPointSpecEnhancer
32321
32390
  };
32322
32391
 
32323
- //# debugId=651D5B44912A89AA64756E2164756E21
32392
+ //# debugId=C241E145A8681E7A64756E2164756E21
@@ -2256,6 +2256,8 @@ init_constants();
2256
2256
 
2257
2257
  // ../auth/src/interactive.ts
2258
2258
  init_src();
2259
+ // ../auth/src/tenantSelection.ts
2260
+ var IDENTIFIER_STATUSES = new Set([400, 403, 404]);
2259
2261
 
2260
2262
  // ../auth/src/selectTenant.ts
2261
2263
  var TENANT_SELECTION_REQUIRED_CODE = "TENANT_SELECTION_REQUIRED";
@@ -2289,4 +2291,4 @@ export {
2289
2291
  getSolutionAuthContext
2290
2292
  };
2291
2293
 
2292
- //# debugId=A8D037BD2594097C64756E2164756E21
2294
+ //# debugId=C583A49A0405670664756E2164756E21
@@ -3,10 +3,11 @@ export { getAvailablePublishLocationsV2, type PublishLocationType, type PublishL
3
3
  export * from "../generated/src/index.js";
4
4
  export { buildSolutionPackageFromDir, bundleSolution, resolveSolutionDir, } from "./bundle-service";
5
5
  export { type AutoInstallClientConfig, type DeploymentAutoInstallRequest, deploymentsAutoInstall, } from "./deployments-auto-install";
6
+ export { getProjectDebugStatus, isDebugProvisioningSucceeded, isDebugProvisioningTerminal, type ProjectDebugStatusClientConfig, type ProjectDebugStatusError, type ProjectDebugStatusResponse, } from "./project-debug-status";
6
7
  export { type PackageVersionSearchFilter, type PackageVersionSearchRow, type PackageVersionsClientConfig, searchPackageVersions, } from "./search-package-versions";
7
8
  export type { AutoCreatedSolution, ParentSolutionDiscovery, PrepareProjectLocationOptions, PrepareProjectLocationResult, ProjectSolutionRegistration, RegisterProjectOptions, SolutionManifestCreation, } from "./solution-file";
8
9
  export { autoScaffoldSolution, createSolutionManifest, findNearestParentUipxFile, findSolutionFile, findSolutionFileUpward, isProjectRegisteredInSolution, normalizeProjectType, prepareProjectLocation, readSolutionManifest, readUipxFile, toPortableRelativePath, tryRegisterProjectInParentSolution, updateSolutionFile, updateUipxSolutionId, } from "./solution-file";
9
- export { getStudioWebSolutionProjects } from "./solution-info";
10
+ export { getStudioWebSolutionProjects, type ListStudioWebSolutionsOptions, listStudioWebSolutions, type StudioWebSolutionsPage, } from "./solution-info";
10
11
  export type { BundleResult, SolutionImportResponse, StudioWebConfig, StudioWebSolutionProject, UipxFile, UipxProject, } from "./types";
11
12
  export { importSolution, overwriteSolution, solutionExistsOnStudioWeb, uploadOrOverwriteSolution, } from "./upload-service";
12
13
  export { SDK_USER_AGENT } from "./user-agent.js";
@@ -0,0 +1,70 @@
1
+ /**
2
+ * Solution debug-provisioning status (Automation Solutions).
3
+ *
4
+ * Hand-written wrapper for
5
+ * `GET /api/v1/solutions/{solutionKey}/projects/debug/status`. It is the same
6
+ * endpoint Studio Web's provisioning flow polls when its SignalR
7
+ * `ProjectDebugStatus` event does not arrive in time
8
+ * (`ProvisionSolutionDebugService._pollDebugStatusFallback$`), which makes it
9
+ * the CLI's way to wait for a `debugProjectAsync` that answered
10
+ * `complete: false`.
11
+ *
12
+ * Generating it instead would take three things, none of them available here:
13
+ *
14
+ * 1. `src/scripts/generate-sdk.ts` excludes the whole `/api/v1/solutions/`
15
+ * prefix as "problematic headers", so every path in this namespace is out
16
+ * of scope by configuration — not merely missing. The two solutions/debug
17
+ * paths that *are* in the committed swagger get filtered out for the same
18
+ * reason; the generated client holds no `/api/v1/solutions/*` at all.
19
+ * 2. This path is absent from the committed swagger, which was last refreshed
20
+ * 2026-03-20, and the generator's source URL is auth-gated.
21
+ * 3. Lifting the prefix exclusion means finding out which headers broke the
22
+ * generator in the first place, which nobody wrote down.
23
+ *
24
+ * So this file is a deviation from how the SDKs are meant to work — see
25
+ * `@uipath/orchestrator-sdk`, where every endpoint is generated and the
26
+ * hand-written layer is helpers only. To undo it: refresh the swagger with a
27
+ * valid session, add this path to `explicitlyIncludedPaths`, regenerate, and
28
+ * delete this file.
29
+ */
30
+ /** Auth/endpoint inputs for {@link getProjectDebugStatus}. */
31
+ export interface ProjectDebugStatusClientConfig {
32
+ /** Tenant-scoped Automation Solutions base path (`.../automationsolutions_`). */
33
+ basePath: string;
34
+ accessToken: string;
35
+ }
36
+ /** One provisioning error, as the status endpoint reports it. */
37
+ export interface ProjectDebugStatusError {
38
+ message: string;
39
+ serviceName?: string;
40
+ resource?: {
41
+ key?: string;
42
+ name?: string;
43
+ kind?: string;
44
+ type?: string;
45
+ };
46
+ }
47
+ /**
48
+ * Response of the debug status endpoint (mirrors Studio Web's
49
+ * `ProjectDebugInfo`). `status` is open-ended on purpose: the service emits
50
+ * non-terminal statuses while provisioning is in flight, and the poll only
51
+ * acts on the terminal ones ({@link DEBUG_PROVISIONING_TERMINAL_STATUSES}).
52
+ */
53
+ export interface ProjectDebugStatusResponse {
54
+ sessionId?: string;
55
+ status?: string;
56
+ errors?: ProjectDebugStatusError[];
57
+ internalFolderId?: number | null;
58
+ }
59
+ /** Whether the provisioning session reached any terminal status. */
60
+ export declare const isDebugProvisioningTerminal: (status?: string) => boolean;
61
+ /** Whether the provisioning session finished successfully. */
62
+ export declare const isDebugProvisioningSucceeded: (status?: string) => boolean;
63
+ /**
64
+ * Fetch the provisioning status of a solution debug session.
65
+ *
66
+ * Non-2xx responses throw the generated runtime's {@link ResponseError} so
67
+ * callers' `extractErrorDetails` handling (status + body parsing) works
68
+ * unchanged.
69
+ */
70
+ export declare function getProjectDebugStatus(config: ProjectDebugStatusClientConfig, solutionKey: string, debugSessionId: string): Promise<ProjectDebugStatusResponse>;
@@ -1,6 +1,7 @@
1
1
  /**
2
2
  * Read solution metadata from UiPath Studio Web.
3
3
  */
4
+ import { type PreviewSolutionDto } from "@uipath/studioweb-sdk";
4
5
  import type { StudioWebConfig, StudioWebSolutionProject } from "./types";
5
6
  /**
6
7
  * Fetch the projects of a Studio Web solution
@@ -14,3 +15,45 @@ import type { StudioWebConfig, StudioWebSolutionProject } from "./types";
14
15
  * produce a targeted error. Throws on any other non-2xx status.
15
16
  */
16
17
  export declare function getStudioWebSolutionProjects(config: StudioWebConfig, organizationName: string, solutionId: string): Promise<StudioWebSolutionProject[] | undefined>;
18
+ /** Options for {@link listStudioWebSolutions}. */
19
+ export interface ListStudioWebSolutionsOptions {
20
+ /** Server-side keyword match against solution and project names. */
21
+ name?: string;
22
+ /** Page size. Studio Web caps a page at 100 rows. */
23
+ limit?: number;
24
+ /**
25
+ * Rows to skip before the first returned one. Paging spans Studio Web's
26
+ * combined solutions + standalone-projects result set (the endpoint pages
27
+ * over both; only the solutions are returned here).
28
+ */
29
+ skip?: number;
30
+ /** Server column to sort by (e.g. `lastModifiedTime`). */
31
+ sortBy?: string;
32
+ /** Sort direction. */
33
+ sortOrder?: "asc" | "desc";
34
+ }
35
+ /** One page of Studio Web solutions. */
36
+ export interface StudioWebSolutionsPage {
37
+ /** Solutions in this page, verbatim from the Studio Web response. */
38
+ solutions: PreviewSolutionDto[];
39
+ /**
40
+ * Rows the server returned in this page — solutions plus the standalone
41
+ * projects that were dropped. Callers paging with `skip` must advance by
42
+ * this count, not by `solutions.length`.
43
+ */
44
+ combinedCount: number;
45
+ /**
46
+ * Total matching rows as reported by the server. Counts the combined
47
+ * solutions + standalone-projects result set, not just solutions.
48
+ */
49
+ totalCount?: number;
50
+ }
51
+ /**
52
+ * List the current user's Studio Web solutions
53
+ * (`Solution_SearchSolutionsAndProjects` →
54
+ * `GET /api/Solution/SearchSolutionsAndProjects`).
55
+ *
56
+ * The endpoint also returns standalone projects; those are dropped — callers
57
+ * get solutions only. Throws on any non-2xx status.
58
+ */
59
+ export declare function listStudioWebSolutions(config: StudioWebConfig, organizationName: string, options?: ListStudioWebSolutionsOptions): Promise<StudioWebSolutionsPage>;
@@ -4,6 +4,15 @@
4
4
  */
5
5
  import type { IFileSystem } from "@uipath/filesystem";
6
6
  import type { SolutionImportResponse, StudioWebConfig } from "./types";
7
+ /**
8
+ * Escape hatch for very large solutions or unusually slow links:
9
+ * `UIPATH_SOLUTION_UPLOAD_TIMEOUT_MS=300000`. Anything non-numeric or
10
+ * non-positive falls back to the default — the ceiling can be raised, not
11
+ * removed, so the silent hang cannot come back through a typo.
12
+ *
13
+ * Exported for tests only — not re-exported from the package barrel.
14
+ */
15
+ export declare function resolveUploadTimeoutMs(): number;
7
16
  /**
8
17
  * Probe Studio Web for the existence of a solution by id.
9
18
  * Returns true on 2xx, false on 404. Throws on any other status so callers
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@uipath/solution-sdk",
3
3
  "license": "MIT",
4
- "version": "1.201.0-preview.115",
4
+ "version": "1.201.0-preview.122",
5
5
  "repository": {
6
6
  "type": "git",
7
7
  "url": "https://github.com/UiPath/cli.git",
@@ -39,5 +39,5 @@
39
39
  "dist"
40
40
  ],
41
41
  "private": false,
42
- "gitHead": "f1086b73654d7728cb71f280588b3e0c77d535fc"
42
+ "gitHead": "6c56f56100be96231fccbaa59e99d64d94808d58"
43
43
  }