@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.
- package/README.md +19 -7
- 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/dynamics-365/connector.json +16 -1
- package/dist/connectors/dynamics-365/index.d.ts +1 -4
- package/dist/connectors/dynamics-365/index.js.map +1 -1
- package/dist/connectors/entra/index.d.ts +1 -1
- package/dist/connectors/forsta-decipher/connector.json +164 -0
- package/dist/connectors/gitlab/connector.json +263 -0
- package/dist/connectors/gong/vendor.d.ts +1 -1
- package/dist/connectors/gong/vendor.js +24 -32
- package/dist/connectors/gong/vendor.js.map +1 -1
- package/dist/connectors/grafana/connector.json +162 -0
- package/dist/connectors/http/index.d.ts +7 -7
- package/dist/connectors/http/index.js +66 -9
- 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/intune/index.d.ts +1 -1
- package/dist/connectors/jamf/vendor.js +5 -1
- package/dist/connectors/jamf/vendor.js.map +1 -1
- package/dist/connectors/jira/connector.json +3 -3
- package/dist/connectors/jira/vendor.d.ts +1 -1
- package/dist/connectors/jira/vendor.js +8 -2
- package/dist/connectors/jira/vendor.js.map +1 -1
- 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/microsoft/client.d.ts +11 -3
- package/dist/connectors/microsoft/client.js +62 -8
- package/dist/connectors/microsoft/client.js.map +1 -1
- package/dist/connectors/netsuite/connector.json +4 -2
- package/dist/connectors/netsuite/vendor.d.ts +1 -1
- package/dist/connectors/netsuite/vendor.js +5 -6
- package/dist/connectors/netsuite/vendor.js.map +1 -1
- package/dist/connectors/odata/index.d.ts +1 -4
- package/dist/connectors/odata/index.js +12 -5
- package/dist/connectors/odata/index.js.map +1 -1
- package/dist/connectors/okta/connector.json +3 -2
- package/dist/connectors/okta/vendor.d.ts +1 -1
- package/dist/connectors/okta/vendor.js +7 -6
- package/dist/connectors/okta/vendor.js.map +1 -1
- package/dist/connectors/outlook-calendar/index.d.ts +1 -1
- package/dist/connectors/outlook-mail/index.d.ts +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/salesforce/vendor.d.ts +1 -1
- package/dist/connectors/salesforce/vendor.js +9 -3
- package/dist/connectors/salesforce/vendor.js.map +1 -1
- package/dist/connectors/sap-s4hana/connector.json +1 -0
- package/dist/connectors/servicenow/vendor.d.ts +0 -1
- package/dist/connectors/servicenow/vendor.js +7 -10
- package/dist/connectors/servicenow/vendor.js.map +1 -1
- package/dist/connectors/sharepoint-files/connector.json +34 -3
- package/dist/connectors/sharepoint-files/documents.d.ts +7 -0
- package/dist/connectors/sharepoint-files/documents.js +212 -0
- package/dist/connectors/sharepoint-files/documents.js.map +1 -0
- package/dist/connectors/sharepoint-files/docx-worker.d.ts +7 -0
- package/dist/connectors/sharepoint-files/docx-worker.js +41 -0
- package/dist/connectors/sharepoint-files/docx-worker.js.map +1 -0
- package/dist/connectors/sharepoint-files/docx.d.ts +96 -0
- package/dist/connectors/sharepoint-files/docx.js +823 -0
- package/dist/connectors/sharepoint-files/docx.js.map +1 -0
- package/dist/connectors/sharepoint-files/index.d.ts +1 -4
- package/dist/connectors/sharepoint-files/index.js +2 -1
- package/dist/connectors/sharepoint-files/index.js.map +1 -1
- package/dist/connectors/sharepoint-files/ooxml.d.ts +19 -0
- package/dist/connectors/sharepoint-files/ooxml.js +179 -0
- package/dist/connectors/sharepoint-files/ooxml.js.map +1 -0
- package/dist/connectors/sharepoint-files/paging.d.ts +15 -0
- package/dist/connectors/sharepoint-files/paging.js +87 -0
- package/dist/connectors/sharepoint-files/paging.js.map +1 -0
- package/dist/connectors/sharepoint-files/parse-host.mjs +78 -0
- package/dist/connectors/sharepoint-files/pdf-worker.mjs +108 -0
- package/dist/connectors/sharepoint-files/pdf.d.ts +16 -0
- package/dist/connectors/sharepoint-files/pdf.js +19 -0
- package/dist/connectors/sharepoint-files/pdf.js.map +1 -0
- package/dist/connectors/sharepoint-files/sandbox.d.ts +19 -0
- package/dist/connectors/sharepoint-files/sandbox.js +176 -0
- package/dist/connectors/sharepoint-files/sandbox.js.map +1 -0
- package/dist/connectors/sharepoint-files/tools.d.ts +6 -0
- package/dist/connectors/sharepoint-files/tools.js +79 -4
- package/dist/connectors/sharepoint-files/tools.js.map +1 -1
- package/dist/connectors/slack/vendor.d.ts +1 -1
- package/dist/connectors/slack/vendor.js +32 -38
- package/dist/connectors/slack/vendor.js.map +1 -1
- package/dist/connectors/soap/index.d.ts +1 -4
- 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/sql/index.d.ts +1 -4
- package/dist/connectors/sql/index.js +2 -0
- package/dist/connectors/sql/index.js.map +1 -1
- package/dist/connectors/synthesia/connector.json +113 -0
- package/dist/connectors/teams/index.d.ts +1 -1
- package/dist/connectors/teams/tools.d.ts +6 -1
- package/dist/connectors/teams/tools.js +3 -2
- package/dist/connectors/teams/tools.js.map +1 -1
- package/dist/connectors/wordpress/connector.json +203 -0
- package/dist/connectors/workday/connector.json +6 -4
- package/dist/connectors/workday/vendor.d.ts +1 -1
- package/dist/connectors/workday/vendor.js +8 -4
- package/dist/connectors/workday/vendor.js.map +1 -1
- package/dist/connectors/zephyr/connector.json +192 -0
- package/dist/packages/connector-kit/src/common.d.ts +4 -5
- package/dist/packages/connector-kit/src/common.js +4 -1
- package/dist/packages/connector-kit/src/common.js.map +1 -1
- package/dist/packages/connector-kit/src/connector.d.ts +82 -34
- package/dist/packages/connector-kit/src/connector.js +163 -21
- package/dist/packages/connector-kit/src/connector.js.map +1 -1
- package/dist/packages/connector-kit/src/fetch.d.ts +6 -0
- package/dist/packages/connector-kit/src/fetch.js +44 -0
- package/dist/packages/connector-kit/src/fetch.js.map +1 -0
- package/dist/packages/connector-kit/src/index.d.ts +3 -3
- package/dist/packages/connector-kit/src/index.js +1 -0
- package/dist/packages/connector-kit/src/index.js.map +1 -1
- package/dist/packages/connector-kit/src/oauth.d.ts +3 -1
- package/dist/packages/connector-kit/src/oauth.js +16 -6
- package/dist/packages/connector-kit/src/oauth.js.map +1 -1
- package/dist/packages/connector-kit/src/types.d.ts +4 -1
- package/dist/packages/connector-kit/src/types.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 +2486 -257
- package/dist/packages/server/src/api.js +84 -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 +7 -3
- package/dist/packages/server/src/builtin.js +32 -0
- package/dist/packages/server/src/builtin.js.map +1 -1
- package/dist/packages/server/src/events/runtime.js +17 -10
- package/dist/packages/server/src/events/runtime.js.map +1 -1
- package/dist/packages/server/src/events/store.d.ts +2 -2
- package/dist/packages/server/src/index.d.ts +3 -3
- package/dist/packages/server/src/index.js +32 -22
- package/dist/packages/server/src/index.js.map +1 -1
- package/dist/packages/server/src/service.d.ts +1134 -14
- package/dist/packages/server/src/service.js +266 -21
- package/dist/packages/server/src/service.js.map +1 -1
- package/dist/packages/server/src/store.d.ts +43 -4
- package/dist/packages/server/src/store.js +79 -0
- package/dist/packages/server/src/store.js.map +1 -1
- package/package.json +4 -1
package/README.md
CHANGED
|
@@ -6,7 +6,8 @@ agent's grants and written to an audit log. Agents never hold the apps' credenti
|
|
|
6
6
|
|
|
7
7
|
- **Built-in apps:** Jira, Microsoft 365 (Outlook mail and calendar, SharePoint files and Excel,
|
|
8
8
|
Teams, Entra ID, Intune, Dynamics 365), Jamf Pro, Okta, Slack, Salesforce, Gong, SAP S/4HANA,
|
|
9
|
-
Oracle NetSuite, ServiceNow, Workday, FedEx, Dell TechDirect
|
|
9
|
+
Oracle NetSuite, ServiceNow, Workday, FedEx, Dell TechDirect, GitLab, Argo CD, SonarQube,
|
|
10
|
+
Datadog, PagerDuty, Grafana, Zephyr Scale, Confluence.
|
|
10
11
|
- **Your own apps without code:** describe an internal REST API or a SaaS app's in one
|
|
11
12
|
`connector.json`, or draft one from its OpenAPI spec
|
|
12
13
|
([docs/http-connector.md](docs/http-connector.md)); a SOAP service
|
|
@@ -24,7 +25,8 @@ agent's grants and written to an audit log. Agents never hold the apps' credenti
|
|
|
24
25
|
your own admin pages.
|
|
25
26
|
|
|
26
27
|
How it is secured: [docs/security.md](docs/security.md). Adding apps:
|
|
27
|
-
[docs/connectors.md](docs/connectors.md).
|
|
28
|
+
[docs/connectors.md](docs/connectors.md). Running it next to internal systems (your own
|
|
29
|
+
certificate authority, a proxy in front): [docs/inside-your-network.md](docs/inside-your-network.md).
|
|
28
30
|
|
|
29
31
|
## Quick start (about 10 minutes)
|
|
30
32
|
|
|
@@ -142,7 +144,8 @@ serve({ fetch: eac.fetch, port: 3000 });
|
|
|
142
144
|
```
|
|
143
145
|
|
|
144
146
|
**The typed admin client.** The admin API refuses requests that came through a load balancer
|
|
145
|
-
(`X-Forwarded-For`), so call it from your server, over the network or in the same process
|
|
147
|
+
(`X-Forwarded-For`), so call it from your server, over the network or in the same process
|
|
148
|
+
(behind a proxy: [docs/inside-your-network.md](docs/inside-your-network.md)):
|
|
146
149
|
|
|
147
150
|
```ts
|
|
148
151
|
import { createClient } from "@arbium/enterprise-agent-connect-client";
|
|
@@ -183,8 +186,13 @@ const orders: ConnectorJson = {
|
|
|
183
186
|
};
|
|
184
187
|
```
|
|
185
188
|
|
|
189
|
+
**Your own app, per organization.** Each organization can add its own apps through the admin
|
|
190
|
+
API, as many as it wants, without a restart: see [Add internal apps through the admin
|
|
191
|
+
API](docs/http-connector.md#add-internal-apps-through-the-admin-api).
|
|
192
|
+
|
|
186
193
|
**Your own app, as code.** Build a `ConnectorModule` on the connector kit and give it its
|
|
187
|
-
definition as `connector` ([docs/connectors.md](docs/connectors.md))
|
|
194
|
+
definition as `connector` ([docs/connectors.md](docs/connectors.md)). `create` gets a
|
|
195
|
+
`ConnectorContext`, `{ connector }`: the definition parsed, with the branding filled in.
|
|
188
196
|
|
|
189
197
|
```ts
|
|
190
198
|
import { z } from "zod";
|
|
@@ -231,7 +239,9 @@ built-in app is offered. Apps you add with `CONNECTOR_DIRS` are always offered.
|
|
|
231
239
|
`deploy/helm/agent-connect` is a small chart: one replica (Teams and app event run limits are
|
|
232
240
|
counted in one process), a Service, and an optional Ingress with only the public paths. It needs the image
|
|
233
241
|
(`image.repository`, `image.tag`; releases are `ghcr.io/try-caret/enterprise-agent-connect:<version>`) and a Secret with `DATABASE_URL`, `CONNECT_ENCRYPTION_KEY`
|
|
234
|
-
and `AGENT_CONNECT_ADMIN_TOKEN` (`existingSecret`).
|
|
242
|
+
and `AGENT_CONNECT_ADMIN_TOKEN` (`existingSecret`). For apps whose certificates your own
|
|
243
|
+
authority signed, name a ConfigMap or Secret holding its bundle in `caBundle`
|
|
244
|
+
([docs/inside-your-network.md](docs/inside-your-network.md)).
|
|
235
245
|
|
|
236
246
|
## Layout
|
|
237
247
|
|
|
@@ -239,12 +249,14 @@ and `AGENT_CONNECT_ADMIN_TOKEN` (`existingSecret`).
|
|
|
239
249
|
migrations) and its tests
|
|
240
250
|
- `packages/connector-kit`: what a connector builds on (schemas, tool helpers, vendor types)
|
|
241
251
|
- `packages/client`: typed admin API client
|
|
242
|
-
- `connectors/<app>`: one folder per app: `connector.json`, `index.ts`,
|
|
252
|
+
- `connectors/<app>`: one folder per app: `connector.json`, and for apps with code `index.ts`,
|
|
253
|
+
`tools.ts`, `vendor.ts`
|
|
243
254
|
- `connectors/http`, `connectors/soap`, `connectors/odata`, `connectors/sql`: run any app
|
|
244
255
|
described only in its `connector.json` (docs/http-connector.md, docs/soap-connector.md,
|
|
245
256
|
docs/odata-connector.md, docs/sql-connector.md)
|
|
246
257
|
- `examples/internal-app`: a small internal API and its connector, for the quick start
|
|
247
|
-
- `scripts/openapi-to-connector.ts`: drafts an http connector from an OpenAPI 3.x spec
|
|
258
|
+
- `scripts/openapi-to-connector.ts`: drafts an http connector from an OpenAPI 3.x spec (the
|
|
259
|
+
drafting itself is `connectors/http/openapi.ts`, also behind the admin API's internal app drafts)
|
|
248
260
|
- `examples/legacy-apps`: a SOAP and an SAP OData connector, described only in JSON
|
|
249
261
|
- `scripts/wsdl-to-connector.ts`, `scripts/odata-to-connector.ts`: draft a connector from a WSDL
|
|
250
262
|
or an OData `$metadata`
|
|
@@ -0,0 +1,336 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "adestra",
|
|
3
|
+
"name": "Adestra",
|
|
4
|
+
"description": "Let agents draft email campaigns in Adestra: find projects and campaigns, write the subject line and content, and send the campaign to your approvers. Agents never launch a campaign to a list. For staging campaigns and invitations for people to review.",
|
|
5
|
+
"logo": "/brand/registry/adestra.svg",
|
|
6
|
+
"identity": "An Adestra API token. It acts as the Adestra user who created it, with that user's workspaces and access rights, so make a user for agents with only the workspaces they need.",
|
|
7
|
+
"accountKey": "host",
|
|
8
|
+
"connectionKind": "guided",
|
|
9
|
+
"setup": [
|
|
10
|
+
{
|
|
11
|
+
"title": "Make a user for agents",
|
|
12
|
+
"body": "An API token acts as the user who creates it. Make a separate Adestra user for agents, give it read and write API access and only the workspaces agents should draft in. Ask Adestra support to turn on API access for the user if the option is missing.",
|
|
13
|
+
"link": {
|
|
14
|
+
"label": "Adestra: API access and tokens",
|
|
15
|
+
"href": "https://app.adestra.com/doc/page/current/index/api"
|
|
16
|
+
}
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
"title": "Create an API token",
|
|
20
|
+
"body": "Sign in to Adestra as the agents' user. You can test the token with the command below: it shows the user the token belongs to and changes nothing.",
|
|
21
|
+
"click": [
|
|
22
|
+
"Select your user icon in the title bar to open your user panel.",
|
|
23
|
+
"Select Manage API tokens.",
|
|
24
|
+
"Press Create new API token, enter a name such as Agents and, if you like, a description.",
|
|
25
|
+
"Press Create and copy the new token."
|
|
26
|
+
],
|
|
27
|
+
"copy": [
|
|
28
|
+
"curl -s -H \"Authorization: TOKEN $ADESTRA_TOKEN\" https://app.adestra.com/api/rest/1/users/self"
|
|
29
|
+
],
|
|
30
|
+
"shell": "bash"
|
|
31
|
+
}
|
|
32
|
+
],
|
|
33
|
+
"afterConnect": [],
|
|
34
|
+
"fields": [{ "id": "api_token", "label": "API token", "secret": true }],
|
|
35
|
+
"capabilities": [
|
|
36
|
+
{
|
|
37
|
+
"id": "read_campaigns",
|
|
38
|
+
"label": "Read campaigns",
|
|
39
|
+
"description": "Find projects and campaigns, and read a campaign's details, options such as the subject line and sender, and its HTML or text content.",
|
|
40
|
+
"required": true,
|
|
41
|
+
"note": "Reaches every project and campaign the agents' user can see, unless you keep a key to chosen projects under API keys. Read-only.",
|
|
42
|
+
"scopes": [],
|
|
43
|
+
"permissions": [],
|
|
44
|
+
"tools": [
|
|
45
|
+
"adestra_list_projects",
|
|
46
|
+
"adestra_search_campaigns",
|
|
47
|
+
"adestra_get_campaign",
|
|
48
|
+
"adestra_get_campaign_options",
|
|
49
|
+
"adestra_get_message"
|
|
50
|
+
]
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
"id": "draft_campaigns",
|
|
54
|
+
"label": "Draft campaigns",
|
|
55
|
+
"description": "Create campaigns, rename them or change their list, set options such as the subject line and sender, and write their HTML or text content.",
|
|
56
|
+
"note": "Can change any campaign the agents' user can edit, including ones people wrote. Nothing here launches a campaign.",
|
|
57
|
+
"scopes": [],
|
|
58
|
+
"permissions": [],
|
|
59
|
+
"tools": [
|
|
60
|
+
"adestra_create_campaign",
|
|
61
|
+
"adestra_update_campaign",
|
|
62
|
+
"adestra_set_campaign_option",
|
|
63
|
+
"adestra_set_message"
|
|
64
|
+
]
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
"id": "request_approval",
|
|
68
|
+
"label": "Ask for approval",
|
|
69
|
+
"description": "Send a campaign to one of your Adestra approval groups for review.",
|
|
70
|
+
"note": "Approvers decide whether it is launched. Agents cannot ask for it to be launched once approved.",
|
|
71
|
+
"scopes": [],
|
|
72
|
+
"permissions": [],
|
|
73
|
+
"tools": ["adestra_request_approval"]
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
"id": "send_tests",
|
|
77
|
+
"label": "Send test emails",
|
|
78
|
+
"description": "Email a test of a campaign to chosen addresses.",
|
|
79
|
+
"destructive": true,
|
|
80
|
+
"note": "A test is a real email. Keep a key to your own team's addresses under API keys.",
|
|
81
|
+
"scopes": [],
|
|
82
|
+
"permissions": [],
|
|
83
|
+
"tools": ["adestra_send_test"]
|
|
84
|
+
}
|
|
85
|
+
],
|
|
86
|
+
"limits": [
|
|
87
|
+
{
|
|
88
|
+
"id": "projects",
|
|
89
|
+
"label": "Projects",
|
|
90
|
+
"help": "Optional: only these Adestra projects (their ids) when finding and creating campaigns and reading a campaign's details. A campaign's options and content, and changes to a campaign by its id, are not checked against this. Leave empty for every project.",
|
|
91
|
+
"kind": "list",
|
|
92
|
+
"required": false,
|
|
93
|
+
"pattern": "^\\d{1,12}$"
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
"id": "test_addresses",
|
|
97
|
+
"label": "Test email addresses",
|
|
98
|
+
"help": "Optional: the only addresses tests may be sent to. Leave empty for any address.",
|
|
99
|
+
"kind": "list",
|
|
100
|
+
"required": false,
|
|
101
|
+
"pattern": "^[^@\\s]+@[^@\\s]+$"
|
|
102
|
+
}
|
|
103
|
+
],
|
|
104
|
+
"verify": {
|
|
105
|
+
"method": "GET",
|
|
106
|
+
"path": "/users/self",
|
|
107
|
+
"label": "Adestra user",
|
|
108
|
+
"show": "email"
|
|
109
|
+
},
|
|
110
|
+
"discover": {
|
|
111
|
+
"method": "GET",
|
|
112
|
+
"path": "/projects",
|
|
113
|
+
"label": "Projects",
|
|
114
|
+
"show": "projects[].id",
|
|
115
|
+
"name": "projects[].name"
|
|
116
|
+
},
|
|
117
|
+
"revoke": "In Adestra, open the agents' user panel, select Manage API tokens and delete the token. Agents lose access to Adestra at once.",
|
|
118
|
+
"http": {
|
|
119
|
+
"baseUrl": "https://app.adestra.com/api/rest/1",
|
|
120
|
+
"auth": { "type": "header", "header": "Authorization", "prefix": "TOKEN ", "value": "api_token" },
|
|
121
|
+
"tools": [
|
|
122
|
+
{
|
|
123
|
+
"name": "adestra_list_projects",
|
|
124
|
+
"description": "List Adestra projects (which hold campaigns), or only those in one workspace or with a name.",
|
|
125
|
+
"method": "GET",
|
|
126
|
+
"path": "/projects",
|
|
127
|
+
"params": {
|
|
128
|
+
"workspace_id": {
|
|
129
|
+
"type": "integer",
|
|
130
|
+
"description": "Only projects in this workspace",
|
|
131
|
+
"in": "query",
|
|
132
|
+
"name": "search:workspace_id",
|
|
133
|
+
"required": false
|
|
134
|
+
},
|
|
135
|
+
"name": {
|
|
136
|
+
"type": "string",
|
|
137
|
+
"description": "Only projects with exactly this name",
|
|
138
|
+
"in": "query",
|
|
139
|
+
"name": "search:name",
|
|
140
|
+
"required": false
|
|
141
|
+
},
|
|
142
|
+
"page": {
|
|
143
|
+
"type": "integer",
|
|
144
|
+
"description": "Page of results, from 1 (250 per page)",
|
|
145
|
+
"in": "query",
|
|
146
|
+
"name": "paging:page",
|
|
147
|
+
"required": false
|
|
148
|
+
}
|
|
149
|
+
},
|
|
150
|
+
"result": { "items": "projects", "fields": ["id", "name", "description", "workspace_id"] }
|
|
151
|
+
},
|
|
152
|
+
{
|
|
153
|
+
"name": "adestra_search_campaigns",
|
|
154
|
+
"description": "Find campaigns in a project, by name, or by whether they were launched.",
|
|
155
|
+
"method": "GET",
|
|
156
|
+
"path": "/campaigns",
|
|
157
|
+
"params": {
|
|
158
|
+
"project_id": {
|
|
159
|
+
"type": "integer",
|
|
160
|
+
"description": "Only campaigns in this project",
|
|
161
|
+
"in": "query",
|
|
162
|
+
"name": "search:project_id",
|
|
163
|
+
"required": false,
|
|
164
|
+
"limit": "projects"
|
|
165
|
+
},
|
|
166
|
+
"name": {
|
|
167
|
+
"type": "string",
|
|
168
|
+
"description": "Only campaigns with exactly this name",
|
|
169
|
+
"in": "query",
|
|
170
|
+
"name": "search:name",
|
|
171
|
+
"required": false
|
|
172
|
+
},
|
|
173
|
+
"launched": {
|
|
174
|
+
"type": "boolean",
|
|
175
|
+
"description": "Only launched (true) or not yet launched (false) campaigns",
|
|
176
|
+
"in": "query",
|
|
177
|
+
"name": "search:launched",
|
|
178
|
+
"required": false
|
|
179
|
+
},
|
|
180
|
+
"page": {
|
|
181
|
+
"type": "integer",
|
|
182
|
+
"description": "Page of results, from 1",
|
|
183
|
+
"in": "query",
|
|
184
|
+
"name": "paging:page",
|
|
185
|
+
"required": false
|
|
186
|
+
},
|
|
187
|
+
"page_size": {
|
|
188
|
+
"type": "integer",
|
|
189
|
+
"description": "Results per page, up to 250",
|
|
190
|
+
"in": "query",
|
|
191
|
+
"name": "paging:page_size",
|
|
192
|
+
"default": 50
|
|
193
|
+
}
|
|
194
|
+
},
|
|
195
|
+
"result": {
|
|
196
|
+
"items": "campaigns",
|
|
197
|
+
"fields": ["id", "name", "description", "project_id", "list_id", "subject_line", "published", "launched", "edited_date"]
|
|
198
|
+
}
|
|
199
|
+
},
|
|
200
|
+
{
|
|
201
|
+
"name": "adestra_get_campaign",
|
|
202
|
+
"description": "Read one campaign: name, project, list, subject line and whether it was published or launched.",
|
|
203
|
+
"method": "GET",
|
|
204
|
+
"path": "/campaigns/{campaign_id}",
|
|
205
|
+
"params": {
|
|
206
|
+
"campaign_id": { "type": "integer", "description": "The campaign id", "in": "path" }
|
|
207
|
+
},
|
|
208
|
+
"answerLimits": [{ "field": "project_id", "limit": "projects" }]
|
|
209
|
+
},
|
|
210
|
+
{
|
|
211
|
+
"name": "adestra_get_campaign_options",
|
|
212
|
+
"description": "Read a campaign's options, such as subject line, sender and reply names and addresses, and unsubscribe list.",
|
|
213
|
+
"method": "GET",
|
|
214
|
+
"path": "/campaigns/{campaign_id}/options",
|
|
215
|
+
"params": {
|
|
216
|
+
"campaign_id": { "type": "integer", "description": "The campaign id", "in": "path" }
|
|
217
|
+
}
|
|
218
|
+
},
|
|
219
|
+
{
|
|
220
|
+
"name": "adestra_get_message",
|
|
221
|
+
"description": "Read a campaign's HTML or text content.",
|
|
222
|
+
"method": "GET",
|
|
223
|
+
"path": "/campaigns/{campaign_id}/message/{type}",
|
|
224
|
+
"params": {
|
|
225
|
+
"campaign_id": { "type": "integer", "description": "The campaign id", "in": "path" },
|
|
226
|
+
"type": { "type": "string", "enum": ["html", "text"], "description": "Which part: html or text", "in": "path" }
|
|
227
|
+
}
|
|
228
|
+
},
|
|
229
|
+
{
|
|
230
|
+
"name": "adestra_create_campaign",
|
|
231
|
+
"description": "Create a campaign in a project. It is not launched; set its options and content next.",
|
|
232
|
+
"method": "POST",
|
|
233
|
+
"path": "/campaigns",
|
|
234
|
+
"params": {
|
|
235
|
+
"name": { "type": "string", "description": "Campaign name, up to 255 bytes", "in": "body" },
|
|
236
|
+
"project_id": {
|
|
237
|
+
"type": "integer",
|
|
238
|
+
"description": "The project to create it in",
|
|
239
|
+
"in": "body",
|
|
240
|
+
"limit": "projects"
|
|
241
|
+
},
|
|
242
|
+
"description": { "type": "string", "description": "What the campaign is for", "in": "body", "required": false },
|
|
243
|
+
"list_id": { "type": "integer", "description": "The list it will go to", "in": "body", "required": false },
|
|
244
|
+
"apply_user_defaults": {
|
|
245
|
+
"type": "boolean",
|
|
246
|
+
"description": "Apply the user's campaign preferences and presets",
|
|
247
|
+
"in": "query",
|
|
248
|
+
"name": "options:apply_user_defaults",
|
|
249
|
+
"default": true
|
|
250
|
+
}
|
|
251
|
+
},
|
|
252
|
+
"result": { "fields": ["id", "name", "project_id", "list_id"] }
|
|
253
|
+
},
|
|
254
|
+
{
|
|
255
|
+
"name": "adestra_update_campaign",
|
|
256
|
+
"description": "Rename a campaign, change its description or the list it will go to. Values left out stay as they are.",
|
|
257
|
+
"method": "PUT",
|
|
258
|
+
"path": "/campaigns/{campaign_id}",
|
|
259
|
+
"params": {
|
|
260
|
+
"campaign_id": { "type": "integer", "description": "The campaign id", "in": "path" },
|
|
261
|
+
"name": { "type": "string", "description": "New name", "in": "body", "required": false },
|
|
262
|
+
"description": { "type": "string", "description": "New description", "in": "body", "required": false },
|
|
263
|
+
"list_id": { "type": "integer", "description": "New list id", "in": "body", "required": false }
|
|
264
|
+
},
|
|
265
|
+
"result": { "fields": ["id", "name", "project_id", "list_id"] }
|
|
266
|
+
},
|
|
267
|
+
{
|
|
268
|
+
"name": "adestra_set_campaign_option",
|
|
269
|
+
"description": "Set the campaign's subject line, sender name or reply name.",
|
|
270
|
+
"method": "PUT",
|
|
271
|
+
"path": "/campaigns/{campaign_id}/options",
|
|
272
|
+
"params": {
|
|
273
|
+
"campaign_id": { "type": "integer", "description": "The campaign id", "in": "path" },
|
|
274
|
+
"name": {
|
|
275
|
+
"type": "string",
|
|
276
|
+
"description": "Which option",
|
|
277
|
+
"in": "body",
|
|
278
|
+
"enum": ["subject_line", "from_name", "reply_name"]
|
|
279
|
+
},
|
|
280
|
+
"value": { "type": "string", "description": "Option value", "in": "body" }
|
|
281
|
+
}
|
|
282
|
+
},
|
|
283
|
+
{
|
|
284
|
+
"name": "adestra_set_message",
|
|
285
|
+
"description": "Write a campaign's HTML or text content, replacing what is there.",
|
|
286
|
+
"method": "PUT",
|
|
287
|
+
"path": "/campaigns/{campaign_id}/message/{type}",
|
|
288
|
+
"params": {
|
|
289
|
+
"campaign_id": { "type": "integer", "description": "The campaign id", "in": "path" },
|
|
290
|
+
"type": { "type": "string", "enum": ["html", "text"], "description": "Which part: html or text", "in": "path" },
|
|
291
|
+
"content": { "type": "string", "description": "The HTML or text content", "in": "body" }
|
|
292
|
+
},
|
|
293
|
+
"result": { "fields": ["campaign_id", "type"] }
|
|
294
|
+
},
|
|
295
|
+
{
|
|
296
|
+
"name": "adestra_request_approval",
|
|
297
|
+
"description": "Send a campaign to an approval group for review. Approvers are told when notify_approvers is true.",
|
|
298
|
+
"method": "POST",
|
|
299
|
+
"path": "/campaigns/{campaign_id}/request_approval/{approval_group_id}",
|
|
300
|
+
"params": {
|
|
301
|
+
"campaign_id": { "type": "integer", "description": "The campaign id", "in": "path" },
|
|
302
|
+
"approval_group_id": { "type": "integer", "description": "The approval group's id", "in": "path" },
|
|
303
|
+
"threshold": {
|
|
304
|
+
"type": "integer",
|
|
305
|
+
"description": "Approvals needed; left out, everyone in the group must approve",
|
|
306
|
+
"in": "body",
|
|
307
|
+
"required": false
|
|
308
|
+
},
|
|
309
|
+
"notify_approvers": {
|
|
310
|
+
"type": "boolean",
|
|
311
|
+
"description": "Email the group's members about the request",
|
|
312
|
+
"in": "body",
|
|
313
|
+
"default": true
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
},
|
|
317
|
+
{
|
|
318
|
+
"name": "adestra_send_test",
|
|
319
|
+
"description": "Email a test of a campaign to one or more addresses.",
|
|
320
|
+
"method": "POST",
|
|
321
|
+
"path": "/campaigns/{campaign_id}/send_test",
|
|
322
|
+
"destructive": true,
|
|
323
|
+
"params": {
|
|
324
|
+
"campaign_id": { "type": "integer", "description": "The campaign id", "in": "path" },
|
|
325
|
+
"emails": {
|
|
326
|
+
"type": "array",
|
|
327
|
+
"items": "string",
|
|
328
|
+
"description": "Addresses to send the test to",
|
|
329
|
+
"in": "body",
|
|
330
|
+
"limit": "test_addresses"
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
]
|
|
335
|
+
}
|
|
336
|
+
}
|
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "adobe-admin-console",
|
|
3
|
+
"name": "Adobe Admin Console",
|
|
4
|
+
"description": "Let agents read who has which Adobe licences: your Adobe users, the product profiles and user groups they are in, and who is in a profile or group. For joiner, mover and leaver access requests.",
|
|
5
|
+
"logo": "/brand/registry/adobe-admin-console.svg",
|
|
6
|
+
"identity": "An Adobe Developer Console project with the User Management API and OAuth Server-to-Server credentials. Adobe gives these credentials full user management, so agents here only read.",
|
|
7
|
+
"accountKey": "organization",
|
|
8
|
+
"connectionKind": "guided",
|
|
9
|
+
"setup": [
|
|
10
|
+
{
|
|
11
|
+
"title": "Create a project with the User Management API",
|
|
12
|
+
"body": "You need an Adobe system administrator. Adobe gives the project's credentials full user management for your organization; this app only ever reads with them.",
|
|
13
|
+
"link": {
|
|
14
|
+
"label": "Adobe: User Management API authentication",
|
|
15
|
+
"href": "https://adobe-apiplatform.github.io/umapi-documentation/en/UM_Authentication.html"
|
|
16
|
+
},
|
|
17
|
+
"click": [
|
|
18
|
+
"In Adobe Developer Console (developer.adobe.com/console), create a new project.",
|
|
19
|
+
"Select Add API, choose User Management API under Adobe Services, and select Next.",
|
|
20
|
+
"Choose OAuth Server-to-Server, then Save configured API."
|
|
21
|
+
]
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
"title": "Copy the credentials",
|
|
25
|
+
"body": "Copy the three values for the form below. Give each agent the same Organization ID under API keys too: agents name it in every call, and only that organization is allowed.",
|
|
26
|
+
"click": [
|
|
27
|
+
"In the project, open the OAuth Server-to-Server credential.",
|
|
28
|
+
"Copy the Client ID and, after Retrieve client secret, the Client Secret.",
|
|
29
|
+
"Copy the Organization ID, which ends in @AdobeOrg."
|
|
30
|
+
]
|
|
31
|
+
}
|
|
32
|
+
],
|
|
33
|
+
"afterConnect": [],
|
|
34
|
+
"fields": [
|
|
35
|
+
{
|
|
36
|
+
"id": "organization",
|
|
37
|
+
"label": "Organization ID",
|
|
38
|
+
"help": "From the OAuth Server-to-Server credential, ending in @AdobeOrg.",
|
|
39
|
+
"placeholder": "12345ABC67890@AdobeOrg",
|
|
40
|
+
"secret": false
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
"id": "client_id",
|
|
44
|
+
"label": "Client ID",
|
|
45
|
+
"secret": false
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
"id": "client_secret",
|
|
49
|
+
"label": "Client Secret",
|
|
50
|
+
"secret": true
|
|
51
|
+
}
|
|
52
|
+
],
|
|
53
|
+
"capabilities": [
|
|
54
|
+
{
|
|
55
|
+
"id": "read",
|
|
56
|
+
"label": "Read users and licences",
|
|
57
|
+
"description": "Read a user by email with the product profiles and groups they are in, list users, list product profiles and user groups with their product and licence quota, and list who is in a profile or group.",
|
|
58
|
+
"required": true,
|
|
59
|
+
"note": "Reaches every user in the organization. Read-only.",
|
|
60
|
+
"scopes": [],
|
|
61
|
+
"permissions": [],
|
|
62
|
+
"tools": [
|
|
63
|
+
"adobe_get_user",
|
|
64
|
+
"adobe_list_users",
|
|
65
|
+
"adobe_list_groups",
|
|
66
|
+
"adobe_list_group_members"
|
|
67
|
+
]
|
|
68
|
+
}
|
|
69
|
+
],
|
|
70
|
+
"limits": [
|
|
71
|
+
{
|
|
72
|
+
"id": "organizations",
|
|
73
|
+
"label": "Organization ID",
|
|
74
|
+
"help": "The Adobe Organization ID from the connect form, ending in @AdobeOrg. Agents can reach only this organization.",
|
|
75
|
+
"kind": "list",
|
|
76
|
+
"required": true,
|
|
77
|
+
"pattern": "^[A-Za-z0-9]+@AdobeOrg$"
|
|
78
|
+
}
|
|
79
|
+
],
|
|
80
|
+
"verify": {
|
|
81
|
+
"method": "GET",
|
|
82
|
+
"path": "/groups/{organization}/0",
|
|
83
|
+
"label": "Adobe product profiles and groups",
|
|
84
|
+
"show": "groups[].groupName"
|
|
85
|
+
},
|
|
86
|
+
"revoke": "In Adobe Developer Console, open the project and delete the OAuth Server-to-Server credential, or the project. Agents lose access to Adobe at once.",
|
|
87
|
+
"http": {
|
|
88
|
+
"baseUrl": "https://usermanagement.adobe.io/v2/usermanagement",
|
|
89
|
+
"auth": {
|
|
90
|
+
"type": "oauth2",
|
|
91
|
+
"tokenUrl": "https://ims-na1.adobelogin.com/ims/token/v3",
|
|
92
|
+
"clientId": "client_id",
|
|
93
|
+
"clientSecret": "client_secret",
|
|
94
|
+
"scope": "openid,AdobeID,user_management_sdk"
|
|
95
|
+
},
|
|
96
|
+
"fieldHeaders": {
|
|
97
|
+
"x-api-key": "client_id"
|
|
98
|
+
},
|
|
99
|
+
"tools": [
|
|
100
|
+
{
|
|
101
|
+
"name": "adobe_get_user",
|
|
102
|
+
"description": "Read one Adobe user by email: name, status, account type and the product profiles, user groups and admin groups they are in.",
|
|
103
|
+
"method": "GET",
|
|
104
|
+
"path": "/organizations/{org_id}/users/{email}",
|
|
105
|
+
"params": {
|
|
106
|
+
"org_id": {
|
|
107
|
+
"type": "string",
|
|
108
|
+
"description": "The Adobe Organization ID, ending in @AdobeOrg",
|
|
109
|
+
"in": "path",
|
|
110
|
+
"limit": "organizations"
|
|
111
|
+
},
|
|
112
|
+
"email": {
|
|
113
|
+
"type": "string",
|
|
114
|
+
"description": "The user's full email address",
|
|
115
|
+
"in": "path"
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
},
|
|
119
|
+
{
|
|
120
|
+
"name": "adobe_list_users",
|
|
121
|
+
"description": "List the organization's users a page at a time: email, name, status, account type and groups. Pages start at 0; lastPage true marks the last.",
|
|
122
|
+
"method": "GET",
|
|
123
|
+
"path": "/users/{org_id}/{page}",
|
|
124
|
+
"params": {
|
|
125
|
+
"org_id": {
|
|
126
|
+
"type": "string",
|
|
127
|
+
"description": "The Adobe Organization ID, ending in @AdobeOrg",
|
|
128
|
+
"in": "path",
|
|
129
|
+
"limit": "organizations"
|
|
130
|
+
},
|
|
131
|
+
"page": {
|
|
132
|
+
"type": "integer",
|
|
133
|
+
"description": "The page, starting at 0",
|
|
134
|
+
"in": "path"
|
|
135
|
+
}
|
|
136
|
+
},
|
|
137
|
+
"result": {
|
|
138
|
+
"fields": [
|
|
139
|
+
"lastPage",
|
|
140
|
+
"users.email",
|
|
141
|
+
"users.firstname",
|
|
142
|
+
"users.lastname",
|
|
143
|
+
"users.status",
|
|
144
|
+
"users.type",
|
|
145
|
+
"users.groups"
|
|
146
|
+
]
|
|
147
|
+
}
|
|
148
|
+
},
|
|
149
|
+
{
|
|
150
|
+
"name": "adobe_list_groups",
|
|
151
|
+
"description": "List product profiles, user groups and admin groups a page at a time: name, type, member count, and for a product profile its product and licence quota. Pages start at 0; lastPage true marks the last.",
|
|
152
|
+
"method": "GET",
|
|
153
|
+
"path": "/groups/{org_id}/{page}",
|
|
154
|
+
"params": {
|
|
155
|
+
"org_id": {
|
|
156
|
+
"type": "string",
|
|
157
|
+
"description": "The Adobe Organization ID, ending in @AdobeOrg",
|
|
158
|
+
"in": "path",
|
|
159
|
+
"limit": "organizations"
|
|
160
|
+
},
|
|
161
|
+
"page": {
|
|
162
|
+
"type": "integer",
|
|
163
|
+
"description": "The page, starting at 0",
|
|
164
|
+
"in": "path"
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
},
|
|
168
|
+
{
|
|
169
|
+
"name": "adobe_list_group_members",
|
|
170
|
+
"description": "List who is in one product profile, user group or admin group, a page at a time. Pages start at 0; lastPage true marks the last.",
|
|
171
|
+
"method": "GET",
|
|
172
|
+
"path": "/users/{org_id}/{page}/{group}",
|
|
173
|
+
"params": {
|
|
174
|
+
"org_id": {
|
|
175
|
+
"type": "string",
|
|
176
|
+
"description": "The Adobe Organization ID, ending in @AdobeOrg",
|
|
177
|
+
"in": "path",
|
|
178
|
+
"limit": "organizations"
|
|
179
|
+
},
|
|
180
|
+
"page": {
|
|
181
|
+
"type": "integer",
|
|
182
|
+
"description": "The page, starting at 0",
|
|
183
|
+
"in": "path"
|
|
184
|
+
},
|
|
185
|
+
"group": {
|
|
186
|
+
"type": "string",
|
|
187
|
+
"description": "The product profile, user group or admin group name",
|
|
188
|
+
"in": "path"
|
|
189
|
+
},
|
|
190
|
+
"exclude_groups": {
|
|
191
|
+
"type": "boolean",
|
|
192
|
+
"description": "true to leave out each member's own list of groups",
|
|
193
|
+
"in": "query",
|
|
194
|
+
"name": "excludeGroups",
|
|
195
|
+
"default": true
|
|
196
|
+
}
|
|
197
|
+
},
|
|
198
|
+
"result": {
|
|
199
|
+
"fields": [
|
|
200
|
+
"lastPage",
|
|
201
|
+
"groupName",
|
|
202
|
+
"users.email",
|
|
203
|
+
"users.firstname",
|
|
204
|
+
"users.lastname",
|
|
205
|
+
"users.status",
|
|
206
|
+
"users.type"
|
|
207
|
+
]
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
]
|
|
211
|
+
}
|
|
212
|
+
}
|