@arbium/enterprise-agent-connect 0.2.0 → 0.2.1-dev.7b4e802
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/README.md +10 -3
- package/dist/connectors/adestra/connector.json +336 -0
- package/dist/connectors/adobe-admin-console/connector.json +212 -0
- package/dist/connectors/argo-cd/connector.json +210 -0
- package/dist/connectors/automox/connector.json +376 -0
- package/dist/connectors/churnzero/connector.json +238 -0
- package/dist/connectors/confluence/connector.json +168 -0
- package/dist/connectors/cvent/connector.json +287 -0
- package/dist/connectors/datadog/connector.json +188 -0
- package/dist/connectors/drata/connector.json +447 -0
- package/dist/connectors/druva/connector.json +258 -0
- package/dist/connectors/forsta-decipher/connector.json +164 -0
- package/dist/connectors/gitlab/connector.json +263 -0
- package/dist/connectors/grafana/connector.json +162 -0
- package/dist/connectors/http/index.d.ts +5 -1
- package/dist/connectors/http/index.js +62 -8
- package/dist/connectors/http/index.js.map +1 -1
- package/dist/connectors/http/openapi.d.ts +62 -0
- package/dist/connectors/http/openapi.js +342 -0
- package/dist/connectors/http/openapi.js.map +1 -0
- package/dist/connectors/intercom/connector.json +249 -0
- package/dist/connectors/lusha/connector.json +59 -0
- package/dist/connectors/lusha/index.d.ts +8 -0
- package/dist/connectors/lusha/index.js +7 -0
- package/dist/connectors/lusha/index.js.map +1 -0
- package/dist/connectors/lusha/tools.d.ts +2 -0
- package/dist/connectors/lusha/tools.js +113 -0
- package/dist/connectors/lusha/tools.js.map +1 -0
- package/dist/connectors/lusha/vendor.d.ts +4 -0
- package/dist/connectors/lusha/vendor.js +72 -0
- package/dist/connectors/lusha/vendor.js.map +1 -0
- package/dist/connectors/odata/index.js +12 -5
- package/dist/connectors/odata/index.js.map +1 -1
- package/dist/connectors/pagerduty/connector.json +247 -0
- package/dist/connectors/qualys/connector.json +271 -0
- package/dist/connectors/safebase/connector.json +221 -0
- package/dist/connectors/soap/index.js +4 -3
- package/dist/connectors/soap/index.js.map +1 -1
- package/dist/connectors/sonarqube/connector.json +165 -0
- package/dist/connectors/sprout-social/connector.json +158 -0
- package/dist/connectors/synthesia/connector.json +113 -0
- package/dist/connectors/wordpress/connector.json +203 -0
- package/dist/connectors/zephyr/connector.json +192 -0
- package/dist/packages/connector-kit/src/connector.d.ts +45 -7
- package/dist/packages/connector-kit/src/connector.js +113 -10
- package/dist/packages/connector-kit/src/connector.js.map +1 -1
- package/dist/packages/connector-kit/src/oauth.d.ts +2 -0
- package/dist/packages/connector-kit/src/oauth.js +12 -4
- package/dist/packages/connector-kit/src/oauth.js.map +1 -1
- package/dist/packages/server/migrations/0008_internal_apps.sql +16 -0
- package/dist/packages/server/migrations/rollback/to-legacy.sql +2 -0
- package/dist/packages/server/src/api.d.ts +2490 -277
- package/dist/packages/server/src/api.js +82 -1
- package/dist/packages/server/src/api.js.map +1 -1
- package/dist/packages/server/src/app.js +26 -1
- package/dist/packages/server/src/app.js.map +1 -1
- package/dist/packages/server/src/builtin.d.ts +3 -0
- package/dist/packages/server/src/builtin.js +32 -0
- package/dist/packages/server/src/builtin.js.map +1 -1
- package/dist/packages/server/src/index.js +27 -18
- package/dist/packages/server/src/index.js.map +1 -1
- package/dist/packages/server/src/service.d.ts +1113 -0
- package/dist/packages/server/src/service.js +257 -19
- package/dist/packages/server/src/service.js.map +1 -1
- package/dist/packages/server/src/store.d.ts +41 -1
- package/dist/packages/server/src/store.js +79 -0
- package/dist/packages/server/src/store.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "synthesia",
|
|
3
|
+
"name": "Synthesia",
|
|
4
|
+
"description": "Let agents find your Synthesia videos and templates: each video's status, length, thumbnail and download link, so campaigns can point to finished videos. Read-only.",
|
|
5
|
+
"logo": "/brand/registry/synthesia.svg",
|
|
6
|
+
"identity": "A Synthesia API key. It acts as the person who created it, with their access to videos in the workspace.",
|
|
7
|
+
"accountKey": "host",
|
|
8
|
+
"connectionKind": "guided",
|
|
9
|
+
"setup": [
|
|
10
|
+
{
|
|
11
|
+
"title": "Create an API key",
|
|
12
|
+
"body": "Your Synthesia plan decides whether you can create API keys. The key needs the Legacy (v2) scope, which the video API asks for. Synthesia shows the key only once.",
|
|
13
|
+
"link": {
|
|
14
|
+
"label": "Synthesia: create an API key",
|
|
15
|
+
"href": "https://docs.synthesia.io/docs/developers"
|
|
16
|
+
},
|
|
17
|
+
"click": [
|
|
18
|
+
"In Synthesia, select Developers in the sidebar, then the API keys tab.",
|
|
19
|
+
"Select New API key, name it Agents, grant the Legacy (v2) scope and choose when it expires.",
|
|
20
|
+
"Select Create API key and copy the key."
|
|
21
|
+
]
|
|
22
|
+
}
|
|
23
|
+
],
|
|
24
|
+
"afterConnect": [],
|
|
25
|
+
"fields": [
|
|
26
|
+
{
|
|
27
|
+
"id": "api_key",
|
|
28
|
+
"label": "API key",
|
|
29
|
+
"secret": true
|
|
30
|
+
}
|
|
31
|
+
],
|
|
32
|
+
"capabilities": [
|
|
33
|
+
{
|
|
34
|
+
"id": "read",
|
|
35
|
+
"label": "Read videos and templates",
|
|
36
|
+
"description": "List videos and templates, and read one video: its status, length, thumbnail, captions and download link.",
|
|
37
|
+
"required": true,
|
|
38
|
+
"note": "Reaches the videos the key's owner can see in the workspace. Read-only.",
|
|
39
|
+
"scopes": ["Legacy (v2)"],
|
|
40
|
+
"permissions": [],
|
|
41
|
+
"tools": ["synthesia_list_videos", "synthesia_get_video", "synthesia_list_templates"]
|
|
42
|
+
}
|
|
43
|
+
],
|
|
44
|
+
"limits": [],
|
|
45
|
+
"verify": {
|
|
46
|
+
"method": "GET",
|
|
47
|
+
"path": "/videos?limit=5",
|
|
48
|
+
"label": "Synthesia videos",
|
|
49
|
+
"show": "videos[].title"
|
|
50
|
+
},
|
|
51
|
+
"revoke": "In Synthesia, select Developers, then API keys, and disable or delete the key. Agents lose access to Synthesia at once.",
|
|
52
|
+
"http": {
|
|
53
|
+
"baseUrl": "https://api.synthesia.io/v2",
|
|
54
|
+
"auth": { "type": "header", "header": "Authorization", "value": "api_key" },
|
|
55
|
+
"tools": [
|
|
56
|
+
{
|
|
57
|
+
"name": "synthesia_list_videos",
|
|
58
|
+
"description": "List videos with their status (in progress, complete) and titles.",
|
|
59
|
+
"method": "GET",
|
|
60
|
+
"path": "/videos",
|
|
61
|
+
"params": {
|
|
62
|
+
"limit": { "type": "integer", "description": "Videos per page, up to 100", "in": "query", "default": 20 },
|
|
63
|
+
"offset": { "type": "integer", "description": "Where the page starts, from the previous answer", "in": "query", "required": false },
|
|
64
|
+
"source": {
|
|
65
|
+
"type": "array",
|
|
66
|
+
"items": "string",
|
|
67
|
+
"description": "Where to look",
|
|
68
|
+
"in": "query",
|
|
69
|
+
"enum": ["workspace", "shared_with_me", "my_videos"],
|
|
70
|
+
"required": false
|
|
71
|
+
}
|
|
72
|
+
},
|
|
73
|
+
"result": {
|
|
74
|
+
"items": "videos",
|
|
75
|
+
"fields": ["id", "title", "description", "status", "duration", "visibility", "createdAt", "lastUpdatedAt", "download", "thumbnail.image"]
|
|
76
|
+
},
|
|
77
|
+
"paging": { "param": "offset", "body": "nextOffset" }
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
"name": "synthesia_get_video",
|
|
81
|
+
"description": "Read one video: status, length, thumbnail, captions and its download link.",
|
|
82
|
+
"method": "GET",
|
|
83
|
+
"path": "/videos/{video_id}",
|
|
84
|
+
"params": {
|
|
85
|
+
"video_id": { "type": "string", "description": "The video id", "in": "path" }
|
|
86
|
+
},
|
|
87
|
+
"result": {
|
|
88
|
+
"fields": ["id", "title", "description", "status", "duration", "visibility", "createdAt", "lastUpdatedAt", "download", "thumbnail", "captions"]
|
|
89
|
+
}
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
"name": "synthesia_list_templates",
|
|
93
|
+
"description": "List video templates, with the variables each one fills in.",
|
|
94
|
+
"method": "GET",
|
|
95
|
+
"path": "/templates",
|
|
96
|
+
"params": {
|
|
97
|
+
"limit": { "type": "integer", "description": "Templates per page, up to 100", "in": "query", "default": 20 },
|
|
98
|
+
"offset": { "type": "integer", "description": "Where the page starts, from the previous answer", "in": "query", "required": false },
|
|
99
|
+
"source": {
|
|
100
|
+
"type": "array",
|
|
101
|
+
"items": "string",
|
|
102
|
+
"description": "Your workspace's templates, Synthesia's, or both",
|
|
103
|
+
"in": "query",
|
|
104
|
+
"enum": ["workspace", "synthesia"],
|
|
105
|
+
"required": false
|
|
106
|
+
}
|
|
107
|
+
},
|
|
108
|
+
"result": { "items": "templates", "fields": ["id", "title", "description", "variables", "duration"] },
|
|
109
|
+
"paging": { "param": "offset", "body": "nextOffset" }
|
|
110
|
+
}
|
|
111
|
+
]
|
|
112
|
+
}
|
|
113
|
+
}
|
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "wordpress",
|
|
3
|
+
"name": "WordPress",
|
|
4
|
+
"description": "Let agents draft posts on your WordPress site for an editor to review: find and read posts, create drafts or posts waiting for review and, if you allow it, edit posts. Agents never publish.",
|
|
5
|
+
"logo": "/brand/registry/wordpress.svg",
|
|
6
|
+
"identity": "An application password of a WordPress user. Agents act as that user, so make one with the Author or Contributor role.",
|
|
7
|
+
"accountKey": "host",
|
|
8
|
+
"connectionKind": "guided",
|
|
9
|
+
"setup": [
|
|
10
|
+
{
|
|
11
|
+
"title": "Create a user for agents",
|
|
12
|
+
"body": "Make a WordPress user for agents with the Contributor role (writes posts for review) or Author. Agents can only ever save drafts or posts pending review, whatever the role.",
|
|
13
|
+
"click": ["In WordPress admin, go to Users, then Add New User, and create a user named Agents with the Contributor role."]
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
"title": "Create an application password",
|
|
17
|
+
"body": "Application passwords work over https only and need WordPress 5.6 or later. WordPress shows the password once.",
|
|
18
|
+
"link": {
|
|
19
|
+
"label": "WordPress: application passwords",
|
|
20
|
+
"href": "https://developer.wordpress.org/rest-api/using-the-rest-api/authentication/"
|
|
21
|
+
},
|
|
22
|
+
"click": [
|
|
23
|
+
"In WordPress admin, go to Users, then edit the Agents user.",
|
|
24
|
+
"Under Application Passwords, enter the name Agents and select Add New Application Password.",
|
|
25
|
+
"Copy the password."
|
|
26
|
+
]
|
|
27
|
+
}
|
|
28
|
+
],
|
|
29
|
+
"afterConnect": [],
|
|
30
|
+
"fields": [
|
|
31
|
+
{
|
|
32
|
+
"id": "host",
|
|
33
|
+
"label": "Site address",
|
|
34
|
+
"help": "Your site's host name, without https:// or a path.",
|
|
35
|
+
"placeholder": "blog.example.com",
|
|
36
|
+
"secret": false
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
"id": "username",
|
|
40
|
+
"label": "Username",
|
|
41
|
+
"help": "The agents' WordPress user.",
|
|
42
|
+
"secret": false
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
"id": "app_password",
|
|
46
|
+
"label": "Application password",
|
|
47
|
+
"secret": true
|
|
48
|
+
}
|
|
49
|
+
],
|
|
50
|
+
"capabilities": [
|
|
51
|
+
{
|
|
52
|
+
"id": "read",
|
|
53
|
+
"label": "Read posts",
|
|
54
|
+
"description": "Find posts by text or status, read one post, and list categories and tags.",
|
|
55
|
+
"required": true,
|
|
56
|
+
"scopes": [],
|
|
57
|
+
"permissions": [],
|
|
58
|
+
"tools": ["wordpress_list_posts", "wordpress_get_post", "wordpress_list_categories", "wordpress_list_tags"]
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
"id": "draft",
|
|
62
|
+
"label": "Write drafts",
|
|
63
|
+
"description": "Create posts as drafts or pending review. Nothing is published.",
|
|
64
|
+
"scopes": [],
|
|
65
|
+
"permissions": [],
|
|
66
|
+
"tools": ["wordpress_create_draft"]
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
"id": "edit",
|
|
70
|
+
"label": "Edit posts",
|
|
71
|
+
"description": "Change a post's title, content, excerpt, categories or tags, or set it back to draft or pending review.",
|
|
72
|
+
"destructive": true,
|
|
73
|
+
"note": "Edits to a published post show on the site at once, and setting one to draft takes it down. A Contributor can edit only their own unpublished posts, so give agents that role if they should never touch live posts.",
|
|
74
|
+
"scopes": [],
|
|
75
|
+
"permissions": [],
|
|
76
|
+
"tools": ["wordpress_update_post"]
|
|
77
|
+
}
|
|
78
|
+
],
|
|
79
|
+
"limits": [],
|
|
80
|
+
"verify": {
|
|
81
|
+
"method": "GET",
|
|
82
|
+
"path": "/users/me",
|
|
83
|
+
"label": "WordPress user",
|
|
84
|
+
"show": "name"
|
|
85
|
+
},
|
|
86
|
+
"revoke": "In WordPress admin, edit the Agents user and revoke the application password under Application Passwords. Agents lose access to the site at once.",
|
|
87
|
+
"http": {
|
|
88
|
+
"baseUrl": "https://{host}/wp-json/wp/v2",
|
|
89
|
+
"auth": { "type": "basic", "username": "username", "password": "app_password" },
|
|
90
|
+
"tools": [
|
|
91
|
+
{
|
|
92
|
+
"name": "wordpress_list_posts",
|
|
93
|
+
"description": "Find posts, newest first, by text or status.",
|
|
94
|
+
"method": "GET",
|
|
95
|
+
"path": "/posts",
|
|
96
|
+
"params": {
|
|
97
|
+
"search": { "type": "string", "description": "Text to look for", "in": "query", "required": false },
|
|
98
|
+
"status": {
|
|
99
|
+
"type": "array",
|
|
100
|
+
"items": "string",
|
|
101
|
+
"description": "Statuses to include",
|
|
102
|
+
"in": "query",
|
|
103
|
+
"join": ",",
|
|
104
|
+
"enum": ["draft", "pending", "future", "publish", "private"],
|
|
105
|
+
"required": false
|
|
106
|
+
},
|
|
107
|
+
"per_page": { "type": "integer", "description": "Posts per page, up to 100", "in": "query", "default": 20 },
|
|
108
|
+
"page": { "type": "integer", "description": "The page, from the previous answer", "in": "query", "required": false }
|
|
109
|
+
},
|
|
110
|
+
"result": { "fields": ["id", "date", "modified", "status", "title.rendered", "excerpt.rendered", "link", "author", "categories", "tags"] },
|
|
111
|
+
"paging": { "param": "page", "link": true }
|
|
112
|
+
},
|
|
113
|
+
{
|
|
114
|
+
"name": "wordpress_get_post",
|
|
115
|
+
"description": "Read one post, with its content.",
|
|
116
|
+
"method": "GET",
|
|
117
|
+
"path": "/posts/{id}",
|
|
118
|
+
"params": {
|
|
119
|
+
"id": { "type": "integer", "description": "The post id", "in": "path" },
|
|
120
|
+
"context": {
|
|
121
|
+
"type": "string",
|
|
122
|
+
"description": "view shows the post as readers see it; edit also gives the content as written, to change it, and works only on posts the agents' user may edit",
|
|
123
|
+
"in": "query",
|
|
124
|
+
"enum": ["view", "edit"],
|
|
125
|
+
"default": "view"
|
|
126
|
+
}
|
|
127
|
+
},
|
|
128
|
+
"result": {
|
|
129
|
+
"fields": [
|
|
130
|
+
"id",
|
|
131
|
+
"date",
|
|
132
|
+
"modified",
|
|
133
|
+
"status",
|
|
134
|
+
"title.rendered",
|
|
135
|
+
"title.raw",
|
|
136
|
+
"content.rendered",
|
|
137
|
+
"content.raw",
|
|
138
|
+
"excerpt.rendered",
|
|
139
|
+
"excerpt.raw",
|
|
140
|
+
"link",
|
|
141
|
+
"author",
|
|
142
|
+
"categories",
|
|
143
|
+
"tags"
|
|
144
|
+
]
|
|
145
|
+
}
|
|
146
|
+
},
|
|
147
|
+
{
|
|
148
|
+
"name": "wordpress_list_categories",
|
|
149
|
+
"description": "List categories, by name.",
|
|
150
|
+
"method": "GET",
|
|
151
|
+
"path": "/categories",
|
|
152
|
+
"params": {
|
|
153
|
+
"search": { "type": "string", "description": "Text to look for", "in": "query", "required": false },
|
|
154
|
+
"per_page": { "type": "integer", "description": "Categories per page, up to 100", "in": "query", "default": 100 }
|
|
155
|
+
},
|
|
156
|
+
"result": { "fields": ["id", "name", "slug", "parent", "count"] }
|
|
157
|
+
},
|
|
158
|
+
{
|
|
159
|
+
"name": "wordpress_list_tags",
|
|
160
|
+
"description": "List tags, by name.",
|
|
161
|
+
"method": "GET",
|
|
162
|
+
"path": "/tags",
|
|
163
|
+
"params": {
|
|
164
|
+
"search": { "type": "string", "description": "Text to look for", "in": "query", "required": false },
|
|
165
|
+
"per_page": { "type": "integer", "description": "Tags per page, up to 100", "in": "query", "default": 100 }
|
|
166
|
+
},
|
|
167
|
+
"result": { "fields": ["id", "name", "slug", "count"] }
|
|
168
|
+
},
|
|
169
|
+
{
|
|
170
|
+
"name": "wordpress_create_draft",
|
|
171
|
+
"description": "Create a post as a draft, or pending review for an editor.",
|
|
172
|
+
"method": "POST",
|
|
173
|
+
"path": "/posts",
|
|
174
|
+
"params": {
|
|
175
|
+
"title": { "type": "string", "description": "The title", "in": "body" },
|
|
176
|
+
"content": { "type": "string", "description": "The content, as HTML or block markup", "in": "body" },
|
|
177
|
+
"excerpt": { "type": "string", "description": "A short summary", "in": "body", "required": false },
|
|
178
|
+
"categories": { "type": "array", "items": "integer", "description": "Category ids", "in": "body", "required": false },
|
|
179
|
+
"tags": { "type": "array", "items": "integer", "description": "Tag ids", "in": "body", "required": false },
|
|
180
|
+
"status": { "type": "string", "description": "Draft, or pending review", "in": "body", "enum": ["draft", "pending"], "default": "draft" }
|
|
181
|
+
},
|
|
182
|
+
"result": { "fields": ["id", "status", "link", "title.raw"] }
|
|
183
|
+
},
|
|
184
|
+
{
|
|
185
|
+
"name": "wordpress_update_post",
|
|
186
|
+
"description": "Edit a post. Only the fields you send change. Edits to a published post show on the site at once.",
|
|
187
|
+
"method": "POST",
|
|
188
|
+
"path": "/posts/{id}",
|
|
189
|
+
"destructive": true,
|
|
190
|
+
"params": {
|
|
191
|
+
"id": { "type": "integer", "description": "The post id", "in": "path" },
|
|
192
|
+
"title": { "type": "string", "description": "The title", "in": "body", "required": false },
|
|
193
|
+
"content": { "type": "string", "description": "The content, as HTML or block markup", "in": "body", "required": false },
|
|
194
|
+
"excerpt": { "type": "string", "description": "A short summary", "in": "body", "required": false },
|
|
195
|
+
"categories": { "type": "array", "items": "integer", "description": "Category ids", "in": "body", "required": false },
|
|
196
|
+
"tags": { "type": "array", "items": "integer", "description": "Tag ids", "in": "body", "required": false },
|
|
197
|
+
"status": { "type": "string", "description": "Set it to draft or pending review (leave out to keep its status)", "in": "body", "enum": ["draft", "pending"], "required": false }
|
|
198
|
+
},
|
|
199
|
+
"result": { "fields": ["id", "status", "link", "title.raw"] }
|
|
200
|
+
}
|
|
201
|
+
]
|
|
202
|
+
}
|
|
203
|
+
}
|
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "zephyr",
|
|
3
|
+
"name": "Zephyr",
|
|
4
|
+
"description": "Let agents read test cases, test cycles and test results in Zephyr (Zephyr Scale for Jira Cloud), and record test results. For running regression cycles and triaging failures into Jira defects.",
|
|
5
|
+
"logo": "/brand/registry/zephyr.svg",
|
|
6
|
+
"identity": "A Zephyr API access token. It acts as the Jira user who created it, with that user's access to Jira projects, so create it as a user made for agents.",
|
|
7
|
+
"accountKey": "host",
|
|
8
|
+
"connectionKind": "guided",
|
|
9
|
+
"setup": [
|
|
10
|
+
{
|
|
11
|
+
"title": "Create a Jira user for agents",
|
|
12
|
+
"body": "Zephyr tokens belong to the Jira user who creates them and reach every project that user can see. Make a user for agents and give it access only to the projects whose tests agents should read or run.",
|
|
13
|
+
"click": [
|
|
14
|
+
"In Atlassian Administration, invite a user named AI agents and give it Jira access.",
|
|
15
|
+
"In each Jira project agents should work in, add AI agents to a role that can browse the project."
|
|
16
|
+
]
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
"title": "Create a Zephyr API access token",
|
|
20
|
+
"body": "Sign in to Jira as the agents' user and create the token. Zephyr shows it only once. You can test it with the command below: it lists your Zephyr projects and changes nothing.",
|
|
21
|
+
"link": {
|
|
22
|
+
"label": "Zephyr: API access tokens",
|
|
23
|
+
"href": "https://support.smartbear.com/zephyr/docs/en/rest-api/api-access-tokens-management.html"
|
|
24
|
+
},
|
|
25
|
+
"click": [
|
|
26
|
+
"In Jira, select your profile picture, then Zephyr API Access Tokens.",
|
|
27
|
+
"Select Create access token and copy it."
|
|
28
|
+
],
|
|
29
|
+
"copy": [
|
|
30
|
+
"curl -s -H \"Authorization: Bearer $ZEPHYR_TOKEN\" \"https://api.zephyrscale.smartbear.com/v2/projects?maxResults=5\""
|
|
31
|
+
],
|
|
32
|
+
"shell": "bash"
|
|
33
|
+
}
|
|
34
|
+
],
|
|
35
|
+
"afterConnect": [],
|
|
36
|
+
"fields": [
|
|
37
|
+
{
|
|
38
|
+
"id": "host",
|
|
39
|
+
"label": "API address",
|
|
40
|
+
"help": "api.zephyrscale.smartbear.com, or for data kept in another region eu.api.zephyrscale.smartbear.com, au.api.zephyrscale.smartbear.com or de.api.zephyrscale.smartbear.com.",
|
|
41
|
+
"placeholder": "api.zephyrscale.smartbear.com",
|
|
42
|
+
"secret": false
|
|
43
|
+
},
|
|
44
|
+
{ "id": "token", "label": "API access token", "secret": true }
|
|
45
|
+
],
|
|
46
|
+
"capabilities": [
|
|
47
|
+
{
|
|
48
|
+
"id": "read",
|
|
49
|
+
"label": "Read tests and results",
|
|
50
|
+
"description": "List a project's test cases, test cycles and test executions, filtered by cycle, test case or Jira version, and the status names behind their status ids.",
|
|
51
|
+
"required": true,
|
|
52
|
+
"note": "Read-only. Reaches every project the token's user can see unless you keep a key to chosen projects.",
|
|
53
|
+
"scopes": [],
|
|
54
|
+
"permissions": [],
|
|
55
|
+
"tools": [
|
|
56
|
+
"zephyr_list_test_cases",
|
|
57
|
+
"zephyr_list_test_cycles",
|
|
58
|
+
"zephyr_list_test_executions",
|
|
59
|
+
"zephyr_list_statuses"
|
|
60
|
+
]
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
"id": "record",
|
|
64
|
+
"label": "Record test results",
|
|
65
|
+
"description": "Record the result of running a test case in a test cycle, such as Pass or Fail, with a comment.",
|
|
66
|
+
"scopes": [],
|
|
67
|
+
"permissions": [],
|
|
68
|
+
"tools": ["zephyr_create_test_execution"]
|
|
69
|
+
}
|
|
70
|
+
],
|
|
71
|
+
"limits": [
|
|
72
|
+
{
|
|
73
|
+
"id": "projects",
|
|
74
|
+
"label": "Jira projects",
|
|
75
|
+
"help": "Optional: only these Jira projects, by key, such as QA. Leave empty for every project the token's user can see.",
|
|
76
|
+
"kind": "list",
|
|
77
|
+
"required": false,
|
|
78
|
+
"pattern": "^[A-Z][A-Z0-9_]+$"
|
|
79
|
+
}
|
|
80
|
+
],
|
|
81
|
+
"verify": {
|
|
82
|
+
"method": "GET",
|
|
83
|
+
"path": "/projects?maxResults=50",
|
|
84
|
+
"label": "Zephyr projects",
|
|
85
|
+
"show": "values[].key"
|
|
86
|
+
},
|
|
87
|
+
"discover": {
|
|
88
|
+
"method": "GET",
|
|
89
|
+
"path": "/projects?maxResults=1000",
|
|
90
|
+
"label": "Zephyr projects",
|
|
91
|
+
"show": "values[].key"
|
|
92
|
+
},
|
|
93
|
+
"revoke": "Sign in to Jira as the agents' user, select the profile picture, then Zephyr API Access Tokens, and revoke the token. Agents lose access to Zephyr at once.",
|
|
94
|
+
"http": {
|
|
95
|
+
"baseUrl": "https://{host}/v2",
|
|
96
|
+
"allowedHosts": ["api.zephyrscale.smartbear.com", "*.api.zephyrscale.smartbear.com"],
|
|
97
|
+
"auth": { "type": "bearer", "token": "token" },
|
|
98
|
+
"tools": [
|
|
99
|
+
{
|
|
100
|
+
"name": "zephyr_list_test_cases",
|
|
101
|
+
"description": "List a project's test cases. Pass start_at to read further pages; isLast in the answer says whether there are more.",
|
|
102
|
+
"method": "GET",
|
|
103
|
+
"path": "/testcases",
|
|
104
|
+
"params": {
|
|
105
|
+
"project_key": { "type": "string", "description": "The Jira project key", "in": "query", "name": "projectKey", "limit": "projects" },
|
|
106
|
+
"folder_id": { "type": "integer", "description": "Only test cases in this folder", "in": "query", "name": "folderId", "required": false },
|
|
107
|
+
"max_results": { "type": "integer", "description": "How many per page", "in": "query", "name": "maxResults", "default": 50 },
|
|
108
|
+
"start_at": { "type": "integer", "description": "How many to skip", "in": "query", "name": "startAt", "default": 0 }
|
|
109
|
+
},
|
|
110
|
+
"result": {
|
|
111
|
+
"fields": ["isLast", "values.key", "values.name", "values.objective", "values.status.id", "values.priority.id", "values.labels", "values.folder.id"]
|
|
112
|
+
}
|
|
113
|
+
},
|
|
114
|
+
{
|
|
115
|
+
"name": "zephyr_list_test_cycles",
|
|
116
|
+
"description": "List a project's test cycles, optionally for one Jira version. Pass start_at to read further pages.",
|
|
117
|
+
"method": "GET",
|
|
118
|
+
"path": "/testcycles",
|
|
119
|
+
"params": {
|
|
120
|
+
"project_key": { "type": "string", "description": "The Jira project key", "in": "query", "name": "projectKey", "limit": "projects" },
|
|
121
|
+
"jira_version_id": { "type": "integer", "description": "Only cycles for this Jira version (release) id", "in": "query", "name": "jiraProjectVersionId", "required": false },
|
|
122
|
+
"max_results": { "type": "integer", "description": "How many per page", "in": "query", "name": "maxResults", "default": 50 },
|
|
123
|
+
"start_at": { "type": "integer", "description": "How many to skip", "in": "query", "name": "startAt", "default": 0 }
|
|
124
|
+
},
|
|
125
|
+
"result": {
|
|
126
|
+
"fields": ["isLast", "values.key", "values.name", "values.status.id", "values.plannedStartDate", "values.plannedEndDate", "values.jiraProjectVersion.id"]
|
|
127
|
+
}
|
|
128
|
+
},
|
|
129
|
+
{
|
|
130
|
+
"name": "zephyr_list_test_executions",
|
|
131
|
+
"description": "List test results, filtered by test cycle, test case or Jira version, such as every failure in a regression cycle. Pass start_at to read further pages.",
|
|
132
|
+
"method": "GET",
|
|
133
|
+
"path": "/testexecutions",
|
|
134
|
+
"params": {
|
|
135
|
+
"project_key": { "type": "string", "description": "The Jira project key", "in": "query", "name": "projectKey", "limit": "projects" },
|
|
136
|
+
"test_cycle": { "type": "string", "description": "Only this test cycle, by key such as QA-R12", "in": "query", "name": "testCycle", "required": false },
|
|
137
|
+
"test_case": { "type": "string", "description": "Only this test case, by key such as QA-T40", "in": "query", "name": "testCase", "required": false },
|
|
138
|
+
"only_last": { "type": "boolean", "description": "Only the latest result of each test case", "in": "query", "name": "onlyLastExecutions", "required": false },
|
|
139
|
+
"max_results": { "type": "integer", "description": "How many per page", "in": "query", "name": "maxResults", "default": 50 },
|
|
140
|
+
"start_at": { "type": "integer", "description": "How many to skip", "in": "query", "name": "startAt", "default": 0 }
|
|
141
|
+
},
|
|
142
|
+
"result": {
|
|
143
|
+
"fields": [
|
|
144
|
+
"isLast",
|
|
145
|
+
"values.key",
|
|
146
|
+
"values.testCase.self",
|
|
147
|
+
"values.testCycle.id",
|
|
148
|
+
"values.testExecutionStatus.id",
|
|
149
|
+
"values.actualEndDate",
|
|
150
|
+
"values.executedById",
|
|
151
|
+
"values.comment",
|
|
152
|
+
"values.links.issues"
|
|
153
|
+
]
|
|
154
|
+
}
|
|
155
|
+
},
|
|
156
|
+
{
|
|
157
|
+
"name": "zephyr_list_statuses",
|
|
158
|
+
"description": "List a project's statuses with their ids and names, such as Pass and Fail for test executions, to read the status ids in other answers.",
|
|
159
|
+
"method": "GET",
|
|
160
|
+
"path": "/statuses",
|
|
161
|
+
"params": {
|
|
162
|
+
"project_key": { "type": "string", "description": "The Jira project key", "in": "query", "name": "projectKey", "limit": "projects" },
|
|
163
|
+
"status_type": {
|
|
164
|
+
"type": "string",
|
|
165
|
+
"enum": ["TEST_CASE", "TEST_PLAN", "TEST_CYCLE", "TEST_EXECUTION"],
|
|
166
|
+
"description": "Which kind of status",
|
|
167
|
+
"in": "query",
|
|
168
|
+
"name": "statusType",
|
|
169
|
+
"default": "TEST_EXECUTION"
|
|
170
|
+
},
|
|
171
|
+
"max_results": { "type": "integer", "description": "How many per page", "in": "query", "name": "maxResults", "default": 100 }
|
|
172
|
+
},
|
|
173
|
+
"result": { "fields": ["isLast", "values.id", "values.name", "values.archived"] }
|
|
174
|
+
},
|
|
175
|
+
{
|
|
176
|
+
"name": "zephyr_create_test_execution",
|
|
177
|
+
"description": "Record a test result: a test case run in a test cycle, with its status name, such as Pass or Fail, and a comment.",
|
|
178
|
+
"method": "POST",
|
|
179
|
+
"path": "/testexecutions",
|
|
180
|
+
"params": {
|
|
181
|
+
"project_key": { "type": "string", "description": "The Jira project key", "in": "body", "name": "projectKey", "limit": "projects" },
|
|
182
|
+
"test_case_key": { "type": "string", "description": "The test case key, such as QA-T40", "in": "body", "name": "testCaseKey" },
|
|
183
|
+
"test_cycle_key": { "type": "string", "description": "The test cycle key, such as QA-R12", "in": "body", "name": "testCycleKey" },
|
|
184
|
+
"status_name": { "type": "string", "description": "The result's status name in Zephyr, such as Pass, Fail or Blocked", "in": "body", "name": "statusName" },
|
|
185
|
+
"comment": { "type": "string", "description": "What happened, such as the failure seen", "in": "body", "required": false },
|
|
186
|
+
"environment_name": { "type": "string", "description": "The environment it ran in, as named in Zephyr", "in": "body", "name": "environmentName", "required": false },
|
|
187
|
+
"actual_end_date": { "type": "string", "description": "When it finished, such as 2026-10-01T13:15:13Z", "in": "body", "name": "actualEndDate", "required": false }
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
]
|
|
191
|
+
}
|
|
192
|
+
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
import type { Toolset } from "./common.js";
|
|
3
|
-
import type
|
|
3
|
+
import { type Vendor } from "./types.js";
|
|
4
4
|
declare const settingSchema: z.ZodObject<{
|
|
5
5
|
id: z.ZodString;
|
|
6
6
|
label: z.ZodString;
|
|
@@ -62,6 +62,13 @@ declare const probeSchema: z.ZodUnion<readonly [z.ZodObject<{
|
|
|
62
62
|
ifEmpty: z.ZodOptional<z.ZodString>;
|
|
63
63
|
}, z.core.$strict>]>;
|
|
64
64
|
export type Probe = z.infer<typeof probeSchema>;
|
|
65
|
+
/** The connect form fields an address's placeholders name. */
|
|
66
|
+
export declare function addressFields(address: string): string[];
|
|
67
|
+
/** Refuses a filled-in address whose host is not one of `allowed` (when there is a list). */
|
|
68
|
+
export declare function checkHost(url: URL, allowed: string[] | undefined): void;
|
|
69
|
+
/** The address filled with the connection's values; a value that does not fit its place is
|
|
70
|
+
* refused, so it can never move the call to another host or path. */
|
|
71
|
+
export declare function fillAddress(address: string, config: Record<string, string>, label?: (id: string) => string): string;
|
|
65
72
|
declare const httpAuthSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
66
73
|
type: z.ZodLiteral<"header">;
|
|
67
74
|
header: z.ZodString;
|
|
@@ -80,6 +87,11 @@ declare const httpAuthSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
|
80
87
|
clientId: z.ZodString;
|
|
81
88
|
clientSecret: z.ZodString;
|
|
82
89
|
scope: z.ZodOptional<z.ZodString>;
|
|
90
|
+
clientAuth: z.ZodOptional<z.ZodEnum<{
|
|
91
|
+
body: "body";
|
|
92
|
+
basic: "basic";
|
|
93
|
+
}>>;
|
|
94
|
+
audience: z.ZodOptional<z.ZodString>;
|
|
83
95
|
}, z.core.$strict>, z.ZodObject<{
|
|
84
96
|
type: z.ZodLiteral<"query">;
|
|
85
97
|
param: z.ZodString;
|
|
@@ -87,7 +99,8 @@ declare const httpAuthSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
|
87
99
|
}, z.core.$strict>], "type">;
|
|
88
100
|
export type HttpAuth = z.infer<typeof httpAuthSchema>;
|
|
89
101
|
declare const httpSchema: z.ZodObject<{
|
|
90
|
-
baseUrl: z.
|
|
102
|
+
baseUrl: z.ZodString;
|
|
103
|
+
allowedHosts: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
91
104
|
auth: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
92
105
|
type: z.ZodLiteral<"header">;
|
|
93
106
|
header: z.ZodString;
|
|
@@ -106,12 +119,18 @@ declare const httpSchema: z.ZodObject<{
|
|
|
106
119
|
clientId: z.ZodString;
|
|
107
120
|
clientSecret: z.ZodString;
|
|
108
121
|
scope: z.ZodOptional<z.ZodString>;
|
|
122
|
+
clientAuth: z.ZodOptional<z.ZodEnum<{
|
|
123
|
+
body: "body";
|
|
124
|
+
basic: "basic";
|
|
125
|
+
}>>;
|
|
126
|
+
audience: z.ZodOptional<z.ZodString>;
|
|
109
127
|
}, z.core.$strict>, z.ZodObject<{
|
|
110
128
|
type: z.ZodLiteral<"query">;
|
|
111
129
|
param: z.ZodString;
|
|
112
130
|
value: z.ZodString;
|
|
113
131
|
}, z.core.$strict>], "type">;
|
|
114
132
|
headers: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodString>>;
|
|
133
|
+
fieldHeaders: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodString>>;
|
|
115
134
|
tools: z.ZodArray<z.ZodObject<{
|
|
116
135
|
name: z.ZodString;
|
|
117
136
|
description: z.ZodString;
|
|
@@ -174,7 +193,7 @@ declare const httpSchema: z.ZodObject<{
|
|
|
174
193
|
}, z.core.$strict>;
|
|
175
194
|
export type HttpApp = z.infer<typeof httpSchema>;
|
|
176
195
|
declare const soapSchema: z.ZodObject<{
|
|
177
|
-
endpoint: z.
|
|
196
|
+
endpoint: z.ZodString;
|
|
178
197
|
version: z.ZodDefault<z.ZodEnum<{
|
|
179
198
|
1.1: "1.1";
|
|
180
199
|
1.2: "1.2";
|
|
@@ -234,7 +253,8 @@ declare const soapSchema: z.ZodObject<{
|
|
|
234
253
|
export type SoapApp = z.infer<typeof soapSchema>;
|
|
235
254
|
export type SoapTool = SoapApp["tools"][number];
|
|
236
255
|
declare const odataSchema: z.ZodObject<{
|
|
237
|
-
serviceRoot: z.
|
|
256
|
+
serviceRoot: z.ZodString;
|
|
257
|
+
allowedHosts: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
238
258
|
version: z.ZodEnum<{
|
|
239
259
|
2: "2";
|
|
240
260
|
4: "4";
|
|
@@ -257,6 +277,11 @@ declare const odataSchema: z.ZodObject<{
|
|
|
257
277
|
clientId: z.ZodString;
|
|
258
278
|
clientSecret: z.ZodString;
|
|
259
279
|
scope: z.ZodOptional<z.ZodString>;
|
|
280
|
+
clientAuth: z.ZodOptional<z.ZodEnum<{
|
|
281
|
+
body: "body";
|
|
282
|
+
basic: "basic";
|
|
283
|
+
}>>;
|
|
284
|
+
audience: z.ZodOptional<z.ZodString>;
|
|
260
285
|
}, z.core.$strict>, z.ZodObject<{
|
|
261
286
|
type: z.ZodLiteral<"query">;
|
|
262
287
|
param: z.ZodString;
|
|
@@ -765,7 +790,8 @@ export declare const connectorSchema: z.ZodObject<{
|
|
|
765
790
|
}, z.core.$strict>]>>;
|
|
766
791
|
revoke: z.ZodString;
|
|
767
792
|
http: z.ZodOptional<z.ZodObject<{
|
|
768
|
-
baseUrl: z.
|
|
793
|
+
baseUrl: z.ZodString;
|
|
794
|
+
allowedHosts: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
769
795
|
auth: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
770
796
|
type: z.ZodLiteral<"header">;
|
|
771
797
|
header: z.ZodString;
|
|
@@ -784,12 +810,18 @@ export declare const connectorSchema: z.ZodObject<{
|
|
|
784
810
|
clientId: z.ZodString;
|
|
785
811
|
clientSecret: z.ZodString;
|
|
786
812
|
scope: z.ZodOptional<z.ZodString>;
|
|
813
|
+
clientAuth: z.ZodOptional<z.ZodEnum<{
|
|
814
|
+
body: "body";
|
|
815
|
+
basic: "basic";
|
|
816
|
+
}>>;
|
|
817
|
+
audience: z.ZodOptional<z.ZodString>;
|
|
787
818
|
}, z.core.$strict>, z.ZodObject<{
|
|
788
819
|
type: z.ZodLiteral<"query">;
|
|
789
820
|
param: z.ZodString;
|
|
790
821
|
value: z.ZodString;
|
|
791
822
|
}, z.core.$strict>], "type">;
|
|
792
823
|
headers: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodString>>;
|
|
824
|
+
fieldHeaders: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodString>>;
|
|
793
825
|
tools: z.ZodArray<z.ZodObject<{
|
|
794
826
|
name: z.ZodString;
|
|
795
827
|
description: z.ZodString;
|
|
@@ -851,7 +883,7 @@ export declare const connectorSchema: z.ZodObject<{
|
|
|
851
883
|
allowInsecureHttp: z.ZodDefault<z.ZodBoolean>;
|
|
852
884
|
}, z.core.$strict>>;
|
|
853
885
|
soap: z.ZodOptional<z.ZodObject<{
|
|
854
|
-
endpoint: z.
|
|
886
|
+
endpoint: z.ZodString;
|
|
855
887
|
version: z.ZodDefault<z.ZodEnum<{
|
|
856
888
|
1.1: "1.1";
|
|
857
889
|
1.2: "1.2";
|
|
@@ -909,7 +941,8 @@ export declare const connectorSchema: z.ZodObject<{
|
|
|
909
941
|
allowInsecureHttp: z.ZodDefault<z.ZodBoolean>;
|
|
910
942
|
}, z.core.$strict>>;
|
|
911
943
|
odata: z.ZodOptional<z.ZodObject<{
|
|
912
|
-
serviceRoot: z.
|
|
944
|
+
serviceRoot: z.ZodString;
|
|
945
|
+
allowedHosts: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
913
946
|
version: z.ZodEnum<{
|
|
914
947
|
2: "2";
|
|
915
948
|
4: "4";
|
|
@@ -932,6 +965,11 @@ export declare const connectorSchema: z.ZodObject<{
|
|
|
932
965
|
clientId: z.ZodString;
|
|
933
966
|
clientSecret: z.ZodString;
|
|
934
967
|
scope: z.ZodOptional<z.ZodString>;
|
|
968
|
+
clientAuth: z.ZodOptional<z.ZodEnum<{
|
|
969
|
+
body: "body";
|
|
970
|
+
basic: "basic";
|
|
971
|
+
}>>;
|
|
972
|
+
audience: z.ZodOptional<z.ZodString>;
|
|
935
973
|
}, z.core.$strict>, z.ZodObject<{
|
|
936
974
|
type: z.ZodLiteral<"query">;
|
|
937
975
|
param: z.ZodString;
|