@arbium/enterprise-agent-connect 0.1.2-dev.d2aa5ca → 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.
Files changed (163) hide show
  1. package/README.md +19 -7
  2. package/dist/connectors/adestra/connector.json +336 -0
  3. package/dist/connectors/adobe-admin-console/connector.json +212 -0
  4. package/dist/connectors/argo-cd/connector.json +210 -0
  5. package/dist/connectors/automox/connector.json +376 -0
  6. package/dist/connectors/churnzero/connector.json +238 -0
  7. package/dist/connectors/confluence/connector.json +168 -0
  8. package/dist/connectors/cvent/connector.json +287 -0
  9. package/dist/connectors/datadog/connector.json +188 -0
  10. package/dist/connectors/drata/connector.json +447 -0
  11. package/dist/connectors/druva/connector.json +258 -0
  12. package/dist/connectors/dynamics-365/connector.json +16 -1
  13. package/dist/connectors/dynamics-365/index.d.ts +1 -4
  14. package/dist/connectors/dynamics-365/index.js.map +1 -1
  15. package/dist/connectors/entra/index.d.ts +1 -1
  16. package/dist/connectors/forsta-decipher/connector.json +164 -0
  17. package/dist/connectors/gitlab/connector.json +263 -0
  18. package/dist/connectors/gong/vendor.d.ts +1 -1
  19. package/dist/connectors/gong/vendor.js +24 -32
  20. package/dist/connectors/gong/vendor.js.map +1 -1
  21. package/dist/connectors/grafana/connector.json +162 -0
  22. package/dist/connectors/http/index.d.ts +7 -7
  23. package/dist/connectors/http/index.js +66 -9
  24. package/dist/connectors/http/index.js.map +1 -1
  25. package/dist/connectors/http/openapi.d.ts +62 -0
  26. package/dist/connectors/http/openapi.js +342 -0
  27. package/dist/connectors/http/openapi.js.map +1 -0
  28. package/dist/connectors/intercom/connector.json +249 -0
  29. package/dist/connectors/intune/index.d.ts +1 -1
  30. package/dist/connectors/jamf/vendor.js +5 -1
  31. package/dist/connectors/jamf/vendor.js.map +1 -1
  32. package/dist/connectors/jira/connector.json +3 -3
  33. package/dist/connectors/jira/vendor.d.ts +1 -1
  34. package/dist/connectors/jira/vendor.js +8 -2
  35. package/dist/connectors/jira/vendor.js.map +1 -1
  36. package/dist/connectors/lusha/connector.json +59 -0
  37. package/dist/connectors/lusha/index.d.ts +8 -0
  38. package/dist/connectors/lusha/index.js +7 -0
  39. package/dist/connectors/lusha/index.js.map +1 -0
  40. package/dist/connectors/lusha/tools.d.ts +2 -0
  41. package/dist/connectors/lusha/tools.js +113 -0
  42. package/dist/connectors/lusha/tools.js.map +1 -0
  43. package/dist/connectors/lusha/vendor.d.ts +4 -0
  44. package/dist/connectors/lusha/vendor.js +72 -0
  45. package/dist/connectors/lusha/vendor.js.map +1 -0
  46. package/dist/connectors/microsoft/client.d.ts +11 -3
  47. package/dist/connectors/microsoft/client.js +62 -8
  48. package/dist/connectors/microsoft/client.js.map +1 -1
  49. package/dist/connectors/netsuite/connector.json +4 -2
  50. package/dist/connectors/netsuite/vendor.d.ts +1 -1
  51. package/dist/connectors/netsuite/vendor.js +5 -6
  52. package/dist/connectors/netsuite/vendor.js.map +1 -1
  53. package/dist/connectors/odata/index.d.ts +1 -4
  54. package/dist/connectors/odata/index.js +12 -5
  55. package/dist/connectors/odata/index.js.map +1 -1
  56. package/dist/connectors/okta/connector.json +3 -2
  57. package/dist/connectors/okta/vendor.d.ts +1 -1
  58. package/dist/connectors/okta/vendor.js +7 -6
  59. package/dist/connectors/okta/vendor.js.map +1 -1
  60. package/dist/connectors/outlook-calendar/index.d.ts +1 -1
  61. package/dist/connectors/outlook-mail/index.d.ts +1 -1
  62. package/dist/connectors/pagerduty/connector.json +247 -0
  63. package/dist/connectors/qualys/connector.json +271 -0
  64. package/dist/connectors/safebase/connector.json +221 -0
  65. package/dist/connectors/salesforce/vendor.d.ts +1 -1
  66. package/dist/connectors/salesforce/vendor.js +9 -3
  67. package/dist/connectors/salesforce/vendor.js.map +1 -1
  68. package/dist/connectors/sap-s4hana/connector.json +1 -0
  69. package/dist/connectors/servicenow/vendor.d.ts +0 -1
  70. package/dist/connectors/servicenow/vendor.js +7 -10
  71. package/dist/connectors/servicenow/vendor.js.map +1 -1
  72. package/dist/connectors/sharepoint-files/connector.json +34 -3
  73. package/dist/connectors/sharepoint-files/documents.d.ts +7 -0
  74. package/dist/connectors/sharepoint-files/documents.js +212 -0
  75. package/dist/connectors/sharepoint-files/documents.js.map +1 -0
  76. package/dist/connectors/sharepoint-files/docx-worker.d.ts +7 -0
  77. package/dist/connectors/sharepoint-files/docx-worker.js +41 -0
  78. package/dist/connectors/sharepoint-files/docx-worker.js.map +1 -0
  79. package/dist/connectors/sharepoint-files/docx.d.ts +96 -0
  80. package/dist/connectors/sharepoint-files/docx.js +823 -0
  81. package/dist/connectors/sharepoint-files/docx.js.map +1 -0
  82. package/dist/connectors/sharepoint-files/index.d.ts +1 -4
  83. package/dist/connectors/sharepoint-files/index.js +2 -1
  84. package/dist/connectors/sharepoint-files/index.js.map +1 -1
  85. package/dist/connectors/sharepoint-files/ooxml.d.ts +19 -0
  86. package/dist/connectors/sharepoint-files/ooxml.js +179 -0
  87. package/dist/connectors/sharepoint-files/ooxml.js.map +1 -0
  88. package/dist/connectors/sharepoint-files/paging.d.ts +15 -0
  89. package/dist/connectors/sharepoint-files/paging.js +87 -0
  90. package/dist/connectors/sharepoint-files/paging.js.map +1 -0
  91. package/dist/connectors/sharepoint-files/parse-host.mjs +78 -0
  92. package/dist/connectors/sharepoint-files/pdf-worker.mjs +108 -0
  93. package/dist/connectors/sharepoint-files/pdf.d.ts +16 -0
  94. package/dist/connectors/sharepoint-files/pdf.js +19 -0
  95. package/dist/connectors/sharepoint-files/pdf.js.map +1 -0
  96. package/dist/connectors/sharepoint-files/sandbox.d.ts +19 -0
  97. package/dist/connectors/sharepoint-files/sandbox.js +176 -0
  98. package/dist/connectors/sharepoint-files/sandbox.js.map +1 -0
  99. package/dist/connectors/sharepoint-files/tools.d.ts +6 -0
  100. package/dist/connectors/sharepoint-files/tools.js +79 -4
  101. package/dist/connectors/sharepoint-files/tools.js.map +1 -1
  102. package/dist/connectors/slack/vendor.d.ts +1 -1
  103. package/dist/connectors/slack/vendor.js +32 -38
  104. package/dist/connectors/slack/vendor.js.map +1 -1
  105. package/dist/connectors/soap/index.d.ts +1 -4
  106. package/dist/connectors/soap/index.js +4 -3
  107. package/dist/connectors/soap/index.js.map +1 -1
  108. package/dist/connectors/sonarqube/connector.json +165 -0
  109. package/dist/connectors/sprout-social/connector.json +158 -0
  110. package/dist/connectors/sql/index.d.ts +1 -4
  111. package/dist/connectors/sql/index.js +2 -0
  112. package/dist/connectors/sql/index.js.map +1 -1
  113. package/dist/connectors/synthesia/connector.json +113 -0
  114. package/dist/connectors/teams/index.d.ts +1 -1
  115. package/dist/connectors/teams/tools.d.ts +6 -1
  116. package/dist/connectors/teams/tools.js +3 -2
  117. package/dist/connectors/teams/tools.js.map +1 -1
  118. package/dist/connectors/wordpress/connector.json +203 -0
  119. package/dist/connectors/workday/connector.json +6 -4
  120. package/dist/connectors/workday/vendor.d.ts +1 -1
  121. package/dist/connectors/workday/vendor.js +8 -4
  122. package/dist/connectors/workday/vendor.js.map +1 -1
  123. package/dist/connectors/zephyr/connector.json +192 -0
  124. package/dist/packages/connector-kit/src/common.d.ts +4 -5
  125. package/dist/packages/connector-kit/src/common.js +4 -1
  126. package/dist/packages/connector-kit/src/common.js.map +1 -1
  127. package/dist/packages/connector-kit/src/connector.d.ts +82 -34
  128. package/dist/packages/connector-kit/src/connector.js +163 -21
  129. package/dist/packages/connector-kit/src/connector.js.map +1 -1
  130. package/dist/packages/connector-kit/src/fetch.d.ts +6 -0
  131. package/dist/packages/connector-kit/src/fetch.js +44 -0
  132. package/dist/packages/connector-kit/src/fetch.js.map +1 -0
  133. package/dist/packages/connector-kit/src/index.d.ts +3 -3
  134. package/dist/packages/connector-kit/src/index.js +1 -0
  135. package/dist/packages/connector-kit/src/index.js.map +1 -1
  136. package/dist/packages/connector-kit/src/oauth.d.ts +3 -1
  137. package/dist/packages/connector-kit/src/oauth.js +16 -6
  138. package/dist/packages/connector-kit/src/oauth.js.map +1 -1
  139. package/dist/packages/connector-kit/src/types.d.ts +4 -1
  140. package/dist/packages/connector-kit/src/types.js.map +1 -1
  141. package/dist/packages/server/migrations/0008_internal_apps.sql +16 -0
  142. package/dist/packages/server/migrations/rollback/to-legacy.sql +2 -0
  143. package/dist/packages/server/src/api.d.ts +2486 -257
  144. package/dist/packages/server/src/api.js +84 -1
  145. package/dist/packages/server/src/api.js.map +1 -1
  146. package/dist/packages/server/src/app.js +26 -1
  147. package/dist/packages/server/src/app.js.map +1 -1
  148. package/dist/packages/server/src/builtin.d.ts +7 -3
  149. package/dist/packages/server/src/builtin.js +32 -0
  150. package/dist/packages/server/src/builtin.js.map +1 -1
  151. package/dist/packages/server/src/events/runtime.js +17 -10
  152. package/dist/packages/server/src/events/runtime.js.map +1 -1
  153. package/dist/packages/server/src/events/store.d.ts +2 -2
  154. package/dist/packages/server/src/index.d.ts +3 -3
  155. package/dist/packages/server/src/index.js +32 -22
  156. package/dist/packages/server/src/index.js.map +1 -1
  157. package/dist/packages/server/src/service.d.ts +1134 -14
  158. package/dist/packages/server/src/service.js +266 -21
  159. package/dist/packages/server/src/service.js.map +1 -1
  160. package/dist/packages/server/src/store.d.ts +43 -4
  161. package/dist/packages/server/src/store.js +79 -0
  162. package/dist/packages/server/src/store.js.map +1 -1
  163. package/package.json +4 -1
