import { IUiPath } from '../core/index'; /** * Simplified universal pagination cursor * Used to fetch next/previous pages */ interface PaginationCursor { /** Opaque string containing all information needed to fetch next page */ value: string; } /** * Discriminated union for pagination methods - ensures cursor and jumpToPage are mutually exclusive */ type PaginationMethodUnion = { cursor?: PaginationCursor; jumpToPage?: never; } | { cursor?: never; jumpToPage?: number; } | { cursor?: never; jumpToPage?: never; }; /** * Pagination options. Users cannot specify both cursor and jumpToPage. */ type PaginationOptions = { /** Size of the page to fetch (items per page) */ pageSize?: number; } & PaginationMethodUnion; /** * Paginated response containing items and navigation information */ interface PaginatedResponse { /** The items in the current page */ items: T[]; /** Total count of items across all pages (if available) */ totalCount?: number; /** Whether more pages are available */ hasNextPage: boolean; /** Cursor to fetch the next page (if available) */ nextCursor?: PaginationCursor; /** Cursor to fetch the previous page (if available) */ previousCursor?: PaginationCursor; /** Current page number (1-based, if available) */ currentPage?: number; /** Total number of pages (if available) */ totalPages?: number; /** Whether this pagination type supports jumping to arbitrary pages */ supportsPageJump: boolean; } /** * Response for non-paginated calls that includes both data and total count */ interface NonPaginatedResponse { items: T[]; totalCount?: number; } /** * Helper type for defining paginated method overloads * Creates a union type of all ways pagination can be triggered */ type HasPaginationOptions = (T & { pageSize: number; }) | (T & { cursor: PaginationCursor; }) | (T & { jumpToPage: number; }); /** * Pagination types supported by the SDK */ declare enum PaginationType { OFFSET = "offset", TOKEN = "token" } /** * Interface for service access methods needed by pagination helpers */ interface PaginationServiceAccess { get(path: string, options?: any): Promise<{ data: T; }>; post(path: string, body?: any, options?: any): Promise<{ data: T; }>; requestWithPagination(method: string, path: string, paginationOptions: PaginationOptions, options: RequestWithPaginationOptions): Promise>; } /** * Field names for extracting data from paginated responses. */ interface PaginationFieldNames { itemsField?: string; totalCountField?: string; continuationTokenField?: string; } /** * Options for the requestWithPagination method in BaseService. */ interface RequestWithPaginationOptions extends RequestSpec { pagination: PaginationFieldNames & { paginationType: PaginationType; paginationParams?: { pageSizeParam?: string; offsetParam?: string; tokenParam?: string; countParam?: string; convertToSkip?: boolean; zeroBased?: boolean; }; }; } /** * HTTP methods supported by the API client */ type HttpMethod = 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE' | 'HEAD' | 'OPTIONS'; /** * Supported response types for API requests */ type ResponseType = 'json' | 'text' | 'blob' | 'arraybuffer' | 'stream'; /** * Query parameters type with support for arrays and nested objects */ type QueryParams = Record | null | undefined>; /** * Standard HTTP headers type */ type Headers = Record; /** * Options for request retries */ interface RetryOptions { /** Maximum number of retry attempts */ maxRetries?: number; /** Base delay between retries in milliseconds */ retryDelay?: number; /** Whether to use exponential backoff */ useExponentialBackoff?: boolean; /** Status codes that should trigger a retry */ retryableStatusCodes?: number[]; } /** * Options for request timeouts */ interface TimeoutOptions { /** Request timeout in milliseconds */ timeout?: number; /** Whether to abort the request on timeout */ abortOnTimeout?: boolean; } /** * Options for request body transformation */ interface BodyOptions { /** Whether to stringify the body */ stringify?: boolean; /** Content type override */ contentType?: string; } /** * Pagination metadata for API requests */ interface PaginationMetadata { /** Type of pagination used by the API endpoint */ paginationType: PaginationType; /** Response field containing items array (defaults to 'value') */ itemsField?: string; /** Response field containing total count (defaults to '@odata.count') */ totalCountField?: string; /** Response field containing continuation token (defaults to 'continuationToken') */ continuationTokenField?: string; } /** * Base interface for all API requests */ interface RequestSpec { /** HTTP method for the request */ method?: HttpMethod; /** URL endpoint for the request */ url?: string; /** Query parameters to be appended to the URL */ params?: QueryParams; /** HTTP headers to include with the request */ headers?: Headers; /** Raw body content (takes precedence over data) */ body?: unknown; /** Expected response type */ responseType?: ResponseType; /** Request timeout options */ timeoutOptions?: TimeoutOptions; /** Retry behavior options */ retryOptions?: RetryOptions; /** Body transformation options */ bodyOptions?: BodyOptions; /** AbortSignal for cancelling the request */ signal?: AbortSignal; /** Pagination metadata for the request */ pagination?: PaginationMetadata; } interface ApiResponse { data: T; } /** * Base class for all UiPath SDK services. * * Provides common functionality for authentication, configuration, and API communication. * All service classes extend this base to inherit dependency injection and HTTP client access. * * This class implements the dependency injection pattern where services receive a configured * UiPath instance. The ApiClient is created internally and handles all HTTP operations * including authentication token management. * * @remarks * Service classes should extend this base and call `super(uiPath)` in their constructor. * Protected HTTP methods (get, post, put, patch, delete) are available to all subclasses. * */ declare class BaseService { #private; /** * SDK configuration (read-only). Available to subclasses so they can * fall back to init-time defaults like `folderKey`. */ protected readonly config: { folderKey?: string; }; /** * Creates a base service instance with dependency injection. * * Extracts configuration, execution context, and token manager from the UiPath instance * to initialize an authenticated API client. The ApiClient handles all HTTP operations * and token management internally. * * @param instance - UiPath SDK instance providing authentication and configuration. * Services receive this via dependency injection in the modular pattern. * @param headers - Optional default headers to include in every request (e.g. `x-uipath-external-user-id` for * CAS external-app auth) * * @example * ```typescript * // Services automatically call this via super() * export class EntityService extends BaseService { * constructor(instance: IUiPath) { * super(instance); // Initializes the internal ApiClient * } * } * * // Usage in modular pattern * import { UiPath } from '@uipath/uipath-typescript/core'; * import { Entities } from '@uipath/uipath-typescript/entities'; * * const sdk = new UiPath(config); * await sdk.initialize(); * const entities = new Entities(sdk); * ``` */ constructor(instance: IUiPath, headers?: Record); /** * Gets a valid authentication token, refreshing if necessary. * Use this when you need to manually add Authorization headers (e.g., direct uploads). * * @returns Promise resolving to a valid access token string * @throws AuthenticationError if no token is available or refresh fails */ protected getValidAuthToken(): Promise; /** * Creates a service accessor for pagination helpers * This allows pagination helpers to access protected methods without making them public */ protected createPaginationServiceAccess(): PaginationServiceAccess; protected request(method: string, path: string, options?: RequestSpec): Promise>; protected requestWithSpec(spec: RequestSpec): Promise>; protected get(path: string, options?: RequestSpec): Promise>; protected post(path: string, data?: unknown, options?: RequestSpec): Promise>; protected put(path: string, data?: unknown, options?: RequestSpec): Promise>; protected patch(path: string, data?: unknown, options?: RequestSpec): Promise>; protected delete(path: string, options?: RequestSpec): Promise>; /** * Execute a request with cursor-based pagination */ protected requestWithPagination(method: string, path: string, paginationOptions: PaginationOptions, options: RequestWithPaginationOptions): Promise>; /** * Validates and prepares pagination parameters from options */ private validateAndPreparePaginationParams; /** * Prepares request parameters for pagination based on pagination type */ private preparePaginationRequestParams; /** * Creates a paginated response from API response */ private createPaginatedResponseFromResponse; /** * Determines if there are more pages based on pagination type and metadata */ private determineHasMorePages; } interface BaseOptions { expand?: string; select?: string; } /** * Common request options interface used across services for querying data */ interface RequestOptions extends BaseOptions { filter?: string; orderby?: string; } /** * Options that scope a name-based lookup (e.g. `getByName`) to a folder. * Provide one of `folderId`, `folderKey`, or `folderPath`. When more than * one is supplied, all are forwarded; the server applies precedence * `folderPath` > `folderKey` > `folderId`. */ interface FolderScopedOptions extends BaseOptions { /** Numeric folder ID. */ folderId?: number; /** Folder key (GUID-formatted string). */ folderKey?: string; /** Slash-delimited folder path, e.g. `'Shared/Finance'`. */ folderPath?: string; } /** * Type for field mapping configuration * Maps source field names to target field names */ type FieldMapping = { [sourceField: string]: string; }; /** * Base service for services that need folder-specific functionality. * * Extends BaseService with additional methods for working with folder-scoped resources * in UiPath Orchestrator. Services that work with folders (Assets, Queues) extend this class. * * @remarks * This class provides helper methods for making folder-scoped API calls, handling folder IDs * in request headers, and managing cross-folder queries. */ declare class FolderScopedService extends BaseService { /** * Gets resources in a folder with optional query parameters * * @param endpoint - API endpoint to call * @param folderId - required folder ID * @param options - Query options * @param transformFn - Optional function to transform the response data * @returns Promise resolving to an array of resources */ protected _getByFolder(endpoint: string, folderId: number, options?: Record, transformFn?: (item: T) => R): Promise; /** * Look up a single resource by name on a folder-scoped OData collection. * * Shared by `getByName` implementations across services (Assets, Processes, etc). * Handles: * - Name validation via `validateName` * - Folder header resolution via `resolveFolderHeaders` (folderId → ID/key * header by type, folderPath → encoded path header, falls back to * init-time `config.folderKey` from the `uipath:folder-key` meta tag) * - OData `$filter=Name eq '…'` with single-quote escaping + `$top=1` * - Empty-result → `NotFoundError` with folder context in the message * * The transform step is caller-provided because each resource has its own * PascalCase → camelCase field mapping. * * @param resourceType - Resource label used in validation + error messages (e.g. 'Asset', 'Process') * @param endpoint - Folder-scoped OData collection endpoint * @param name - Resource name to search for * @param options - Folder scoping (`folderId` / `folderKey` / `folderPath`) + OData query options (`expand`, `select`) * @param transform - Maps a raw OData item to the typed response (e.g. PascalCase → camelCase via field map) * @param responseFieldMap - Optional response field map (API → SDK), reversed internally by * `transformOptions` to rewrite SDK field names back to API names in user-supplied * `expand` / `select` (symmetric counterpart to `transform`) * @throws ValidationError when inputs are malformed; NotFoundError when no match */ protected getByNameLookup(resourceType: string, endpoint: string, name: string, options: FolderScopedOptions, transform: (raw: TRaw) => T, responseFieldMap?: FieldMapping): Promise; } /** * Interface for queue response */ interface QueueGetResponse { key: string; name: string; id: number; description: string; maxNumberOfRetries: number; acceptAutomaticallyRetry: boolean; retryAbandonedItems: boolean; enforceUniqueReference: boolean; encrypted: boolean; specificDataJsonSchema: string | null; outputDataJsonSchema: string | null; analyticsDataJsonSchema: string | null; createdTime: string; processScheduleId: number | null; slaInMinutes: number; riskSlaInMinutes: number; releaseId: number | null; isProcessInCurrentFolder: boolean | null; foldersCount: number; folderId: number; folderName: string; } /** * Options for getting queues across folders */ type QueueGetAllOptions = RequestOptions & PaginationOptions & { /** * Optional folder ID to filter queues by folder */ folderId?: number; }; interface QueueGetByIdOptions extends BaseOptions { } /** * Service for managing UiPath Queues * * Queues are a fundamental component of UiPath automation that enable distributed and scalable processing of work items. [UiPath Queues Guide](https://docs.uipath.com/orchestrator/automation-cloud/latest/user-guide/about-queues-and-transactions) * * ### Usage * * Prerequisites: Initialize the SDK first - see [Getting Started](/uipath-typescript/getting-started/#import-initialize) * * ```typescript * import { Queues } from '@uipath/uipath-typescript/queues'; * * const queues = new Queues(sdk); * const allQueues = await queues.getAll(); * ``` */ interface QueueServiceModel { /** * Gets all queues across folders with optional filtering and folder scoping * * @signature getAll(options?) → Promise<QueueGetResponse[]> * @param options Query options including optional folderId and pagination options * @returns Promise resolving to either an array of queues NonPaginatedResponse or a PaginatedResponse when pagination options are used. * {@link QueueGetResponse} * @example * ```typescript * // Standard array return * const allQueues = await queues.getAll(); * * // Get queues within a specific folder * const folderQueues = await queues.getAll({ * folderId: * }); * * // Get queues with filtering * const filteredQueues = await queues.getAll({ * filter: "name eq 'MyQueue'" * }); * * // First page with pagination * const page1 = await queues.getAll({ pageSize: 10 }); * * // Navigate using cursor * if (page1.hasNextPage) { * const page2 = await queues.getAll({ cursor: page1.nextCursor }); * } * * // Jump to specific page * const page5 = await queues.getAll({ * jumpToPage: 5, * pageSize: 10 * }); * ``` */ getAll(options?: T): Promise ? PaginatedResponse : NonPaginatedResponse>; /** * Gets a single queue by ID * * @param id - Queue ID * @param folderId - Required folder ID * @returns Promise resolving to a queue definition * @example * ```typescript * // Get queue by ID * const queue = await queues.getById(, ); * ``` */ getById(id: number, folderId: number, options?: QueueGetByIdOptions): Promise; } /** * Service for interacting with UiPath Orchestrator Queues API */ declare class QueueService extends FolderScopedService implements QueueServiceModel { getAll(options?: T): Promise ? PaginatedResponse : NonPaginatedResponse>; getById(id: number, folderId: number, options?: QueueGetByIdOptions): Promise; } export { QueueService, QueueService as Queues }; export type { QueueGetAllOptions, QueueGetByIdOptions, QueueGetResponse, QueueServiceModel };