@uipath/solution-sdk 1.200.0-preview.120 → 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.
@@ -30,6 +30,19 @@ var __toESM = (mod, isNodeMode, target) => {
30
30
  return to;
31
31
  };
32
32
  var __commonJS = (cb, mod) => () => (mod || cb((mod = { exports: {} }).exports, mod), mod.exports);
33
+ var __returnValue = (v) => v;
34
+ function __exportSetter(name, newValue) {
35
+ this[name] = __returnValue.bind(null, newValue);
36
+ }
37
+ var __export = (target, all) => {
38
+ for (var name in all)
39
+ __defProp(target, name, {
40
+ get: all[name],
41
+ enumerable: true,
42
+ configurable: true,
43
+ set: __exportSetter.bind(all, name)
44
+ });
45
+ };
33
46
  var __esm = (fn, res) => () => (fn && (res = fn(fn = 0)), res);
34
47
  var __require = /* @__PURE__ */ createRequire(import.meta.url);
35
48
 
@@ -417,6 +430,12 @@ var init_is_in_ssh = __esm(() => {
417
430
  });
418
431
 
419
432
  // ../../node_modules/open/index.js
433
+ var exports_open = {};
434
+ __export(exports_open, {
435
+ openApp: () => openApp,
436
+ default: () => open_default,
437
+ apps: () => apps
438
+ });
420
439
  import process8 from "node:process";
421
440
  import path from "node:path";
422
441
  import { fileURLToPath } from "node:url";
@@ -650,6 +669,21 @@ var fallbackAttemptSymbol, __dirname2, localXdgOpenPath, platform, arch, tryEach
650
669
  ...options,
651
670
  target
652
671
  });
672
+ }, openApp = (name, options) => {
673
+ if (typeof name !== "string" && !Array.isArray(name)) {
674
+ throw new TypeError("Expected a valid `name`");
675
+ }
676
+ const { arguments: appArguments = [] } = options ?? {};
677
+ if (appArguments !== undefined && appArguments !== null && !Array.isArray(appArguments)) {
678
+ throw new TypeError("Expected `appArguments` as Array type");
679
+ }
680
+ return baseOpen({
681
+ ...options,
682
+ app: {
683
+ name,
684
+ arguments: appArguments
685
+ }
686
+ });
653
687
  }, apps, open_default;
