@uipath/integrationservice-sdk 0.2.0 → 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (31) hide show
  1. package/README.md +355 -143
  2. package/dist/index.js +22244 -3026
  3. package/dist/src/client-factory.d.ts +25 -2
  4. package/dist/src/dap/essential-config.d.ts +29 -0
  5. package/dist/src/dap/filter-builder/field-metadata.d.ts +18 -0
  6. package/dist/src/dap/filter-builder/filter-group-operator.d.ts +4 -0
  7. package/dist/src/dap/filter-builder/filter-operator.d.ts +32 -0
  8. package/dist/src/dap/filter-builder/filter-tree.d.ts +12 -0
  9. package/dist/src/dap/filter-builder/filter.d.ts +11 -0
  10. package/dist/src/dap/filter-builder/index.d.ts +47 -0
  11. package/dist/src/dap/filter-builder/uuid.d.ts +8 -0
  12. package/dist/src/dap/filter-builder/workflow-value.d.ts +9 -0
  13. package/dist/src/dap/helpers/array-extensions.d.ts +8 -0
  14. package/dist/src/dap/helpers/clr-type-mock.d.ts +17 -0
  15. package/dist/src/dap/helpers/constants.d.ts +9 -0
  16. package/dist/src/dap/helpers/enum-item.d.ts +10 -0
  17. package/dist/src/dap/helpers/event-field.d.ts +20 -0
  18. package/dist/src/dap/helpers/exceptions.d.ts +11 -0
  19. package/dist/src/dap/helpers/filter-builder/filter-helper.d.ts +19 -0
  20. package/dist/src/dap/helpers/filter-builder/jmes-helper.d.ts +68 -0
  21. package/dist/src/dap/helpers/string-extensions.d.ts +9 -0
  22. package/dist/src/dap/helpers/translation.d.ts +11 -0
  23. package/dist/src/dap/helpers/trim.d.ts +6 -0
  24. package/dist/src/dap/index.d.ts +6 -0
  25. package/dist/src/dap/input-metadata.d.ts +21 -0
  26. package/dist/src/dap/types.d.ts +105 -0
  27. package/dist/src/dap/validation/index.d.ts +41 -0
  28. package/dist/src/dap/validation/rules.d.ts +47 -0
  29. package/dist/src/dap/validation/types.d.ts +53 -0
  30. package/dist/src/index.d.ts +2 -1
  31. package/package.json +6 -4
package/README.md CHANGED
@@ -1,10 +1,14 @@
1
1
  # Integration Service SDK
2
2
 
3
- TypeScript SDK for UiPath Integration Service APIs.
3
+ TypeScript SDK for UiPath Integration Service APIs (Connections and Elements).
4
4
 
5
5
  ## Overview
6
6
 
7
- The Integration Service SDK provides a strongly-typed TypeScript client for interacting with UiPath Integration Service APIs. It handles authentication, HTTP requests, and type conversions automatically.
7
+ The SDK provides:
8
+
9
+ 1. **Generated API clients** for Connections and Elements endpoints (auto-generated from OpenAPI specs)
10
+ 2. **Factory functions** for creating authenticated API clients
11
+ 3. **DAP utilities** for building connector essential configuration, metadata extraction, and node validation
8
12
 
9
13
  ## Installation
10
14
 
@@ -12,219 +16,427 @@ The Integration Service SDK provides a strongly-typed TypeScript client for inte
12
16
  bun install @uipath/integrationservice-sdk
13
17
  ```
14
18
 
15
- ## Usage
19
+ ---
20
+
21
+ ## API Clients
22
+
23
+ ### createApiClient (Recommended)
16
24
 
17
- ### Using createApiClient (Recommended)
25
+ Generic factory that creates any API client using the current login session from `@uipath/auth`:
18
26
 
19
- The easiest way to create a client. It reads login state from `@uipath/auth` automatically:
27
+ The SDK has two API domains:
28
+ - **Connections** (`connections_` endpoint) — `ConnectionsApi`, `ConnectorsApi`, `SessionsApi`, `ConnectionOperationsApi`
29
+ - **Elements** (`elements_/v3/element` endpoint) — `ElementsApi`
20
30
 
21
31
  ```typescript
