@uipath/solution-sdk 1.201.0-preview.115 → 1.201.0-preview.121
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 +330 -48
- package/dist/resources/index.js +83 -14
- package/dist/solution-auth.js +3 -1
- package/dist/src/index.d.ts +2 -1
- package/dist/src/project-debug-status.d.ts +70 -0
- package/dist/src/solution-info.d.ts +43 -0
- package/dist/src/upload-service.d.ts +9 -0
- package/package.json +2 -2
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.
|
|
8537
|
+
version: "1.201.0-preview.121",
|
|
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/
|
|
9535
|
-
function
|
|
9536
|
-
return
|
|
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
|
|
9547
|
-
|
|
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
|
|
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
|
|
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
|
|
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=
|
|
16465
|
+
//# debugId=CD797C0B703ED07764756E2164756E21
|
package/dist/resources/index.js
CHANGED
|
@@ -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
|
|
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=
|
|
32392
|
+
//# debugId=C241E145A8681E7A64756E2164756E21
|
package/dist/solution-auth.js
CHANGED
|
@@ -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=
|
|
2294
|
+
//# debugId=C583A49A0405670664756E2164756E21
|
package/dist/src/index.d.ts
CHANGED
|
@@ -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.
|
|
4
|
+
"version": "1.201.0-preview.121",
|
|
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": "
|
|
42
|
+
"gitHead": "c70ccfc0b12e637441d67df1d212b71d7784b5f8"
|
|
43
43
|
}
|