654
688
  var init_open = __esm(() => {
655
689
  init_wsl_utils();
@@ -729,7 +763,8 @@ class NodeFileSystem {
729
763
  };
730
764
  utils = {
731
765
  open: async (url) => {
732
- await open_default(url);
766
+ const { default: open2 } = await Promise.resolve().then(() => (init_open(), exports_open));
767
+ await open2(url);
733
768
  }
734
769
  };
735
770
  async readFile(path3, options) {
@@ -924,9 +959,7 @@ class NodeFileSystem {
924
959
  }
925
960
  }
926
961
  var LOCK_HEARTBEAT_MS = 5000, LOCK_STALE_MS = 15000, LOCK_MAX_WAIT_MS = 20000, LOCK_MAX_HOLD_MS = 60000, LOCK_RETRY_MIN_MS = 100, LOCK_RETRY_JITTER_MS = 200;
927
- var init_node = __esm(() => {
928
- init_open();
929
- });
962
+ var init_node = () => {};
930
963
  // ../filesystem/src/index.ts
931
964
  var fsInstance, getFileSystem = () => fsInstance;
932
965
  var init_src = __esm(() => {
@@ -934,10 +967,6 @@ var init_src = __esm(() => {
934
967
  init_node();
935
968
  fsInstance = new NodeFileSystem;
936
969
  });
937
- // ../auth/src/server.ts
938
- var init_server = __esm(() => {
939
- init_constants();
940
- });
941
970
 
942
971
  // ../auth/src/config.ts
943
972
  init_constants();
@@ -1177,6 +1206,67 @@ var getTokenExpiration = (accessToken) => {
1177
1206
  }
1178
1207
  };
1179
1208
 
1209
+ // ../auth/src/sessionIdentity.ts
1210
+ var parseAuthFlow = (value) => value === "authorization_code" || value === "client_credentials" || value === "federated_credentials" ? value : undefined;
1211
+ var decodeClaims = (accessToken) => {
1212
+ const [error, claims] = catchError(() => parseJWT(accessToken));
1213
+ return error ? undefined : claims;
1214
+ };
1215
+ var asString = (value) => typeof value === "string" && value.length > 0 ? value : undefined;
1216
+ var resolveIdentityType = (claims, authFlow, email) => {
1217
+ const subType = asString(claims?.sub_type);
1218
+ if (subType) {
1219
+ return subType.startsWith("service") ? "Application" : "User";
1220
+ }
1221
+ if (authFlow) {
1222
+ return authFlow === "authorization_code" ? "User" : "Application";
1223
+ }
1224
+ if (email)
1225
+ return "User";
1226
+ if (asString(claims?.client_id) && !asString(claims?.sub)) {
1227
+ return "Application";
1228
+ }
1229
+ return;
1230
+ };
1231
+ var looksLikeEmail = (value) => value?.includes("@") ?? false;
1232
+ var pickEmail = (claims) => {
1233
+ for (const candidate of [claims?.email, claims?.preferred_username]) {
1234
+ const value = asString(candidate);
1235
+ if (looksLikeEmail(value))
1236
+ return value;
1237
+ }
1238
+ return;
1239
+ };
1240
+ var pickName = (claims) => {
1241
+ const username = asString(claims?.preferred_username);
1242
+ return asString(claims?.name) ?? (looksLikeEmail(username) ? undefined : username);
1243
+ };
1244
+ var resolveSessionIdentity = (accessToken, authFlow) => {
1245
+ const claims = accessToken ? decodeClaims(accessToken) : undefined;
1246
+ const email = pickEmail(claims);
1247
+ const type = resolveIdentityType(claims, authFlow, email);
1248
+ if (!type)
1249
+ return;
1250
+ const identity = { type };
1251
+ if (authFlow)
1252
+ identity.authFlow = authFlow;
1253
+ if (type === "User") {
1254
+ const userId = asString(claims?.sub);
1255
+ if (userId)
1256
+ identity.userId = userId;
1257
+ if (email)
1258
+ identity.userEmail = email;
1259
+ const name = pickName(claims);
1260
+ if (name)
1261
+ identity.userName = name;
1262
+ return identity;
1263
+ }
1264
+ const clientId = asString(claims?.client_id);
1265
+ if (clientId)
1266
+ identity.clientId = clientId;
1267
+ return identity;
1268
+ };
1269
+
1180
1270
  // ../auth/src/envAuth.ts
1181
1271
  var ENV_AUTH_ENABLE_VAR = "UIPATH_CLI_ENABLE_ENV_AUTH";
1182
1272
  var ENFORCE_ROBOT_AUTH_VAR = "UIPATH_CLI_ENFORCE_ROBOT_AUTH";
@@ -1226,6 +1316,7 @@ var readAuthFromEnv = () => {
1226
1316
  }
1227
1317
  const expiration = getTokenExpiration(accessToken);
1228
1318
  const loginStatus = expiration && expiration <= new Date ? "Expired" : "Logged in";
1319
+ const identity = resolveSessionIdentity(accessToken);
1229
1320
  return {
1230
1321
  loginStatus,
1231
1322
  accessToken,
@@ -1235,7 +1326,8 @@ var readAuthFromEnv = () => {
1235
1326
  tenantName,
1236
1327
  tenantId,
1237
1328
  expiration,
1238
- source: "env" /* Env */
1329
+ source: "env-vars" /* EnvironmentVariables */,
1330
+ ...identity ? { identity } : {}
1239
1331
  };
1240
1332
  };
1241
1333
 
@@ -1488,6 +1580,9 @@ var refreshAccessToken = async ({
1488
1580
  return { accessToken: newAccessToken, refreshToken: newRefreshToken };
1489
1581
  };
1490
1582
 
1583
+ // ../auth/src/types.ts
1584
+ var AUTH_FLOW_ENV_VAR = "UIPATH_AUTH_FLOW";
1585
+
1491
1586
  // ../auth/src/utils/envFile.ts
1492
1587
  init_src();
1493
1588
  init_constants();
@@ -1855,7 +1950,8 @@ async function buildFileStatus(tokens, credentials, globalHint) {
1855
1950
  tenantName: credentials.UIPATH_TENANT_NAME,
1856
1951
  tenantId: credentials.UIPATH_TENANT_ID,
1857
1952
  expiration: tokens.expiration,
1858
- source: "file" /* File */,
1953
+ source: "saved-login" /* SavedLogin */,
1954
+ ...identityFields(tokens.accessToken, credentials),
1859
1955
  ...tokens.persistenceWarning ? { hint: tokens.persistenceWarning, persistenceFailed: true } : {},
1860
1956
  ...tokens.lockReleaseFailed ? { lockReleaseFailed: true } : {},
1861
1957
  ...tokens.tokenRefresh ? { tokenRefresh: tokens.tokenRefresh } : {}
@@ -1868,7 +1964,12 @@ async function buildFileStatus(tokens, credentials, globalHint) {
1868
1964
  }
1869
1965
  return result;
1870
1966
  }
1967
+ function identityFields(accessToken, credentials) {
1968
+ const identity = resolveSessionIdentity(accessToken, parseAuthFlow(credentials[AUTH_FLOW_ENV_VAR]));
1969
+ return identity ? { identity } : {};
1970
+ }
1871
1971
  function buildRobotStatus(robotCreds) {
1972
+ const identity = resolveSessionIdentity(robotCreds.accessToken);
1872
1973
  return {
1873
1974
  loginStatus: "Logged in",
1874
1975
  accessToken: robotCreds.accessToken,
@@ -1879,7 +1980,8 @@ function buildRobotStatus(robotCreds) {
1879
1980
  tenantId: robotCreds.tenantId,
1880
1981
  issuer: robotCreds.issuer,
1881
1982
  expiration: getTokenExpiration(robotCreds.accessToken),
1882
- source: "robot" /* Robot */
1983
+ source: "robot" /* Robot */,
1984
+ ...identity ? { identity } : {}
1883
1985
  };
1884
1986
  }
1885
1987
  var isFileNotFoundError = (error) => {
@@ -1930,7 +2032,8 @@ async function circuitBreakerShortCircuit(ctx) {
1930
2032
  tenantName: credentials.UIPATH_TENANT_NAME,
1931
2033
  tenantId: credentials.UIPATH_TENANT_ID,
1932
2034
  expiration,
1933
- source: "file" /* File */
2035
+ source: "saved-login" /* SavedLogin */,
2036
+ ...identityFields(accessToken, credentials)
1934
2037
  } : {},
1935
2038
  hint: globalHint ?? (tokenIsDead ? deadHint : backoffHint),
1936
2039
  refreshCircuitOpen: true,
@@ -1952,7 +2055,8 @@ async function lockAcquireFailureStatus(ctx, error) {
1952
2055
  tenantName: ctx.credentials.UIPATH_TENANT_NAME,
1953
2056
  tenantId: ctx.credentials.UIPATH_TENANT_ID,
1954
2057
  expiration: ctx.expiration,
1955
- source: "file" /* File */,
2058
+ source: "saved-login" /* SavedLogin */,
2059
+ ...identityFields(ctx.accessToken, ctx.credentials),
1956
2060
  hint: globalHint,
1957
2061
  tokenRefresh: {
1958
2062
  attempted: false,
@@ -2152,6 +2256,8 @@ init_constants();
2152
2256
 
2153
2257
  // ../auth/src/interactive.ts
2154
2258
  init_src();
2259
+ // ../auth/src/tenantSelection.ts
2260
+ var IDENTIFIER_STATUSES = new Set([400, 403, 404]);
2155
2261
 
2156
2262
  // ../auth/src/selectTenant.ts
2157
2263
  var TENANT_SELECTION_REQUIRED_CODE = "TENANT_SELECTION_REQUIRED";
@@ -2162,10 +2268,6 @@ var TENANT_SELECTION_CODES = new Set([
2162
2268
  ]);
2163
2269
  // ../auth/src/logout.ts
2164
2270
  init_src();
2165
-
2166
- // ../auth/src/index.ts
2167
- init_server();
2168
-
2169
2271
  // src/solution-auth.ts
2170
2272
  async function getSolutionAuthContext(options) {
2171
2273
  const ctx = await getAuthContext({
@@ -2189,4 +2291,4 @@ export {
2189
2291
  getSolutionAuthContext
2190
2292
  };
2191
2293
 
2192
- //# debugId=D8E920A0393CD84264756E2164756E21
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>;
@@ -35,11 +35,12 @@ export interface PackageVersionSearchRow {
35
35
  /**
36
36
  * Search a package's published versions within a feed.
37
37
  *
38
- * `feedFolderKey` is sent as `X-UIPATH-FolderKey` so results are scoped to
39
- * that feed, matching the package search. Non-2xx responses throw the
40
- * generated runtime's {@link ResponseError}.
38
+ * When `feedFolderKey` is set, it is sent as `X-UIPATH-FolderKey` so results
39
+ * are scoped to that feed, matching the package search. Omitting it searches
40
+ * the tenant feed. Non-2xx responses throw the generated runtime's
41
+ * {@link ResponseError}.
41
42
  */
42
- export declare function searchPackageVersions(config: PackageVersionsClientConfig, packageKey: string, filter: PackageVersionSearchFilter, feedFolderKey: string): Promise<{
43
+ export declare function searchPackageVersions(config: PackageVersionsClientConfig, packageKey: string, filter: PackageVersionSearchFilter, feedFolderKey?: string): Promise<{
43
44
  count?: number;
44
45
  values: PackageVersionSearchRow[];
45
46
  }>;
@@ -11,7 +11,9 @@ import type { UipxFile, UipxProject } from "./types";
11
11
  * - `AlreadyRegistered` — Project was already in Projects[]; no write performed.
12
12
  * - `Skipped` — A candidate solution was found but registration was deliberately
13
13
  * not attempted (ambiguous: multiple `.uipx` in same dir, or the
14
- * project dir sits outside the discovered solution dir).
14
+ * project dir sits outside the discovered solution dir, or the
15
+ * project's type cannot live in a solution — see
16
+ * {@link unsupportedSolutionProjectType}).
15
17
  * - `Failed` — Registration was attempted and an error occurred (read/write/parse).
16
18
  * - `NotInSolution` — No `.uipx` file was found by walking ancestor directories. The
17
19
  * project was created in standalone mode. This is the explicit
@@ -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.200.0-preview.120",
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": "173ad4b4930bd3e17a493b32e9f1c3c616ea1c10"
42
+ "gitHead": "c70ccfc0b12e637441d67df1d212b71d7784b5f8"
43
43
  }