22
- import { createApiClient } from "@uipath/integrationservice-sdk";
32
+ import { createApiClient, ElementsApi, ConnectorsApi } from "@uipath/integrationservice-sdk";
33
+
34
+ // Elements client (most common — used by flow-tool, case-tool, agent-tool)
35
+ const elements = await createApiClient(ElementsApi);
36
+
37
+ // Connectors client (part of the Connections domain — lists/describes connectors)
38
+ const connectors = await createApiClient(ConnectorsApi);
39
+
40
+ // With tenant override
41
+ const client = await createApiClient(ElementsApi, { tenant: "my-tenant" });
42
+ ```
23
43
 
24
- const client = await createApiClient();
44
+ For Connections/Sessions APIs, the integrationservice-tool uses the manual config pattern:
25
45
 
26
- // Or with a specific tenant
27
- const client = await createApiClient({ tenant: "my-tenant" });
46
+ ```typescript
47
+ import {
48
+ ConnectionsApi,
49
+ SessionsApi,
50
+ createConnectionsConfig,
51
+ folderOverride,
52
+ } from "@uipath/integrationservice-sdk";
53
+
54
+ const config = await createConnectionsConfig({ tenant: "my-tenant" });
55
+ const connectionsApi = new ConnectionsApi(config);
56
+ const sessionsApi = new SessionsApi(config);
57
+
58
+ // With folder override
59
+ const connections = await connectionsApi.getConnections({}, folderOverride("folder-key"));
28
60
  ```
29
61
 
30
- ### Manual Setup
62
+ **Options (`CreateApiClientOptions`):**
63
+
64
+ | Option | Type | Description |
65
+ |--------|------|-------------|
66
+ | `tenant` | `string?` | Tenant name override. Falls back to session tenant. |
67
+ | `loginValidity` | `number?` | Minimum token validity in minutes. |
31
68
 
32
- If you need full control over the configuration:
69
+ ### createConnectionsConfig / createElementsConfig
70
+
71
+ Lower-level factories for when you need the raw configuration object:
33
72
 
34
73
  ```typescript
35
- import { IntegrationServiceClient } from "@uipath/integrationservice-sdk";
74
+ import { createConnectionsConfig, createElementsConfig } from "@uipath/integrationservice-sdk";
36
75
 
37
- const client = new IntegrationServiceClient({
38
- baseUrl: "https://cloud.uipath.com",
39
- accessToken: "your-access-token",
40
- organizationId: "your-org-id",
41
- tenantName: "your-tenant",
42
- });
76
+ const connConfig = await createConnectionsConfig();
77
+ const elemConfig = await createElementsConfig();
43
78
  ```
44
79
 
45
- ### List Connectors
80
+ ### executeOperation
81
+
82
+ Direct HTTP operation against a connection instance:
46
83
 
47
84
  ```typescript
48
- const connectors = await client.listConnectors();
85
+ import { executeOperation } from "@uipath/integrationservice-sdk";
86
+
87
+ // GET (list records)
88
+ const tickets = await executeOperation(options, connectionId, "tickets", "GET");
89
+
90
+ // POST (create record)
91
+ const result = await executeOperation(options, connectionId, "tickets", "POST", {
92
+ subject: "New Ticket",
93
+ priority: "high",
94
+ });
49
95
 
