@arbium/enterprise-agent-connect 0.1.1 → 0.1.2-dev.cba5f68
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 +164 -12
- package/dist/connectors/dell-techdirect/index.d.ts +8 -0
- package/dist/connectors/dell-techdirect/tools.d.ts +2 -0
- package/dist/connectors/dell-techdirect/vendor.d.ts +6 -0
- package/dist/connectors/dynamics-365/connector.json +228 -0
- package/dist/connectors/dynamics-365/index.d.ts +8 -0
- package/dist/connectors/dynamics-365/index.js +10 -0
- package/dist/connectors/dynamics-365/index.js.map +1 -0
- package/dist/connectors/dynamics-365/tools.d.ts +35 -0
- package/dist/connectors/dynamics-365/tools.js +806 -0
- package/dist/connectors/dynamics-365/tools.js.map +1 -0
- package/dist/connectors/dynamics-365/vendor.d.ts +9 -0
- package/dist/connectors/dynamics-365/vendor.js +110 -0
- package/dist/connectors/dynamics-365/vendor.js.map +1 -0
- package/dist/connectors/entra/index.d.ts +2 -0
- package/dist/connectors/entra/tools.d.ts +14 -0
- package/dist/connectors/fedex/index.d.ts +8 -0
- package/dist/connectors/fedex/tools.d.ts +3 -0
- package/dist/connectors/fedex/vendor.d.ts +7 -0
- package/dist/connectors/gong/connector.json +127 -0
- package/dist/connectors/gong/index.d.ts +8 -0
- package/dist/connectors/gong/index.js +7 -0
- package/dist/connectors/gong/index.js.map +1 -0
- package/dist/connectors/gong/tools.d.ts +8 -0
- package/dist/connectors/gong/tools.js +424 -0
- package/dist/connectors/gong/tools.js.map +1 -0
- package/dist/connectors/gong/vendor.d.ts +4 -0
- package/dist/connectors/gong/vendor.js +89 -0
- package/dist/connectors/gong/vendor.js.map +1 -0
- package/dist/connectors/http/index.d.ts +34 -0
- package/dist/connectors/http/index.js +154 -64
- package/dist/connectors/http/index.js.map +1 -1
- package/dist/connectors/intune/index.d.ts +2 -0
- package/dist/connectors/intune/tools.d.ts +12 -0
- package/dist/connectors/jamf/connector.json +182 -0
- package/dist/connectors/jamf/index.d.ts +8 -0
- package/dist/connectors/jamf/index.js +7 -0
- package/dist/connectors/jamf/index.js.map +1 -0
- package/dist/connectors/jamf/tools.d.ts +7 -0
- package/dist/connectors/jamf/tools.js +659 -0
- package/dist/connectors/jamf/tools.js.map +1 -0
- package/dist/connectors/jamf/vendor.d.ts +5 -0
- package/dist/connectors/jamf/vendor.js +70 -0
- package/dist/connectors/jamf/vendor.js.map +1 -0
- package/dist/connectors/jira/connector.json +144 -1
- package/dist/connectors/jira/index.d.ts +8 -0
- package/dist/connectors/jira/jql.d.ts +4 -0
- package/dist/connectors/jira/tools.d.ts +3 -0
- package/dist/connectors/jira/vendor.d.ts +3 -0
- package/dist/connectors/jira/vendor.js +8 -2
- package/dist/connectors/jira/vendor.js.map +1 -1
- package/dist/connectors/microsoft/client.d.ts +66 -0
- package/dist/connectors/microsoft/client.js +26 -8
- package/dist/connectors/microsoft/client.js.map +1 -1
- package/dist/connectors/netsuite/connector.json +317 -0
- package/dist/connectors/netsuite/index.d.ts +8 -0
- package/dist/connectors/netsuite/index.js +7 -0
- package/dist/connectors/netsuite/index.js.map +1 -0
- package/dist/connectors/netsuite/tools.d.ts +24 -0
- package/dist/connectors/netsuite/tools.js +447 -0
- package/dist/connectors/netsuite/tools.js.map +1 -0
- package/dist/connectors/netsuite/vendor.d.ts +26 -0
- package/dist/connectors/netsuite/vendor.js +247 -0
- package/dist/connectors/netsuite/vendor.js.map +1 -0
- package/dist/connectors/odata/index.d.ts +33 -0
- package/dist/connectors/odata/index.js +460 -0
- package/dist/connectors/odata/index.js.map +1 -0
- package/dist/connectors/okta/connector.json +194 -0
- package/dist/connectors/okta/index.d.ts +8 -0
- package/dist/connectors/okta/index.js +7 -0
- package/dist/connectors/okta/index.js.map +1 -0
- package/dist/connectors/okta/tools.d.ts +6 -0
- package/dist/connectors/okta/tools.js +429 -0
- package/dist/connectors/okta/tools.js.map +1 -0
- package/dist/connectors/okta/vendor.d.ts +14 -0
- package/dist/connectors/okta/vendor.js +204 -0
- package/dist/connectors/okta/vendor.js.map +1 -0
- package/dist/connectors/outlook-calendar/index.d.ts +2 -0
- package/dist/connectors/outlook-calendar/tools.d.ts +65 -0
- package/dist/connectors/outlook-mail/index.d.ts +2 -0
- package/dist/connectors/outlook-mail/tools.d.ts +8 -0
- package/dist/connectors/salesforce/index.d.ts +8 -0
- package/dist/connectors/salesforce/soql.d.ts +3 -0
- package/dist/connectors/salesforce/tools.d.ts +9 -0
- package/dist/connectors/salesforce/vendor.d.ts +3 -0
- package/dist/connectors/salesforce/vendor.js +9 -3
- package/dist/connectors/salesforce/vendor.js.map +1 -1
- package/dist/connectors/sap-s4hana/connector.json +264 -0
- package/dist/connectors/sap-s4hana/index.d.ts +8 -0
- package/dist/connectors/sap-s4hana/index.js +7 -0
- package/dist/connectors/sap-s4hana/index.js.map +1 -0
- package/dist/connectors/sap-s4hana/tools.d.ts +4 -0
- package/dist/connectors/sap-s4hana/tools.js +761 -0
- package/dist/connectors/sap-s4hana/tools.js.map +1 -0
- package/dist/connectors/sap-s4hana/vendor.d.ts +5 -0
- package/dist/connectors/sap-s4hana/vendor.js +176 -0
- package/dist/connectors/sap-s4hana/vendor.js.map +1 -0
- package/dist/connectors/servicenow/connector.json +228 -0
- package/dist/connectors/servicenow/index.d.ts +8 -0
- package/dist/connectors/servicenow/index.js +7 -0
- package/dist/connectors/servicenow/index.js.map +1 -0
- package/dist/connectors/servicenow/tools.d.ts +4 -0
- package/dist/connectors/servicenow/tools.js +884 -0
- package/dist/connectors/servicenow/tools.js.map +1 -0
- package/dist/connectors/servicenow/vendor.d.ts +3 -0
- package/dist/connectors/servicenow/vendor.js +106 -0
- package/dist/connectors/servicenow/vendor.js.map +1 -0
- package/dist/connectors/sharepoint-files/excel.d.ts +16 -0
- package/dist/connectors/sharepoint-files/index.d.ts +8 -0
- package/dist/connectors/sharepoint-files/index.js.map +1 -1
- package/dist/connectors/sharepoint-files/tools.d.ts +52 -0
- package/dist/connectors/sharepoint-files/vendor.d.ts +11 -0
- package/dist/connectors/slack/connector.json +148 -0
- package/dist/connectors/slack/index.d.ts +8 -0
- package/dist/connectors/slack/index.js +7 -0
- package/dist/connectors/slack/index.js.map +1 -0
- package/dist/connectors/slack/tools.d.ts +3 -0
- package/dist/connectors/slack/tools.js +355 -0
- package/dist/connectors/slack/tools.js.map +1 -0
- package/dist/connectors/slack/vendor.d.ts +17 -0
- package/dist/connectors/slack/vendor.js +189 -0
- package/dist/connectors/slack/vendor.js.map +1 -0
- package/dist/connectors/soap/index.d.ts +16 -0
- package/dist/connectors/soap/index.js +248 -0
- package/dist/connectors/soap/index.js.map +1 -0
- package/dist/connectors/soap/xml.d.ts +12 -0
- package/dist/connectors/soap/xml.js +126 -0
- package/dist/connectors/soap/xml.js.map +1 -0
- package/dist/connectors/sql/engines.d.ts +58 -0
- package/dist/connectors/sql/engines.js +292 -0
- package/dist/connectors/sql/engines.js.map +1 -0
- package/dist/connectors/sql/index.d.ts +16 -0
- package/dist/connectors/sql/index.js +214 -0
- package/dist/connectors/sql/index.js.map +1 -0
- package/dist/connectors/teams/index.d.ts +2 -0
- package/dist/connectors/teams/tools.d.ts +7 -0
- package/dist/connectors/teams/tools.js +3 -2
- package/dist/connectors/teams/tools.js.map +1 -1
- package/dist/connectors/workday/connector.json +188 -0
- package/dist/connectors/workday/index.d.ts +8 -0
- package/dist/connectors/workday/index.js +7 -0
- package/dist/connectors/workday/index.js.map +1 -0
- package/dist/connectors/workday/tools.d.ts +33 -0
- package/dist/connectors/workday/tools.js +410 -0
- package/dist/connectors/workday/tools.js.map +1 -0
- package/dist/connectors/workday/vendor.d.ts +18 -0
- package/dist/connectors/workday/vendor.js +199 -0
- package/dist/connectors/workday/vendor.js.map +1 -0
- package/dist/packages/connector-kit/src/branding.d.ts +57 -0
- package/dist/packages/connector-kit/src/certificate.d.ts +19 -0
- package/dist/packages/connector-kit/src/common.d.ts +36 -0
- 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 +1356 -0
- package/dist/packages/connector-kit/src/connector.js +632 -53
- 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 +5 -0
- package/dist/packages/connector-kit/src/index.js +6 -0
- package/dist/packages/connector-kit/src/index.js.map +1 -0
- package/dist/packages/connector-kit/src/oauth.d.ts +15 -0
- package/dist/packages/connector-kit/src/oauth.js +25 -6
- package/dist/packages/connector-kit/src/oauth.js.map +1 -1
- package/dist/packages/connector-kit/src/types.d.ts +87 -0
- package/dist/packages/connector-kit/src/types.js.map +1 -1
- package/dist/packages/server/migrations/0007_app_events.sql +110 -0
- package/dist/packages/server/migrations/rollback/to-legacy.sql +3 -0
- package/dist/packages/server/src/api.d.ts +3730 -0
- package/dist/packages/server/src/api.js +137 -1
- package/dist/packages/server/src/api.js.map +1 -1
- package/dist/packages/server/src/app.d.ts +23 -0
- package/dist/packages/server/src/app.js +24 -1
- package/dist/packages/server/src/app.js.map +1 -1
- package/dist/packages/server/src/builtin.d.ts +5 -0
- package/dist/packages/server/src/builtin.js +18 -0
- package/dist/packages/server/src/builtin.js.map +1 -1
- package/dist/packages/server/src/consent.d.ts +27 -0
- package/dist/packages/server/src/events/admin.d.ts +156 -0
- package/dist/packages/server/src/events/admin.js +255 -0
- package/dist/packages/server/src/events/admin.js.map +1 -0
- package/dist/packages/server/src/events/deliver.d.ts +43 -0
- package/dist/packages/server/src/events/deliver.js +129 -0
- package/dist/packages/server/src/events/deliver.js.map +1 -0
- package/dist/packages/server/src/events/runtime.d.ts +28 -0
- package/dist/packages/server/src/events/runtime.js +397 -0
- package/dist/packages/server/src/events/runtime.js.map +1 -0
- package/dist/packages/server/src/events/store.d.ts +172 -0
- package/dist/packages/server/src/events/store.js +275 -0
- package/dist/packages/server/src/events/store.js.map +1 -0
- package/dist/packages/server/src/index.d.ts +40 -0
- package/dist/packages/server/src/index.js +68 -11
- package/dist/packages/server/src/index.js.map +1 -1
- package/dist/packages/server/src/migrate.d.ts +11 -0
- package/dist/packages/server/src/openapi.d.ts +4 -0
- package/dist/packages/server/src/openapi.js +2 -2
- package/dist/packages/server/src/openapi.js.map +1 -1
- package/dist/packages/server/src/queue.d.ts +10 -0
- package/dist/packages/server/src/queue.js +45 -0
- package/dist/packages/server/src/queue.js.map +1 -0
- package/dist/packages/server/src/secrets.d.ts +19 -0
- package/dist/packages/server/src/server.d.ts +1 -0
- package/dist/packages/server/src/server.js +14 -1
- package/dist/packages/server/src/server.js.map +1 -1
- package/dist/packages/server/src/service.d.ts +767 -0
- package/dist/packages/server/src/service.js +19 -3
- package/dist/packages/server/src/service.js.map +1 -1
- package/dist/packages/server/src/store.d.ts +157 -0
- package/dist/packages/server/src/store.js +4 -0
- package/dist/packages/server/src/store.js.map +1 -1
- package/dist/packages/server/src/teams/activity.d.ts +123 -0
- package/dist/packages/server/src/teams/activity.js +6 -5
- package/dist/packages/server/src/teams/activity.js.map +1 -1
- package/dist/packages/server/src/teams/admin.d.ts +335 -0
- package/dist/packages/server/src/teams/admin.js +1 -1
- package/dist/packages/server/src/teams/admin.js.map +1 -1
- package/dist/packages/server/src/teams/approval.d.ts +57 -0
- package/dist/packages/server/src/teams/bot.d.ts +25 -0
- package/dist/packages/server/src/teams/claude.d.ts +46 -0
- package/dist/packages/server/src/teams/jwt.d.ts +17 -0
- package/dist/packages/server/src/teams/package.d.ts +79 -0
- package/dist/packages/server/src/teams/provision.d.ts +84 -0
- package/dist/packages/server/src/teams/runner.d.ts +80 -0
- package/dist/packages/server/src/teams/runner.js +50 -6
- package/dist/packages/server/src/teams/runner.js.map +1 -1
- package/dist/packages/server/src/teams/runtime.d.ts +91 -0
- package/dist/packages/server/src/teams/runtime.js +25 -47
- package/dist/packages/server/src/teams/runtime.js.map +1 -1
- package/dist/packages/server/src/teams/store.d.ts +233 -0
- package/package.json +28 -2
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
import { vendorFetch } from "../../packages/connector-kit/src/fetch.js";
|
|
3
|
+
import { vendorError } from "../../packages/connector-kit/src/oauth.js";
|
|
4
|
+
import { ConnectError, TokenCache, } from "../../packages/connector-kit/src/types.js";
|
|
5
|
+
// A Workday API client for integrations, signing in as its Integration System User with a
|
|
6
|
+
// non-expiring refresh token (OAuth 2.0 refresh token grant at /ccx/oauth2/<tenant>/token, the
|
|
7
|
+
// client id and secret as HTTP Basic). REST calls under /ccx/api/<service>/<version>/<tenant>,
|
|
8
|
+
// custom reports (Reports-as-a-Service) under /ccx/service/customreport2/<tenant>. Service
|
|
9
|
+
// paths are Workday's REST directory (developer.workday.com, services_oas3.json, read October
|
|
10
|
+
// 27, 2026); its spec files need a Workday sign-in, so answer fields follow CData's Workday
|
|
11
|
+
// tables, which are generated from them.
|
|
12
|
+
const HOST = /^[a-z0-9-]+(\.[a-z0-9-]+)*\.(myworkday|workday)\.com$/;
|
|
13
|
+
const TENANT = /^[A-Za-z0-9_]{1,64}$/;
|
|
14
|
+
const REPORT_SEGMENT = /^[A-Za-z0-9_.\-]{1,200}$/;
|
|
15
|
+
const PROMPT = /^[A-Za-z0-9_!.\-]{1,100}$/;
|
|
16
|
+
const MAX_REPORTS = 30;
|
|
17
|
+
// Workday's token answer may carry no lifetime: reuse a token this long, re-mint once on a 401.
|
|
18
|
+
const DEFAULT_TOKEN_SECONDS = 600;
|
|
19
|
+
// The REST API endpoint shown on Workday's View API Clients page, e.g.
|
|
20
|
+
// https://wd5-services1.myworkday.com/ccx/api/v1/acme: host and tenant.
|
|
21
|
+
export function parseEndpoint(raw) {
|
|
22
|
+
let url;
|
|
23
|
+
try {
|
|
24
|
+
url = new URL(raw.trim());
|
|
25
|
+
}
|
|
26
|
+
catch {
|
|
27
|
+
throw new ConnectError("Enter the Workday REST API endpoint, such as https://wd5-services1.myworkday.com/ccx/api/v1/acme");
|
|
28
|
+
}
|
|
29
|
+
const host = url.hostname.toLowerCase();
|
|
30
|
+
if (url.protocol !== "https:" || url.port || !HOST.test(host))
|
|
31
|
+
throw new ConnectError(`${url.host} is not a Workday address (ending myworkday.com or workday.com)`);
|
|
32
|
+
const tenant = /^\/ccx\/api\/(?:[A-Za-z]+\/)?v\d+\/([^/]+)\/?$/.exec(url.pathname)?.[1];
|
|
33
|
+
if (!tenant || !TENANT.test(tenant))
|
|
34
|
+
throw new ConnectError("The endpoint should end with /ccx/api/v1/<tenant>, as shown on the View API Clients page");
|
|
35
|
+
return { host, tenant };
|
|
36
|
+
}
|
|
37
|
+
// Each report's JSON link from Workday (the report's Actions > Web Service > View URLs > JSON),
|
|
38
|
+
// separated by spaces or new lines. Its query names are the report's prompts; one whose example
|
|
39
|
+
// value is a date takes dates.
|
|
40
|
+
export function parseReports(raw, host, tenant) {
|
|
41
|
+
const links = raw.split(/\s+/).filter(Boolean);
|
|
42
|
+
if (links.length > MAX_REPORTS)
|
|
43
|
+
throw new ConnectError(`Enter at most ${MAX_REPORTS} reports`);
|
|
44
|
+
const reports = links.map((link) => {
|
|
45
|
+
let url;
|
|
46
|
+
try {
|
|
47
|
+
url = new URL(link);
|
|
48
|
+
}
|
|
49
|
+
catch {
|
|
50
|
+
throw new ConnectError(`${link.slice(0, 100)} is not a report link`);
|
|
51
|
+
}
|
|
52
|
+
const parts = url.pathname.split("/").map((p) => decodeURIComponent(p));
|
|
53
|
+
const [, ccx, service, kind, t, owner, report] = parts;
|
|
54
|
+
if (url.protocol !== "https:" ||
|
|
55
|
+
url.hostname.toLowerCase() !== host ||
|
|
56
|
+
ccx !== "ccx" ||
|
|
57
|
+
service !== "service" ||
|
|
58
|
+
kind !== "customreport2" ||
|
|
59
|
+
parts.length !== 7 ||
|
|
60
|
+
!REPORT_SEGMENT.test(owner ?? "") ||
|
|
61
|
+
!REPORT_SEGMENT.test(report ?? ""))
|
|
62
|
+
throw new ConnectError(`${link.slice(0, 100)} is not a custom report link on ${host} (…/ccx/service/customreport2/${tenant}/<owner>/<report>)`);
|
|
63
|
+
if (t !== tenant)
|
|
64
|
+
throw new ConnectError(`${report} belongs to tenant ${t}, not ${tenant}`);
|
|
65
|
+
const prompts = [];
|
|
66
|
+
for (const [name, value] of url.searchParams) {
|
|
67
|
+
if (name === "format")
|
|
68
|
+
continue;
|
|
69
|
+
if (!PROMPT.test(name))
|
|
70
|
+
throw new ConnectError(`${report}: ${name} is not a prompt name`);
|
|
71
|
+
prompts.push({ name, type: /^\d{4}-\d{2}-\d{2}/.test(value) ? "date" : "text" });
|
|
72
|
+
}
|
|
73
|
+
return { name: report, owner, report, prompts };
|
|
74
|
+
});
|
|
75
|
+
const names = reports.map((r) => r.name);
|
|
76
|
+
const twice = names.find((n, i) => names.indexOf(n) !== i);
|
|
77
|
+
if (twice)
|
|
78
|
+
throw new ConnectError(`${twice} is entered twice`);
|
|
79
|
+
return reports;
|
|
80
|
+
}
|
|
81
|
+
export function connectedReports(config) {
|
|
82
|
+
return config.reports ? JSON.parse(config.reports) : [];
|
|
83
|
+
}
|
|
84
|
+
export function workdayVendor(unguarded = fetch) {
|
|
85
|
+
const fetchImpl = vendorFetch("Workday", unguarded);
|
|
86
|
+
const tokens = new TokenCache();
|
|
87
|
+
const key = (c) => createHash("sha256")
|
|
88
|
+
.update(`${c.config.host}\n${c.config.tenant}\n${c.secret.client_id}\n${c.secret.refresh_token}`)
|
|
89
|
+
.digest("hex");
|
|
90
|
+
async function mint(c) {
|
|
91
|
+
const { host, tenant } = c.config;
|
|
92
|
+
const res = await fetchImpl(`https://${host}/ccx/oauth2/${tenant}/token`, {
|
|
93
|
+
method: "POST",
|
|
94
|
+
headers: {
|
|
95
|
+
authorization: `Basic ${Buffer.from(`${c.secret.client_id}:${c.secret.client_secret}`).toString("base64")}`,
|
|
96
|
+
"content-type": "application/x-www-form-urlencoded",
|
|
97
|
+
accept: "application/json",
|
|
98
|
+
},
|
|
99
|
+
body: new URLSearchParams({
|
|
100
|
+
grant_type: "refresh_token",
|
|
101
|
+
refresh_token: c.secret.refresh_token,
|
|
102
|
+
}),
|
|
103
|
+
});
|
|
104
|
+
const raw = await res.text();
|
|
105
|
+
const body = parse(raw);
|
|
106
|
+
if (!res.ok)
|
|
107
|
+
throw new ConnectError(`Workday refused the sign-in (${res.status}${vendorError(body) ? `: ${vendorError(body)}` : ""}). Check the client ID, secret and refresh token, and that the refresh token was made for this API client.`);
|
|
108
|
+
if (typeof body !== "object" || !body || typeof body.access_token !== "string")
|
|
109
|
+
throw new ConnectError("Workday answered the sign-in without a token");
|
|
110
|
+
const expiresIn = Number(body.expires_in);
|
|
111
|
+
return {
|
|
112
|
+
token: body.access_token,
|
|
113
|
+
expiresIn: Number.isFinite(expiresIn) && expiresIn > 60 ? expiresIn : DEFAULT_TOKEN_SECONDS,
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
async function send(c, access, request) {
|
|
117
|
+
const res = await fetchImpl(`https://${c.config.host}${request.path}`, {
|
|
118
|
+
method: request.method,
|
|
119
|
+
headers: {
|
|
120
|
+
authorization: `Bearer ${access}`,
|
|
121
|
+
accept: "application/json",
|
|
122
|
+
...(request.body === undefined ? {} : { "content-type": "application/json" }),
|
|
123
|
+
},
|
|
124
|
+
body: request.body === undefined ? undefined : JSON.stringify(request.body),
|
|
125
|
+
});
|
|
126
|
+
const raw = await res.text();
|
|
127
|
+
return {
|
|
128
|
+
status: res.status,
|
|
129
|
+
data: raw ? parse(raw) : null,
|
|
130
|
+
headers: Object.fromEntries(res.headers),
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
const call = async (c, request) => {
|
|
134
|
+
if (!HOST.test(c.config.host ?? "") || !TENANT.test(c.config.tenant ?? ""))
|
|
135
|
+
throw new Error("Workday connection has no host or tenant");
|
|
136
|
+
if (!request.path.startsWith("/ccx/"))
|
|
137
|
+
throw new Error(`Not a Workday path: ${request.path}`);
|
|
138
|
+
let res = await send(c, await tokens.get(key(c), () => mint(c)), request);
|
|
139
|
+
if (res.status === 401) {
|
|
140
|
+
tokens.forget(key(c));
|
|
141
|
+
res = await send(c, await tokens.get(key(c), () => mint(c)), request);
|
|
142
|
+
}
|
|
143
|
+
return res;
|
|
144
|
+
};
|
|
145
|
+
return {
|
|
146
|
+
async connect(fields) {
|
|
147
|
+
const { host, tenant } = parseEndpoint(fields.endpoint ?? "");
|
|
148
|
+
const clientId = fields.client_id?.trim();
|
|
149
|
+
const clientSecret = fields.client_secret?.trim();
|
|
150
|
+
const refreshToken = fields.refresh_token?.trim();
|
|
151
|
+
if (!clientId || !clientSecret || !refreshToken)
|
|
152
|
+
throw new ConnectError("Enter the client ID, client secret and refresh token");
|
|
153
|
+
const reports = parseReports(fields.reports ?? "", host, tenant);
|
|
154
|
+
const orgColumn = fields.report_org_column?.trim() ?? "";
|
|
155
|
+
if (orgColumn && !PROMPT.test(orgColumn))
|
|
156
|
+
throw new ConnectError(`${orgColumn} is not a report column name`);
|
|
157
|
+
const conn = {
|
|
158
|
+
config: {
|
|
159
|
+
host,
|
|
160
|
+
tenant,
|
|
161
|
+
account: `${host}/${tenant}`,
|
|
162
|
+
reports: JSON.stringify(reports),
|
|
163
|
+
...(orgColumn ? { reportOrgColumn: orgColumn } : {}),
|
|
164
|
+
},
|
|
165
|
+
secret: { client_id: clientId, client_secret: clientSecret, refresh_token: refreshToken },
|
|
166
|
+
};
|
|
167
|
+
tokens.forget(key(conn));
|
|
168
|
+
await tokens.get(key(conn), () => mint(conn));
|
|
169
|
+
return { ...conn, accountLabel: `${tenant} (${host})` };
|
|
170
|
+
},
|
|
171
|
+
call,
|
|
172
|
+
checks: {
|
|
173
|
+
// One worker read proves the account reaches staffing data; nothing of it is shown.
|
|
174
|
+
async tenant(connection) {
|
|
175
|
+
const res = await call(connection, {
|
|
176
|
+
method: "GET",
|
|
177
|
+
path: `/ccx/api/staffing/v7/${connection.config.tenant}/workers?limit=1`,
|
|
178
|
+
});
|
|
179
|
+
if (res.status === 401 || res.status === 403)
|
|
180
|
+
throw new ConnectError(`Workday refused to list workers (${res.status}). Give the account's security group View on Worker Data: Public Worker Reports, activate the pending security policy changes, then check again.`);
|
|
181
|
+
if (res.status < 200 || res.status >= 300)
|
|
182
|
+
throw new ConnectError(`Workday answered ${res.status}: ${vendorError(res.data) || "no reason given"}`);
|
|
183
|
+
return { values: [`${connection.config.tenant} (${connection.config.host})`] };
|
|
184
|
+
},
|
|
185
|
+
async reports(connection) {
|
|
186
|
+
return { values: connectedReports(connection.config).map((r) => r.name) };
|
|
187
|
+
},
|
|
188
|
+
},
|
|
189
|
+
};
|
|
190
|
+
}
|
|
191
|
+
function parse(raw) {
|
|
192
|
+
try {
|
|
193
|
+
return JSON.parse(raw);
|
|
194
|
+
}
|
|
195
|
+
catch {
|
|
196
|
+
return raw;
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
//# sourceMappingURL=vendor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vendor.js","sourceRoot":"","sources":["../../../connectors/workday/vendor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export declare const brandingSchema: z.ZodObject<{
|
|
3
|
+
productName: z.ZodDefault<z.ZodString>;
|
|
4
|
+
logoUrl: z.ZodOptional<z.ZodURL>;
|
|
5
|
+
resourcePrefix: z.ZodDefault<z.ZodString>;
|
|
6
|
+
microsoft: z.ZodDefault<z.ZodObject<{
|
|
7
|
+
appName: z.ZodDefault<z.ZodString>;
|
|
8
|
+
mailboxGroup: z.ZodDefault<z.ZodString>;
|
|
9
|
+
mailboxGroupAlias: z.ZodDefault<z.ZodString>;
|
|
10
|
+
botRole: z.ZodDefault<z.ZodString>;
|
|
11
|
+
}, z.core.$strict>>;
|
|
12
|
+
teams: z.ZodDefault<z.ZodObject<{
|
|
13
|
+
resourceGroup: z.ZodDefault<z.ZodString>;
|
|
14
|
+
developer: z.ZodOptional<z.ZodObject<{
|
|
15
|
+
name: z.ZodString;
|
|
16
|
+
websiteUrl: z.ZodURL;
|
|
17
|
+
privacyUrl: z.ZodURL;
|
|
18
|
+
termsOfUseUrl: z.ZodURL;
|
|
19
|
+
}, z.core.$strict>>;
|
|
20
|
+
}, z.core.$strict>>;
|
|
21
|
+
}, z.core.$strict>;
|
|
22
|
+
export type Branding = z.infer<typeof brandingSchema>;
|
|
23
|
+
export type BrandingInput = z.input<typeof brandingSchema>;
|
|
24
|
+
export declare const DEFAULT_BRANDING: Branding;
|
|
25
|
+
export declare function parseBranding(raw: unknown): Branding;
|
|
26
|
+
export declare const brand: () => {
|
|
27
|
+
productName: string;
|
|
28
|
+
resourcePrefix: string;
|
|
29
|
+
microsoft: {
|
|
30
|
+
appName: string;
|
|
31
|
+
mailboxGroup: string;
|
|
32
|
+
mailboxGroupAlias: string;
|
|
33
|
+
botRole: string;
|
|
34
|
+
};
|
|
35
|
+
teams: {
|
|
36
|
+
resourceGroup: string;
|
|
37
|
+
developer?: {
|
|
38
|
+
name: string;
|
|
39
|
+
websiteUrl: string;
|
|
40
|
+
privacyUrl: string;
|
|
41
|
+
termsOfUseUrl: string;
|
|
42
|
+
} | undefined;
|
|
43
|
+
};
|
|
44
|
+
logoUrl?: string | undefined;
|
|
45
|
+
};
|
|
46
|
+
export declare function setBranding(b: Branding): void;
|
|
47
|
+
/** Fills `{brand.a.b}` placeholders; one naming no text field of the branding throws. */
|
|
48
|
+
export declare function fillBrand(text: string, b?: Branding): string;
|
|
49
|
+
/** fillBrand over every string in a parsed JSON value. */
|
|
50
|
+
export declare function fillBrandDeep<T>(value: T, b?: Branding): T;
|
|
51
|
+
/** The Teams manifest's developer, which a package needs. */
|
|
52
|
+
export declare function teamsDeveloper(b?: Branding): {
|
|
53
|
+
name: string;
|
|
54
|
+
websiteUrl: string;
|
|
55
|
+
privacyUrl: string;
|
|
56
|
+
termsOfUseUrl: string;
|
|
57
|
+
};
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export type NewCertificate = {
|
|
2
|
+
certificate: string;
|
|
3
|
+
privateKey: string;
|
|
4
|
+
};
|
|
5
|
+
export declare function newCertificate(commonName: string, now?: Date): NewCertificate;
|
|
6
|
+
/** What the admin sees of a certificate: Entra lists it by its SHA-1 thumbprint. */
|
|
7
|
+
export declare function describeCertificate(pem: string): {
|
|
8
|
+
thumbprint: string;
|
|
9
|
+
expiresAt: string;
|
|
10
|
+
};
|
|
11
|
+
/** A signed client assertion (RFC 7523) for Microsoft's token endpoint, valid five minutes.
|
|
12
|
+
* Microsoft pairs the x5t#S256 header with PS256 (RSA-PSS). */
|
|
13
|
+
export declare function clientAssertion(input: {
|
|
14
|
+
clientId: string;
|
|
15
|
+
tokenUrl: string;
|
|
16
|
+
certificate: string;
|
|
17
|
+
privateKey: string;
|
|
18
|
+
now?: number;
|
|
19
|
+
}): string;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import type { CallToolResult, McpServer } from "@modelcontextprotocol/server";
|
|
2
|
+
import { type Limits, type VendorRequest, type VendorResponse } from "./types.js";
|
|
3
|
+
export type ToolContext = {
|
|
4
|
+
limits: Limits;
|
|
5
|
+
/** The connection's settings, e.g. the sites it was connected with. */
|
|
6
|
+
config: Record<string, string>;
|
|
7
|
+
call(request: VendorRequest): Promise<VendorResponse>;
|
|
8
|
+
/** Per tool: what to add to a 403 from the app (its capability's `forbidden`). */
|
|
9
|
+
forbidden?: Record<string, string>;
|
|
10
|
+
audit(entry: {
|
|
11
|
+
tool: string;
|
|
12
|
+
target: string | null;
|
|
13
|
+
decision: "allowed" | "denied" | "failed";
|
|
14
|
+
reason: string | null;
|
|
15
|
+
vendorStatus: number | null;
|
|
16
|
+
}): Promise<void>;
|
|
17
|
+
};
|
|
18
|
+
export type Toolset = {
|
|
19
|
+
names: readonly string[];
|
|
20
|
+
register(server: McpServer, ctx: ToolContext, allowed: ReadonlySet<string>): void;
|
|
21
|
+
};
|
|
22
|
+
/** One app's tools from several sets, e.g. SharePoint's files and spreadsheets. */
|
|
23
|
+
export declare const toolsets: (...sets: Toolset[]) => Toolset;
|
|
24
|
+
export declare class Denied extends Error {
|
|
25
|
+
}
|
|
26
|
+
export declare class VendorFailed extends Error {
|
|
27
|
+
readonly status: number;
|
|
28
|
+
readonly hintTool?: string | undefined;
|
|
29
|
+
constructor(status: number, message: string, hintTool?: string | undefined);
|
|
30
|
+
}
|
|
31
|
+
export declare function listLimit(limits: Limits, id: string): string[] | null;
|
|
32
|
+
export declare function mapLimit(limits: Limits, id: string): Record<string, string> | null;
|
|
33
|
+
export declare function textLimit(limits: Limits, id: string): string | null;
|
|
34
|
+
export declare const argumentsTarget: (args: unknown) => string | null;
|
|
35
|
+
export declare const json: (data: unknown) => CallToolResult;
|
|
36
|
+
export declare function audited(ctx: ToolContext, tool: string, target: string | null, run: (vendorStatus: (status: number) => void, retarget: (sent: string) => void) => Promise<CallToolResult>): Promise<CallToolResult>;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { ConnectError } from "./types.js";
|
|
1
2
|
/** One app's tools from several sets, e.g. SharePoint's files and spreadsheets. */
|
|
2
3
|
export const toolsets = (...sets) => ({
|
|
3
4
|
names: sets.flatMap((s) => s.names),
|
|
@@ -59,7 +60,9 @@ export async function audited(ctx, tool, target, run) {
|
|
|
59
60
|
try {
|
|
60
61
|
result = await run((s) => (status = s), (sent) => (target = sent));
|
|
61
62
|
}
|
|
62
|
-
catch (
|
|
63
|
+
catch (caught) {
|
|
64
|
+
// A ConnectError (an app's redirect, an unreachable address) is written for people to read.
|
|
65
|
+
const error = caught instanceof ConnectError ? new VendorFailed(502, caught.message) : caught;
|
|
63
66
|
if (error instanceof Denied) {
|
|
64
67
|
await ctx.audit({
|
|
65
68
|
tool,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"common.js","sourceRoot":"","sources":["../../../../packages/connector-kit/src/common.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"common.js","sourceRoot":"","sources":["../../../../packages/connector-kit/src/common.ts"],"names":[],"mappings":"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"}
|