@@ -0,0 +1,271 @@
1
+ {
2
+ "id": "qualys",
3
+ "name": "Qualys",
4
+ "description": "Let agents read your Qualys vulnerability data: hosts and when they were last scanned, the vulnerabilities found on them, and what each vulnerability is and how to fix it. For endpoint compliance checks and remediation tickets.",
5
+ "logo": "/brand/registry/qualys.svg",
6
+ "identity": "A Qualys user with the Reader role and API access. Qualys answers in XML, which agents read as text.",
7
+ "accountKey": "host",
8
+ "connectionKind": "guided",
9
+ "setup": [
10
+ {
11
+ "title": "Create a Reader user for agents",
12
+ "body": "You need a Qualys Manager. Give agents their own user with the Reader role, the least a user with API access can have, and only the asset groups agents should see.",
13
+ "link": {
14
+ "label": "Qualys: user roles and API access",
15
+ "href": "https://docs.qualys.com/en/admin/portal/latest/platform/user_roles_faq.htm"
16
+ },
17
+ "click": [
18
+ "In Qualys, go to Users, then Users, and select New, then User.",
19
+ "Enter the user's name, email and other details.",
20
+ "Under User Role, choose Reader and allow API access.",
21
+ "Under Asset Groups, add the asset groups agents should see.",
22
+ "Save, then sign in once as the new user to set its password."
23
+ ]
24
+ },
25
+ {
26
+ "title": "Find your API address",
27
+ "body": "Qualys runs on several platforms, each with its own API address, such as qualysapi.qualys.com (US1) or qualysapi.qualys.eu (EU1). You can test the user with the command below: it lists one host and changes nothing.",
28
+ "link": {
29
+ "label": "Qualys: platform identification",
30
+ "href": "https://www.qualys.com/platform-identification/"
31
+ },
32
+ "click": [
33
+ "Find your platform from the identifier in your Qualys username, as Qualys' platform identification page explains.",
34
+ "Copy that platform's API server address from the same page."
35
+ ],
36
+ "copy": [
37
+ "QUALYS=qualysapi.qualys.com",
38
+ "curl -s -u \"$QUALYS_USER:$QUALYS_PASSWORD\" -H \"X-Requested-With: curl\" \"https://$QUALYS/api/2.0/fo/asset/host/?action=list&details=Basic&truncation_limit=1\""
39
+ ],
40
+ "shell": "bash"
41
+ }
42
+ ],
43
+ "afterConnect": [],
44
+ "fields": [
45
+ {
46
+ "id": "api_host",
47
+ "label": "API address",
48
+ "help": "Your platform's API server, without https://, such as qualysapi.qualys.com.",
49
+ "placeholder": "qualysapi.qualys.com",
50
+ "secret": false
51
+ },
52
+ {
53
+ "id": "username",
54
+ "label": "Username",
55
+ "secret": false
56
+ },
57
+ {
58
+ "id": "password",
59
+ "label": "Password",
60
+ "secret": true
61
+ }
62
+ ],
63
+ "capabilities": [
64
+ {
65
+ "id": "read",
66
+ "label": "Read hosts and vulnerabilities",
67
+ "description": "List hosts with their operating system and last scan, list the vulnerabilities detected on hosts by severity and status, and look up vulnerabilities in the Qualys KnowledgeBase by QID.",
68
+ "required": true,
69
+ "note": "Reaches every host in the Reader's asset groups unless you keep an agent to chosen asset groups. Read-only.",
70
+ "scopes": [],
71
+ "permissions": [],
72
+ "tools": ["qualys_list_hosts", "qualys_list_detections", "qualys_get_vulnerabilities"]
73
+ }
74
+ ],
75
+ "limits": [
76
+ {
77
+ "id": "asset_groups",
78
+ "label": "Asset groups",
79
+ "help": "Optional: only hosts in these Qualys asset groups, by their numeric id (in Qualys under Assets, then Asset Groups). Leave empty for every host the user can see.",
80
+ "kind": "list",
81
+ "required": false,
82
+ "pattern": "^\\d{1,20}$"
83
+ }
84
+ ],
85
+ "verify": {
86
+ "method": "GET",
87
+ "path": "/api/2.0/fo/asset/host/?action=list&details=None&truncation_limit=1",
88
+ "label": "Qualys answers",
89
+ "show": "HOST_LIST_OUTPUT"
90
+ },
91
+ "revoke": "In Qualys, go to Users, then Users, and deactivate or delete the agents' user. Agents lose access to Qualys at once.",
92
+ "http": {
93
+ "baseUrl": "https://{api_host}",
94
+ "allowedHosts": [
95
+ "qualysapi.qualys.com",
96
+ "qualysapi.qualys.eu",
97
+ "qualysapi.gov1.qualys.us",
98
+ "*.apps.qualys.com",
99
+ "*.apps.qualys.eu",
100
+ "*.apps.qualys.it",
101
+ "*.apps.qualys.in",
102
+ "*.apps.qualys.ca",
103
+ "*.apps.qualys.ae",
104
+ "*.apps.qualys.co.uk",
105
+ "*.apps.qualys.com.au",
106
+ "*.apps.qualysksa.com"
107
+ ],
108
+ "auth": { "type": "basic", "username": "username", "password": "password" },
109
+ "headers": { "X-Requested-With": "Enterprise Agent Connect" },
110
+ "tools": [
111
+ {
112
+ "name": "qualys_list_hosts",
113
+ "description": "List hosts, as XML: id, IP, DNS name, operating system and when each was last scanned. Up to 100 a time by default; when there are more, the answer ends with a warning naming the next id_min to pass.",
114
+ "method": "GET",
115
+ "path": "/api/2.0/fo/asset/host/",
116
+ "params": {
117
+ "action": { "type": "string", "enum": ["list"], "description": "Always list", "in": "query", "default": "list" },
118
+ "details": {
119
+ "type": "string",
120
+ "enum": ["Basic", "Basic/AGs", "All", "All/AGs"],
121
+ "description": "How much of each host: Basic, or All for every field; /AGs adds its asset groups",
122
+ "in": "query",
123
+ "default": "Basic"
124
+ },
125
+ "asset_groups": {
126
+ "type": "array",
127
+ "items": "string",
128
+ "description": "Only hosts in these asset group ids",
129
+ "in": "query",
130
+ "name": "ag_ids",
131
+ "join": ",",
132
+ "required": false,
133
+ "limit": "asset_groups"
134
+ },
135
+ "ips": {
136
+ "type": "string",
137
+ "description": "Only these IP addresses or ranges, comma-separated, such as 10.0.0.1,10.0.1.0-10.0.1.255",
138
+ "in": "query",
139
+ "required": false
140
+ },
141
+ "ids": {
142
+ "type": "string",
143
+ "description": "Only these host ids or ranges, comma-separated, such as 190-400",
144
+ "in": "query",
145
+ "required": false
146
+ },
147
+ "os_pattern": {
148
+ "type": "string",
149
+ "description": "Only hosts whose operating system matches this regular expression, such as ^Windows",
150
+ "in": "query",
151
+ "required": false
152
+ },
153
+ "no_vm_scan_since": {
154
+ "type": "string",
155
+ "description": "Only hosts not scanned since this date, YYYY-MM-DD",
156
+ "in": "query",
157
+ "required": false
158
+ },
159
+ "id_min": {
160
+ "type": "integer",
161
+ "description": "Only hosts with this id or above, for the next batch",
162
+ "in": "query",
163
+ "required": false
164
+ },
165
+ "truncation_limit": {
166
+ "type": "integer",
167
+ "description": "How many hosts at most, 1 to 1000",
168
+ "in": "query",
169
+ "default": 100
170
+ }
171
+ }
172
+ },
173
+ {
174
+ "name": "qualys_list_detections",
175
+ "description": "List the vulnerabilities detected on hosts, as XML: per host its id, IP and operating system, then each detection's QID, severity, status (New, Active, Re-Opened, Fixed) and first and last found dates. Up to 50 hosts a time by default; when there are more, the answer ends with a warning naming the next id_min to pass. Look up what a QID is with qualys_get_vulnerabilities.",
176
+ "method": "GET",
177
+ "path": "/api/2.0/fo/asset/host/vm/detection/",
178
+ "params": {
179
+ "action": { "type": "string", "enum": ["list"], "description": "Always list", "in": "query", "default": "list" },
180
+ "asset_groups": {
181
+ "type": "array",
182
+ "items": "string",
183
+ "description": "Only hosts in these asset group ids",
184
+ "in": "query",
185
+ "name": "ag_ids",
186
+ "join": ",",
187
+ "required": false,
188
+ "limit": "asset_groups"
189
+ },
190
+ "ips": {
191
+ "type": "string",
192
+ "description": "Only these IP addresses or ranges, comma-separated",
193
+ "in": "query",
194
+ "required": false
195
+ },
196
+ "ids": {
197
+ "type": "string",
198
+ "description": "Only these host ids or ranges, comma-separated",
199
+ "in": "query",
200
+ "required": false
201
+ },
202
+ "qids": {
203
+ "type": "string",
204
+ "description": "Only these QIDs or ranges, comma-separated",
205
+ "in": "query",
206
+ "required": false
207
+ },
208
+ "severities": {
209
+ "type": "string",
210
+ "description": "Only these severities, 1 to 5, comma-separated or a range, such as 4-5",
211
+ "in": "query",
212
+ "required": false
213
+ },
214
+ "status": {
215
+ "type": "string",
216
+ "description": "Only detections in these states, comma-separated: New, Active, Re-Opened, Fixed",
217
+ "in": "query",
218
+ "required": false
219
+ },
220
+ "include_vuln_type": {
221
+ "type": "string",
222
+ "enum": ["confirmed", "potential"],
223
+ "description": "Only confirmed or only potential vulnerabilities",
224
+ "in": "query",
225
+ "required": false
226
+ },
227
+ "show_results": {
228
+ "type": "integer",
229
+ "enum": [0, 1],
230
+ "description": "1 to include what the scan found for each detection, 0 to leave it out",
231
+ "in": "query",
232
+ "default": 0
233
+ },
234
+ "id_min": {
235
+ "type": "integer",
236
+ "description": "Only hosts with this id or above, for the next batch",
237
+ "in": "query",
238
+ "required": false
239
+ },
240
+ "truncation_limit": {
241
+ "type": "integer",
242
+ "description": "How many hosts at most, 1 to 1000",
243
+ "in": "query",
244
+ "default": 50
245
+ }
246
+ }
247
+ },
248
+ {
249
+ "name": "qualys_get_vulnerabilities",
250
+ "description": "Look up vulnerabilities in the Qualys KnowledgeBase by QID, as XML: title, severity, CVEs, whether a patch exists, and with details All the diagnosis, consequence and solution.",
251
+ "method": "GET",
252
+ "path": "/api/2.0/fo/knowledge_base/vuln/",
253
+ "params": {
254
+ "action": { "type": "string", "enum": ["list"], "description": "Always list", "in": "query", "default": "list" },
255
+ "ids": {
256
+ "type": "string",
257
+ "description": "The QIDs, comma-separated, or a range such as 1-200",
258
+ "in": "query"
259
+ },
260
+ "details": {
261
+ "type": "string",
262
+ "enum": ["Basic", "All"],
263
+ "description": "Basic, or All to include diagnosis, consequence and solution",
264
+ "in": "query",
265
+ "default": "All"
266
+ }
267
+ }
268
+ }
269
+ ]
270
+ }
271
+ }
@@ -0,0 +1,221 @@
1
+ {
2
+ "id": "safebase",
3
+ "name": "SafeBase",
4
+ "description": "Let agents search your SafeBase knowledge base and Trust Center documents for approved answers, and, if you allow it, add new internal answers. For security questionnaires, RFPs and security reviews.",
5
+ "logo": "/brand/registry/safebase.svg",
6
+ "identity": "A SafeBase API key, scoped to what the actions you tick need.",
7
+ "accountKey": "host",
8
+ "connectionKind": "guided",
9
+ "setup": [
10
+ {
11
+ "title": "Create an API key",
12
+ "body": "You need a SafeBase admin. SafeBase checks each call against the key's scopes, so give it only the scopes below. SafeBase shows the key once, so copy it for the form below.",
13
+ "link": {
14
+ "label": "SafeBase: the SafeBase API",
15
+ "href": "https://help.safebase.io/en/articles/6119329-integration-safebase-api"
16
+ },
17
+ "click": [
18
+ "In SafeBase, open Settings (app.safebase.io/orgsettings).",
19
+ "Scroll down to the API Keys section and select Add API Key.",
20
+ "Type a name that identifies the agents in the Description box, such as AI agents.",
21
+ "Select only these scopes: {scopes}.",
22
+ "Copy the key and keep it somewhere safe."
23
+ ]
24
+ }
25
+ ],
26
+ "afterConnect": [],
27
+ "fields": [
28
+ {
29
+ "id": "api_key",
30
+ "label": "API key",
31
+ "secret": true
32
+ }
33
+ ],
34
+ "capabilities": [
35
+ {
36
+ "id": "read",
37
+ "label": "Search answers and documents",
38
+ "description": "Search the knowledge base (answers from policies, past questionnaires, reports and the Trust Center), list and read Trust Center documents, and list products.",
39
+ "required": true,
40
+ "note": "Includes knowledge base entries marked private or internal, not only what the Trust Center shows publicly. Read-only.",
41
+ "scopes": ["knowledgebase:view", "documents:view", "products:view", "organization:view"],
42
+ "permissions": [],
43
+ "tools": [
44
+ "safebase_search_knowledge_base",
45
+ "safebase_list_documents",
46
+ "safebase_get_document",
47
+ "safebase_list_products"
48
+ ]
49
+ },
50
+ {
51
+ "id": "add_answers",
52
+ "label": "Add internal answers",
53
+ "description": "Add a question and answer to the knowledge base, visible only inside your company until someone in SafeBase changes it.",
54
+ "note": "New answers can be used in later questionnaire responses, so review what agents add.",
55
+ "scopes": ["knowledgebase:edit"],
56
+ "permissions": [],
57
+ "tools": ["safebase_add_answer"]
58
+ }
59
+ ],
60
+ "limits": [
61
+ {
62
+ "id": "products",
63
+ "label": "Products",
64
+ "help": "Optional: only answers and documents for these SafeBase products, by product id (shown under SafeBase products after connecting). Leave empty for every product.",
65
+ "kind": "list",
66
+ "required": false,
67
+ "pattern": "^[A-Za-z0-9_-]{1,64}$"
68
+ }
69
+ ],
70
+ "verify": {
71
+ "method": "GET",
72
+ "path": "/organizations",
73
+ "label": "SafeBase organization",
74
+ "show": "result.name"
75
+ },
76
+ "discover": {
77
+ "method": "GET",
78
+ "path": "/products",
79
+ "label": "SafeBase products",
80
+ "show": "result.items[].id",
81
+ "name": "result.items[].name"
82
+ },
83
+ "revoke": "In SafeBase, go to Settings, then API Keys, and suspend the key. Agents lose access to SafeBase at once.",
84
+ "http": {
85
+ "baseUrl": "https://app.safebase.io/api/ext/v1/rest",
86
+ "auth": { "type": "header", "header": "x-sb-api-key", "value": "api_key" },
87
+ "tools": [
88
+ {
89
+ "name": "safebase_search_knowledge_base",
90
+ "description": "Search the knowledge base for answers to a security question. Each result says where it comes from (policy, questionnaire, report, Trust Center or a manual entry) and who may see it.",
91
+ "method": "GET",
92
+ "path": "/kb/search",
93
+ "params": {
94
+ "query": {
95
+ "type": "string",
96
+ "description": "What to search for, up to 512 characters",
97
+ "in": "query"
98
+ },
99
+ "products": {
100
+ "type": "array",
101
+ "items": "string",
102
+ "description": "Only these product ids; leave out to search every product",
103
+ "in": "query",
104
+ "join": ",",
105
+ "required": false,
106
+ "limit": "products"
107
+ },
108
+ "page": {
109
+ "type": "integer",
110
+ "description": "The page, starting at 1",
111
+ "in": "query",
112
+ "name": "pageNumber",
113
+ "default": 1
114
+ },
115
+ "page_size": {
116
+ "type": "integer",
117
+ "description": "How many results per page",
118
+ "in": "query",
119
+ "name": "pageSize",
120
+ "default": 20
121
+ }
122
+ },
123
+ "result": {
124
+ "items": "result.items",
125
+ "fields": ["id", "source", "accessLevel", "subtype.pretty", "content", "product.name", "products.name"]
126
+ }
127
+ },
128
+ {
129
+ "name": "safebase_list_documents",
130
+ "description": "List Trust Center documents, such as reports, certificates and policies, optionally matching a search. Pass page 2, 3 and so on for more.",
131
+ "method": "GET",
132
+ "path": "/documents",
133
+ "params": {
134
+ "query": {
135
+ "type": "string",
136
+ "description": "Only documents matching this text",
137
+ "in": "query",
138
+ "required": false
139
+ },
140
+ "products": {
141
+ "type": "array",
142
+ "items": "string",
143
+ "description": "Only documents for these product ids",
144
+ "in": "query",
145
+ "name": "productIds",
146
+ "join": ",",
147
+ "required": false,
148
+ "limit": "products"
149
+ },
150
+ "page": {
151
+ "type": "integer",
152
+ "description": "The page, starting at 1",
153
+ "in": "query",
154
+ "default": 1
155
+ },
156
+ "limit": {
157
+ "type": "integer",
158
+ "description": "How many documents per page",
159
+ "in": "query",
160
+ "default": 25
161
+ }
162
+ },
163
+ "result": { "items": "result.documents" }
164
+ },
165
+ {
166
+ "name": "safebase_get_document",
167
+ "description": "Read one document's details: name, type, file type, expiry date, tags and products.",
168
+ "method": "GET",
169
+ "path": "/document/{id}",
170
+ "params": {
171
+ "id": {
172
+ "type": "string",
173
+ "description": "The document id",
174
+ "in": "path"
175
+ }
176
+ },
177
+ "answerLimits": [{ "field": "result.products.id", "limit": "products" }]
178
+ },
179
+ {
180
+ "name": "safebase_list_products",
181
+ "description": "List your SafeBase products, with their ids.",
182
+ "method": "GET",
183
+ "path": "/products",
184
+ "result": { "items": "result.items", "fields": ["id", "name"] }
185
+ },
186
+ {
187
+ "name": "safebase_add_answer",
188
+ "description": "Add a question and its answer to the knowledge base, visible inside your company only.",
189
+ "method": "POST",
190
+ "path": "/kb/entries",
191
+ "params": {
192
+ "question": {
193
+ "type": "string",
194
+ "description": "The question",
195
+ "in": "body"
196
+ },
197
+ "answer": {
198
+ "type": "string",
199
+ "description": "The answer",
200
+ "in": "body"
201
+ },
202
+ "comment": {
203
+ "type": "string",
204
+ "description": "A note for reviewers, such as where the answer comes from",
205
+ "in": "body",
206
+ "required": false
207
+ },
208
+ "access_level": {
209
+ "type": "string",
210
+ "enum": ["internal"],
211
+ "description": "Who may see the answer: internal (your company only)",
212
+ "in": "body",
213
+ "name": "accessLevel",
214
+ "default": "internal"
215
+ }
216
+ },
217
+ "result": { "fields": ["result.id", "result.content"] }
218
+ }
219
+ ]
220
+ }
221
+ }
@@ -1,3 +1,3 @@
1
1
  import { type Fetch, type Vendor } from "../../packages/connector-kit/src/types.js";