50
- connectors.forEach(connector => {
51
- logger.info(`- ${connector.name} (${connector.key})`);
96
+ // GET with query parameters
97
+ const filtered = await executeOperation(options, connectionId, "tickets", "GET", undefined, {
98
+ limit: "10",
52
99
  });
53
100
  ```
54
101
 
55
- ### Get Connector by Key
102
+ ### folderOverride
103
+
104
+ Creates an `InitOverrideFunction` for folder-scoped API calls:
56
105
 
57
106
  ```typescript
58
- const connector = await client.getConnectorByKey("uipath-salesforce-sfdc");
107
+ import { ConnectionsApi, createConnectionsConfig, folderOverride } from "@uipath/integrationservice-sdk";
108
+
109
+ const config = await createConnectionsConfig();
110
+ const api = new ConnectionsApi(config);
111
+ const connections = await api.getConnections({}, folderOverride("folder-key"));
59
112
  ```
60
113
 
61
- ### List Connections
114
+ ---
62
115
 
63
- ```typescript
64
- // List all connections for a connector
65
- const connections = await client.listConnections("uipath-salesforce-sfdc");
66
-
67
- // List connections in specific folder
68
- const folderConnections = await client.listConnections(
69
- "uipath-salesforce-sfdc",
70
- "my-folder-key"
71
- );
72
- ```
116
+ ## Generated API Classes
73
117
 
74
- ### Create Connection (OAuth Flow)
118
+ Two API domains, auto-generated from OpenAPI specs in `generated/`:
75
119
 
76
- ```typescript
77
- // Step 1: Initiate connection creation
78
- const createResponse = await client.createConnection("uipath-doist-todoist");
120
+ - **Connections domain** (`{baseUrl}/{orgId}/{tenant}/connections_`) — `ConnectorsApi`, `ConnectionsApi`, `SessionsApi`, `ConnectionOperationsApi`
121
+ - **Elements domain** (`{baseUrl}/{orgId}/{tenant}/elements_/v3/element`) `ElementsApi`
79
122
 
80
- // Step 2: Open createResponse.authUrl in browser for user to authenticate
123
+ ### ElementsApi
81
124
 
82
- // Step 3: Poll session status
83
- let status = await client.getSessionStatus(createResponse.sessionId);
125
+ #### Objects & Metadata (Static — no connection needed)
84
126
 
85
- while (status.status === "pending") {
86
- await new Promise(resolve => setTimeout(resolve, 5000));
87
- status = await client.getSessionStatus(createResponse.sessionId);
88
- }
127
+ | Method | Parameters | Description | Used By |
128
+ |--------|-----------|-------------|---------|
129
+ | `getObjects` | `{ elementKey }` | List objects for a connector | is-tool, case-tool |
130
+ | `getActivities` | `{ elementKey }` | List activities (curated operations) | is-tool, case-tool |
131
+ | `getObjectMetadata` | `{ elementKey, objectName, includeParentArray? }` | Get object field metadata | case-tool |
132
+ | `getObjectMetadataRaw` | `{ elementKey, objectName, includeParentArray? }` | Get raw metadata response (for JSON parsing) | flow-tool |
133
+ | `getObjectSwagger` | `{ elementKey, objectName }` | Get object swagger/OpenAPI definition | case-tool |
134
+ | `getEventObjects` | `{ elementKey, operationName }` | List trigger event objects | is-tool |
135
+ | `getEventObjectMetadata` | `{ elementKey, operationName, objectName, allFields? }` | Get trigger event metadata | is-tool |
89
136
 
90
- if (status.status === "success") {
91
- // Connection created
92
- }
93
- ```
137
+ #### Objects & Metadata (Instance connection-specific, includes custom fields)
94
138
 
95
- ### List Objects
139
+ | Method | Parameters | Description | Used By |
140
+ |--------|-----------|-------------|---------|
141
+ | `getInstanceObjects` | `{ connectionOrInstanceId, elementKey }` | List objects for a connection instance | is-tool, agent-tool |
142
+ | `getInstanceObjectMetadata` | `{ connectionOrInstanceId, elementKey, objectName, includeParentArray? }` | Get instance object metadata | agent-tool |
143
+ | `getInstanceObjectMetadataRaw` | `{ connectionOrInstanceId, elementKey, objectName, includeParentArray? }` | Get raw instance metadata response | flow-tool |
144
+ | `getInstanceEventObjects` | `{ connectionOrInstanceId, elementKey, operationName }` | List trigger event objects for instance | is-tool |
145
+ | `getInstanceEventObjectMetadata` | `{ connectionOrInstanceId, elementKey, operationName, objectName, allFields? }` | Get instance trigger event metadata | is-tool, flow-tool |
96
146
 
97
- ```typescript
98
- const objects = await client.listObjects(
99
- "uipath-zoho-desk",
100
- "connection-id-here"
101
- );
102
- ```
147
+ #### Other Elements Methods
148
+
149
+ | Method | Description |
150
+ |--------|-------------|
151
+ | `getElementMetadata` | Get element-level metadata (connector details) |
152
+ | `getAvailableConnectors` | List available connectors via elements endpoint |
153
+ | `getElementSwagger` | Get full connector swagger definition |
154
+ | `getEventOperations` | List event operations (static) |
155
+ | `getInstanceEventOperations` | List event operations (instance) |
156
+ | `getInstanceWebhookSpec` | Get webhook specification for instance |
157
+ | `getInstanceDocs` | Get instance documentation |
158
+ | `getInstanceObjectDocs` | Get instance object documentation |
159
+
160
+ ### ConnectorsApi
161
+
162
+ | Method | Parameters | Description | Used By |
163
+ |--------|-----------|-------------|---------|
164
+ | `apiV1ConnectorsGet` | `{ hasHttpRequest? }` | List all connectors | is-tool |
165
+ | `apiV1ConnectorsKeyOrIdGet` | `{ keyOrId }` | Get connector by key or ID | is-tool, agent-tool |
166
+ | `apiV1ConnectorsKeyOrIdConnectionGet` | `{ keyOrId }` | Get default connection for a connector | is-tool, agent-tool |
167
+ | `apiV1ConnectorsKeyOrIdConnectionsGet` | `{ keyOrId, allFolders?, pageSize?, ... }` | List connections for a connector | is-tool, case-tool |
168
+ | `apiV1ConnectorsKeyOrIdConnectionsPost` | `{ keyOrId, createConnectionRequest }` | Create connection for a connector | — |
169
+ | `apiV1ConnectorsKeyOrIdMetadataGet` | `{ keyOrId }` | Get connector metadata | — |
170
+ | `apiV1ConnectorsKeyOrIdTriggersGet` | `{ keyOrId, allFolders? }` | Get triggers for a connector | — |
171
+
172
+ ### ConnectionsApi
173
+
174
+ | Method | Parameters | Description | Used By |
175
+ |--------|-----------|-------------|---------|
176
+ | `apiV1ConnectionsGet` | `{ allFolders?, pageSize?, filter?, ... }` | List all connections | is-tool |
177
+ | `apiV1ConnectionsPost` | `{ createConnectionRequest }` | Create new connection (OAuth flow) | is-tool |
178
+ | `apiV1ConnectionsConnectionIdGet` | `{ connectionId, includeConfigs? }` | Get connection by ID | agent-tool |
179
+ | `apiV1ConnectionsConnectionIdAuthPost` | `{ connectionId }` | Re-authenticate connection | is-tool |
180
+ | `apiV1ConnectionsConnectionIdPingGet` | `{ connectionId, forceRefresh? }` | Check if connection is active | is-tool |
181
+ | `apiV1ConnectionsConnectionIdDelete` | `{ connectionId }` | Delete connection | — |
182
+ | `apiV1ConnectionsConnectionIdRenamePatch` | `{ connectionId, renameRequest }` | Rename connection | — |
183
+ | `apiV1ConnectionsConnectionIdSetDefaultPatch` | `{ connectionId }` | Set as default connection | — |
184
+ | `apiV1ConnectionsConnectionIdTokenGet` | `{ connectionId, tokenType? }` | Get connection access token | — |
185
+ | `apiV1ConnectionsConnectionIdTriggersGet` | `{ connectionId }` | Get triggers for connection | — |
186
+
187
+ ### SessionsApi
188
+
189
+ | Method | Parameters | Description | Used By |
190
+ |--------|-----------|-------------|---------|
191
+ | `apiV1SessionsSessionIdGet` | `{ sessionId }` | Poll OAuth session status during auth flow | is-tool |
192
+
193
+ ### ConnectionOperationsApi
194
+
195
+ | Method | Parameters | Description | Used By |
196
+ |--------|-----------|-------------|---------|
197
+ | `apiV1ConnectionsConnectionIdOperationsGet` | `{ connectionId }` | List operations for a connection | — |
198
+ | `apiV1ConnectionsConnectionIdOperationsOperationObjectsGet` | `{ connectionId, operation }` | Get objects for an operation | — |
199
+ | `apiV1ConnectionsConnectionIdOperationsOperationNameObjectsObjectNameEventFieldsGet` | `{ connectionId, operationName, objectName }` | Get event fields | — |
200
+
201
+ ---
202
+
203
+ ## DAP (Design-time Automation Platform) Utilities
103
204
 
104
- ### List Activities
205
+ Custom logic for building connector node configurations. Shared across flow-tool, case-tool, coded-apps, and other surfaces.
206
+
207
+ ### Essential Configuration Builders
208
+
209
+ Build the `essentialConfiguration` blob that DAP uses to restore connector nodes:
105
210
 
106
211
  ```typescript
107
- const activities = await client.listActivities("uipath-zoho-desk");
212
+ import {
213
+ buildActivityEssentialConfiguration,
214
+ buildTriggerEssentialConfiguration,
215
+ type ConnectorMethodInfo,
216
+ } from "@uipath/integrationservice-sdk";
217
+
218
+ // Activity node
219
+ const config = buildActivityEssentialConfiguration(instanceParameters, methodInfo);
220
+ // Returns: "=jsonString:{\"essentialConfiguration\":{...}}"
221
+
222
+ // Trigger node
223
+ const config = buildTriggerEssentialConfiguration(instanceParameters);
108
224
  ```
109
225
 
110
- ### List Resources
226
+ **`buildActivityEssentialConfiguration(instanceParameters, methodInfo)`**
111
227
 
112
- ```typescript
113
- // Without connection ID (elements endpoint)
114
- const resources = await client.listResources("uipath-salesforce-sfdc");
228
+ | Parameter | Type | Description |
229
+ |-----------|------|-------------|
230
+ | `instanceParameters` | `Record<string, unknown>` | Identity object — `connectorKey`, `objectName`, `activityType` |
231
+ | `methodInfo` | `ConnectorMethodInfo` | From IS metadata — `operation`, `method`, `path` |
115
232
 
116
- // With connection ID (instances endpoint)
117
- const resources = await client.listResources("uipath-salesforce-sfdc", "connection-id");
118
- ```
233
+ **`buildTriggerEssentialConfiguration(instanceParameters)`**
119
234
 
120
- ### Get Resource Metadata
235
+ | Parameter | Type | Description |
236
+ |-----------|------|-------------|
237
+ | `instanceParameters` | `Record<string, unknown>` | Identity object — `connectorKey`, `objectName`, `activityType` |
238
+
239
+ ### Input Metadata & Multipart Extraction
121
240
 
122
241
  ```typescript
123
- // Without connection ID
124
- const metadata = await client.getResourceMetadata("uipath-salesforce-sfdc", "Account");
242
+ import { extractMultipartParameters, buildInputMetadata } from "@uipath/integrationservice-sdk";
243
+
244
+ // Extract multipart parameters from IS method parameters
245
+ const multipartParams = extractMultipartParameters(methodInfo.parameters);
125
246
 
126
- // With connection ID
127
- const metadata = await client.getResourceMetadata("uipath-salesforce-sfdc", "Account", "connection-id");
247
+ // Build inputMetadata for the node detail
248
+ const inputMeta = buildInputMetadata(multipartParams, methodInfo.operation, methodInfo.pagination?.maxPageSize);
128
249
  ```
129
250
 
130
- ### Execute Operations
251
+ **`extractMultipartParameters(params)`** Filters IS metadata parameters where `type === "multipart"`.
131
252
 
132
- ```typescript
133
- // GET operation (list records)
134
- const tickets = await client.executeOperation("connection-id", "tickets", "GET");
253
+ **`buildInputMetadata(multipartParams, operation, maxPageSize?)`** — Builds `inputMetadata` with:
254
+ - `type: "multipart"` + `multipart.bodyFieldName` when multipart params exist
255
+ - `operation: "list"` + `pagination.maxPageSize` for list operations
256
+ - Uses `maxPageSize` from IS metadata when provided, falls back to 1000
135
257
 
136
- // GET with query parameters
137
- const filtered = await client.executeOperation(
138
- "connection-id",
139
- "tickets",
140
- "GET",
141
- undefined,
142
- { limit: "10", offset: "0" }
143
- );
144
-
145
- // POST operation (create record)
146
- const newTicket = await client.executeOperation(
147
- "connection-id",
148
- "tickets",
149
- "POST",
150
- { subject: "New Support Ticket", priority: "high" }
151
- );
152
-
153
- // PATCH operation (update record)
154
- await client.executeOperation(
155
- "connection-id",
156
- "tickets",
157
- "PATCH",
158
- { id: "123", status: "closed" }
159
- );
160
-
161
- // DELETE operation
162
- await client.executeOperation(
163
- "connection-id",
164
- "tickets",
165
- "DELETE",
166
- undefined,
167
- { id: "123" }
168
- );
258
+ ### DAP Types
259
+
260
+ ```typescript
261
+ import type {
262
+ ConnectorMethodInfo, // { operation, method, path, parameters[], pagination? }
263
+ ISMetadata, // { fields, metadata.method map }
264
+ ISField, // { name, type, displayName, method map, reference? }
265
+ ISFieldMethod, // { request, response, required }
266
+ ISMetadataParam, // { name, type, dataType, required, curated }
267
+ FieldReference, // { objectName, lookupValue, lookupNames?, path? }
268
+ MultipartParam, // { name, dataType }
269
+ InputMetadata, // { type?, multipart?, operation?, pagination? }
270
+ TriggerObjectMetadata, // { fields, eventMode, elementKey }
271
+ TriggerField, // { name, type, displayName, events? }
272
+ TriggerFieldEvent, // { name, curated, required }
273
+ } from "@uipath/integrationservice-sdk";
169
274
  ```
170
275
 
171
276
  ---
172
277
 
173
- ## API Reference
278
+ ## Connector Node Validation
174
279
 
175
- ### createApiClient(options?)
280
+ A composable, surface-agnostic validation framework for connector nodes. Each rule is a standalone pure function that can be used individually or composed into a rule set.
176
281
 
177
- Factory function that creates an `IntegrationServiceClient` using the current login session from `@uipath/auth`.
282
+ ### Quick Start
178
283
 
179
284
  ```typescript
180
- import { createApiClient } from "@uipath/integrationservice-sdk";
181
-
182
- const client = await createApiClient({ tenant: "my-tenant" });
285
+ import { validateIntSvcNode, type ConnectorValidationContext } from "@uipath/integrationservice-sdk";
286
+
287
+ const context: ConnectorValidationContext = {
288
+ nodeKind: "activity",
289
+ connectionId: detail.connectionId,
290
+ folderKey: detail.connectionFolderKey,
291
+ objectName: "send-mail-v2",
292
+ httpMethod: detail.method,
293
+ endpoint: detail.endpoint,
294
+ bodyParameters: detail.bodyParameters,
295
+ queryParameters: detail.queryParameters,
296
+ pathParameters: detail.pathParameters,
297
+ configuration: detail.configuration,
298
+ // Optional — enables deeper validation:
299
+ methodInfo, // from IS metadata
300
+ metadata, // from IS metadata
301
+ };
302
+
303
+ const issues = validateIntSvcNode(context);
304
+ detail.errorState = { issues };
183
305
  ```
184
306
 
185
- **Options:**
186
- - `tenant` - Optional tenant name override. Falls back to the tenant from login session.
307
+ ### Available Rules
187
308
 
188
- **Throws:** Error if not logged in or tenant is not available.
309
+ #### Structural Rules (no IS metadata needed)
189
310
 
190
- ---
311
+ | Rule | Applies To | What It Checks | DAP Code |
312
+ |------|-----------|----------------|----------|
313
+ | `validateConnectionId` | Both | connectionId is non-empty | DAP-RT-1002 |
314
+ | `validateFolderKey` | Both | folderKey is non-empty | — |
315
+ | `validateObjectName` | Both | objectName is non-empty | DAP-RT-1053 |
316
+ | `validateHttpMethod` | Activity | Valid HTTP verb (GET/POST/PUT/PATCH/DELETE) | DAP-RT-1100 |
317
+ | `validateEndpoint` | Activity | Endpoint starts with `/` | — |
318
+ | `validateEventMode` | Trigger | eventMode is non-empty | — |
319
+ | `validateEventType` | Trigger | eventType (operation) is non-empty | DAP-RT-1053 |
320
+ | `validateConfiguration` | Both | Configuration is valid JSON with essentialConfiguration | DAP-RT-1000 |
321
+ | `validatePathTemplateParams` | Activity | Path template `{vars}` have matching pathParameters | DAP-RT-1003 |
191
322
 
192
- ### IntegrationServiceClient
323
+ #### Metadata-Aware Rules (require IS metadata in context)
193
324
 
194
- #### Constructor
325
+ | Rule | Applies To | What It Checks | DAP Code |
326
+ |------|-----------|----------------|----------|
327
+ | `validateMethodInMetadata` | Activity | httpMethod exists in IS metadata method map | DAP-DT-2201 |
328
+ | `validateRequiredParameters` | Activity | Required method params (path/query/body) have values | DAP-RT-1003 |
329
+ | `validateRequiredFields` | Activity | Required IS fields have values in bodyParameters | DAP-RT-1003 |
330
+ | `validateRequiredEventParameters` | Trigger | Required event params have values in eventParameters | DAP-RT-1003 |
331
+
332
+ ### Custom Rules
195
333
 
196
334
  ```typescript
197
- constructor(config: IntegrationServiceConfig)
335
+ import { validateIntSvcNode, DEFAULT_RULES, type ValidationRule } from "@uipath/integrationservice-sdk";
336
+
337
+ // Add a custom rule
338
+ const myRule: ValidationRule = (context) => {
339
+ if (context.nodeKind === "activity" && !context.bodyParameters?.subject) {
340
+ return [{ type: "Warning", title: "Subject is recommended for email activities." }];
341
+ }
342
+ return [];
343
+ };
344
+
345
+ const issues = validateIntSvcNode(context, [...DEFAULT_RULES, myRule]);
198
346
  ```
199
347
 
200
- **Parameters:**
201
- - `config.baseUrl` - UiPath base URL (e.g., "https://cloud.uipath.com")
202
- - `config.accessToken` - OAuth access token
203
- - `config.organizationId` - Organization/Account ID
204
- - `config.tenantName` - Tenant name
348
+ ### Using Individual Rules
205
349
 
206
- #### Methods
350
+ ```typescript
351
+ import { validateConnectionId, validateRequiredParameters } from "@uipath/integrationservice-sdk";
207
352
 
208
- | Method | Description |
209
- |--------|-------------|
210
- | `listConnectors()` | List all available connectors |
211
- | `getConnectorByKey(key)` | Get a specific connector by key |
212
- | `listConnections(connectorKey, folderKey?)` | List connections for a connector |
213
- | `createConnection(connectorKey)` | Initiate OAuth connection creation |
214
- | `getSessionStatus(sessionId)` | Get OAuth session status |
215
- | `listObjects(connectorKey, connectionId)` | List objects for a connection |
216
- | `listActivities(connectorKey)` | List activities for a connector |
217
- | `listResources(connectorKey, connectionId?)` | List resources (with/without connection) |
218
- | `getResourceMetadata(connectorKey, objectName, connectionId?)` | Get resource field metadata |
219
- | `executeOperation(connectionId, objectName, httpMethod?, body?, queryParams?)` | Execute an operation on a resource |
353
+ // Run only specific checks
354
+ const connectionIssues = validateConnectionId(context);
355
+ const paramIssues = validateRequiredParameters(context);
356
+ ```
357
+
358
+ ### Validation Context
359
+
360
+ ```typescript
361
+ type ConnectorValidationContext = {
362
+ // Node identity
363
+ connectorKey?: string;
364
+ objectName?: string;
365
+ nodeKind?: "activity" | "trigger";
366
+
367
+ // Connection
368
+ connectionId?: string;
369
+ folderKey?: string;
370
+
371
+ // Activity-specific
372
+ httpMethod?: string;
373
+ endpoint?: string;
374
+
375
+ // Trigger-specific
376
+ eventMode?: string;
377
+ eventType?: string;
378
+
379
+ // Parameter values
380
+ bodyParameters?: Record<string, unknown>;
381
+ queryParameters?: Record<string, unknown>;
382
+ pathParameters?: Record<string, unknown>;
383
+ eventParameters?: Record<string, unknown>;
384
+
385
+ // Configuration blob
386
+ configuration?: string;
387
+
388
+ // IS metadata (optional)
389
+ methodInfo?: ConnectorMethodInfo;
390
+ metadata?: ISMetadata;
391
+ triggerMetadata?: TriggerObjectMetadata;
392
+ };
393
+ ```
220
394
 
221
395
  ---
222
396
 
223
- ## Related Packages
397
+ ## Who Uses This SDK
398
+
399
+ | Package | API Classes | Factory / Helpers | DAP Utilities |
400
+ |---------|------------|-------------------|---------------|
401
+ | **integrationservice-tool** | `ConnectorsApi`, `ConnectionsApi`, `SessionsApi`, `ElementsApi` | `createApiClient`, `createConnectionsConfig`, `executeOperation`, `folderOverride` | — |
402
+ | **flow-tool** | `ElementsApi` | `createApiClient` | `buildActivityEssentialConfiguration`, `buildTriggerEssentialConfiguration`, `buildInputMetadata`, `extractMultipartParameters` |
403
+ | **case-tool** | `ElementsApi`, `ConnectorsApi` | `createApiClient` | — |
404
+ | **agent-tool** | `ConnectorsApi`, `ConnectionsApi`, `ElementsApi` | `createApiClient`, `createElementsConfig` | — |
405
+
406
+ ### integrationservice-tool Method Usage
407
+
408
+ | Command | API | Methods |
409
+ |---------|-----|---------|
410
+ | `uip is connectors list` | ConnectorsApi | `apiV1ConnectorsGet` |
411
+ | `uip is connectors describe` | ConnectorsApi | `apiV1ConnectorsKeyOrIdGet` |
412
+ | `uip is connections list` | ConnectorsApi, ConnectionsApi | `apiV1ConnectorsKeyOrIdConnectionsGet`, `apiV1ConnectionsGet` |
413
+ | `uip is connections create` | ConnectionsApi, SessionsApi | `apiV1ConnectionsPost`, `apiV1SessionsSessionIdGet` |
414
+ | `uip is connections auth` | ConnectionsApi, SessionsApi | `apiV1ConnectionsConnectionIdAuthPost`, `apiV1SessionsSessionIdGet` |
415
+ | `uip is connections ping` | ConnectionsApi | `apiV1ConnectionsConnectionIdPingGet` |
416
+ | `uip is activities list` | ElementsApi | `getActivities` |
417
+ | `uip is triggers list` | ElementsApi | `getEventObjects`, `getInstanceEventObjects` |
418
+ | `uip is triggers describe` | ElementsApi | `getEventObjectMetadata`, `getInstanceEventObjectMetadata` |
419
+ | `uip is resources list` | ElementsApi | `getObjects`, `getInstanceObjects` |
420
+ | `uip is resources describe` | ElementsApi | `getObjectMetadataRaw`, `getInstanceObjectMetadataRaw` |
421
+ | `uip is resources execute` | — | `executeOperation` (direct HTTP) |
224
422
 
225
- - `@uipath/integrationservice-tool` - CLI tool using this SDK
226
- - `@uipath/orchestrator-sdk` - Orchestrator API SDK
227
- - `@uipath/solution-sdk` - Solution API SDK
423
+ ---
424
+
425
+ ## Development
426
+
427
+ ```bash
428
+ # Build
429
+ bun run build
430
+
431
+ # Test
432
+ bun run test
433
+
434
+ # Generate SDK from OpenAPI specs
435
+ bun run generate
436
+
437
+ # Lint
438
+ bun run lint
439
+ ```
228
440
 
229
441
  ---
230
442