2
2
  export declare function normalizeMyDomain(input: string): string;
3
- export declare function salesforceVendor(fetchImpl?: Fetch): Vendor;
3
+ export declare function salesforceVendor(unguarded?: Fetch): Vendor;
@@ -1,4 +1,5 @@
1
1
  import { createHash } from "node:crypto";
2
+ import { vendorFetch, vendorUrl } from "../../packages/connector-kit/src/fetch.js";
2
3
  import { ConnectError, TokenCache, } from "../../packages/connector-kit/src/types.js";
3
4
  // The customer's External Client App, client credentials flow, running as their integration
4
5
  // user. Tokens come from their My Domain, and the API is called on the instance_url it returns.
@@ -26,7 +27,8 @@ function instanceUrl(raw) {
26
27
  throw new ConnectError("Salesforce returned an unexpected address for your org");
27
28
  return url.origin;
28
29
  }
29
- export function salesforceVendor(fetchImpl = fetch) {
30
+ export function salesforceVendor(unguarded = fetch) {
31
+ const fetchImpl = vendorFetch("Salesforce", unguarded);
30
32
  const tokens = new TokenCache();
31
33
  async function mint(myDomain, clientId, clientSecret) {
32
34
  const res = await fetchImpl(`https://${myDomain}/services/oauth2/token`, {
@@ -54,7 +56,7 @@ export function salesforceVendor(fetchImpl = fetch) {
54
56
  expiresIn: TOKEN_SECONDS,
55
57
  }));
56
58
  async function send(base, access, request) {
57
- const res = await fetchImpl(`${base}${request.path}`, {
59
+ const res = await fetchImpl(vendorUrl(base, request.path), {
58
60
  method: request.method,
59
61
  headers: {
60
62
  authorization: `Bearer ${access}`,
@@ -65,7 +67,11 @@ export function salesforceVendor(fetchImpl = fetch) {
65
67
  body: request.body === undefined ? undefined : JSON.stringify(request.body),
66
68
  });
67
69
  const raw = await res.text();
68
- return { status: res.status, data: raw ? safeJson(raw) : null };
70
+ return {
71
+ status: res.status,
72
+ data: raw ? safeJson(raw) : null,
73
+ headers: Object.fromEntries(res.headers),
74
+ };
69
75
  }
70
76
  return {
71
77
  async connect(fields) {
@@ -1 +1 @@
1
- {"version":3,"file":"vendor.js","sourceRoot":"","sources":["../../../connectors/salesforce/vendor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EACL,YAAY,EACZ,UAAU,GAKX,MAAM,2CAA2C,CAAC;AAEnD,4FAA4F;AAC5F,gGAAgG;AAEhG,MAAM,SAAS,GAAG,0DAA0D,CAAC;AAC7E,MAAM,OAAO,GAAG,yCAAyC,CAAC;AAC1D,yFAAyF;AACzF,6FAA6F;AAC7F,yCAAyC;AACzC,MAAM,aAAa,GAAG,EAAE,GAAG,EAAE,CAAC;AAE9B,MAAM,UAAU,iBAAiB,CAAC,KAAa;IAC7C,IAAI,IAAI,GAAG,KAAK;SACb,IAAI,EAAE;SACN,WAAW,EAAE;SACb,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC;SAC3B,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IACxB,IAAI,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,IAAI,GAAG,GAAG,IAAI,oBAAoB,CAAC;IAC1E,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;QACvB,MAAM,IAAI,YAAY,CAAC,gEAAgE,CAAC,CAAC;IAC3F,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,WAAW,CAAC,GAAY;IAC/B,MAAM,GAAG,GAAG,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC5D,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,QAAQ,KAAK,QAAQ,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC,IAAI;QAChF,MAAM,IAAI,YAAY,CAAC,wDAAwD,CAAC,CAAC;IACnF,OAAO,GAAG,CAAC,MAAM,CAAC;AACpB,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,YAAmB,KAAK;IACvD,MAAM,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;IAEhC,KAAK,UAAU,IAAI,CAAC,QAAgB,EAAE,QAAgB,EAAE,YAAoB;QAC1E,MAAM,GAAG,GAAG,MAAM,SAAS,CAAC,WAAW,QAAQ,wBAAwB,EAAE;YACvE,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,mCAAmC,EAAE;YAChE,IAAI,EAAE,IAAI,eAAe,CAAC;gBACxB,UAAU,EAAE,oBAAoB;gBAChC,SAAS,EAAE,QAAQ;gBACnB,aAAa,EAAE,YAAY;aAC5B,CAAC;SACH,CAAC,CAAC;QACH,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAM/C,CAAC;QACF,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;YAClC,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,KAAK,IAAI,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;YAC3F,MAAM,IAAI,YAAY,CAAC,mCAAmC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;QACjF,CAAC;QACD,OAAO,IAA8C,CAAC;IACxD,CAAC;IAED,MAAM,QAAQ,GAAG,CAAC,CAAmB,EAAE,EAAE,CACvC,UAAU,CAAC,QAAQ,CAAC;SACjB,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,QAAQ,KAAK,CAAC,CAAC,MAAM,CAAC,SAAS,KAAK,CAAC,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC;SAChF,MAAM,CAAC,KAAK,CAAC,CAAC;IAEnB,MAAM,KAAK,GAAG,CAAC,CAAmB,EAAE,EAAE,CACpC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;QACnC,KAAK,EAAE,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;aAC/E,YAAY;QACf,SAAS,EAAE,aAAa;KACzB,CAAC,CAAC,CAAC;IAEN,KAAK,UAAU,IAAI,CAAC,IAAY,EAAE,MAAc,EAAE,OAAsB;QACtE,MAAM,GAAG,GAAG,MAAM,SAAS,CAAC,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,EAAE,EAAE;YACpD,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,OAAO,EAAE;gBACP,aAAa,EAAE,UAAU,MAAM,EAAE;gBACjC,MAAM,EAAE,kBAAkB;gBAC1B,GAAG,OAAO,CAAC,OAAO;gBAClB,GAAG,CAAC,OAAO,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC;aAC9E;YACD,IAAI,EAAE,OAAO,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC;SAC5E,CAAC,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;QAC7B,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAClE,CAAC;IAED,OAAO;QACL,KAAK,CAAC,OAAO,CAAC,MAAM;YAClB,MAAM,QAAQ,GAAG,iBAAiB,CAAC,MAAM,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;YAC3D,MAAM,QAAQ,GAAG,MAAM,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC;YAC1C,MAAM,YAAY,GAAG,MAAM,CAAC,aAAa,EAAE,IAAI,EAAE,CAAC;YAClD,IAAI,CAAC,QAAQ,IAAI,CAAC,YAAY;gBAC5B,MAAM,IAAI,YAAY,CAAC,4CAA4C,CAAC,CAAC;YACvE,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC;YAC5D,8EAA8E;YAC9E,MAAM,MAAM,GAAG,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;YACjD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;gBACvB,MAAM,IAAI,YAAY,CAAC,mDAAmD,CAAC,CAAC;YAC9E,OAAO;gBACL,MAAM,EAAE,EAAE,QAAQ,EAAE,WAAW,EAAE,WAAW,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE;gBAC3E,MAAM,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,aAAa,EAAE,YAAY,EAAE;gBAC5D,YAAY,EAAE,QAAQ;aACvB,CAAC;QACJ,CAAC;QAED,KAAK,CAAC,IAAI,CAAC,UAA4B,EAAE,OAAsB;YAC7D,MAAM,IAAI,GAAG,WAAW,CAAC,UAAU,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;YACxD,IAAI,GAAG,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,MAAM,KAAK,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC,CAAC;YAC7D,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;gBACvB,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC;gBACpC,GAAG,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,MAAM,KAAK,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC,CAAC;YAC3D,CAAC;YACD,OAAO,GAAG,CAAC;QACb,CAAC;KACF,CAAC;AACJ,CAAC;AAED,SAAS,QAAQ,CAAC,GAAW;IAC3B,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACzB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,GAAG,CAAC;IACb,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"vendor.js","sourceRoot":"","sources":["../../../connectors/salesforce/vendor.ts"],"names":[],"mappings":"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"}
@@ -131,6 +131,7 @@
131
131
  "help": "The three-digit SAP client, for example 100. Leave empty for the system's default client.",
132
132
  "placeholder": "100",
133
133
  "secret": false,
134
+ "optional": true,
134
135
  "requires": { "field": "deployment", "value": "on_premise" }
135
136
  },
136
137
  {
@@ -1,4 +1,3 @@
1
1
  import { type Fetch, type Vendor } from "../../packages/connector-kit/src/types.js";
2
2
  export declare function normalizeInstance(input: string): string;
3
- export declare function noRedirects(fetchImpl: Fetch): Fetch;
4
3
  export declare function servicenowVendor(unguarded?: Fetch): Vendor;
@@ -1,3 +1,4 @@
1
+ import { vendorFetch } from "../../packages/connector-kit/src/fetch.js";
1
2
  import { clientCredentials } from "../../packages/connector-kit/src/oauth.js";
2
3
  import { ConnectError, } from "../../packages/connector-kit/src/types.js";
3
4
  // A ServiceNow integration user, signing in through an OAuth application registry entry
@@ -30,16 +31,8 @@ function checkPath(path) {
30
31
  if (!/^\/(?![/\\])/.test(path))
31
32
  throw new Error(`Refused ServiceNow path ${path.slice(0, 50)}`);
32
33
  }
33
- export function noRedirects(fetchImpl) {
34
- return (async (input, init) => {
35
- const res = await fetchImpl(input, { ...init, redirect: "manual" });
36
- if (res.status >= 300 && res.status < 400)
37
- throw new ConnectError(`ServiceNow answered with a redirect (${res.status}), which is not followed. Enter the address the instance is served at.`);
38
- return res;
39
- });
40
- }
41
34
  export function servicenowVendor(unguarded = fetch) {
42
- const fetchImpl = noRedirects(unguarded);
35
+ const fetchImpl = vendorFetch("ServiceNow", unguarded);
43
36
  const oauth = clientCredentials("ServiceNow", fetchImpl);
44
37
  const creds = (c) => ({
45
38
  tokenUrl: `${base(c.config)}/oauth_token.do`,
@@ -58,7 +51,11 @@ export function servicenowVendor(unguarded = fetch) {
58
51
  body: request.body === undefined ? undefined : JSON.stringify(request.body),
59
52
  });
60
53
  const raw = await res.text();
61
- return { status: res.status, data: raw ? safeJson(raw) : null };
54
+ return {
55
+ status: res.status,
56
+ data: raw ? safeJson(raw) : null,
57
+ headers: Object.fromEntries(res.headers),
58
+ };
62
59
  }
63
60
  const call = async (c, request) => {
64
61
  checkPath(request.path);
@@ -1 +1 @@
1
- {"version":3,"file":"vendor.js","sourceRoot":"","sources":["../../../connectors/servicenow/vendor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"vendor.js","sourceRoot":"","sources":["../../../connectors/servicenow/vendor.ts"],"names":[],"mappings":"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"}