@arbium/enterprise-agent-connect 0.0.0-stage → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (137) hide show
  1. package/LICENSE +202 -0
  2. package/README.md +117 -2
  3. package/dist/connectors/dell-techdirect/connector.json +39 -0
  4. package/dist/connectors/dell-techdirect/index.js +7 -0
  5. package/dist/connectors/dell-techdirect/index.js.map +1 -0
  6. package/dist/connectors/dell-techdirect/tools.js +49 -0
  7. package/dist/connectors/dell-techdirect/tools.js.map +1 -0
  8. package/dist/connectors/dell-techdirect/vendor.js +57 -0
  9. package/dist/connectors/dell-techdirect/vendor.js.map +1 -0
  10. package/dist/connectors/entra/connector.json +85 -0
  11. package/dist/connectors/entra/index.js +4 -0
  12. package/dist/connectors/entra/index.js.map +1 -0
  13. package/dist/connectors/entra/tools.js +262 -0
  14. package/dist/connectors/entra/tools.js.map +1 -0
  15. package/dist/connectors/fedex/connector.json +118 -0
  16. package/dist/connectors/fedex/index.js +7 -0
  17. package/dist/connectors/fedex/index.js.map +1 -0
  18. package/dist/connectors/fedex/tools.js +152 -0
  19. package/dist/connectors/fedex/tools.js.map +1 -0
  20. package/dist/connectors/fedex/vendor.js +98 -0
  21. package/dist/connectors/fedex/vendor.js.map +1 -0
  22. package/dist/connectors/http/index.js +235 -0
  23. package/dist/connectors/http/index.js.map +1 -0
  24. package/dist/connectors/intune/connector.json +106 -0
  25. package/dist/connectors/intune/index.js +4 -0
  26. package/dist/connectors/intune/index.js.map +1 -0
  27. package/dist/connectors/intune/tools.js +416 -0
  28. package/dist/connectors/intune/tools.js.map +1 -0
  29. package/dist/connectors/jira/connector.json +129 -0
  30. package/dist/connectors/jira/index.js +7 -0
  31. package/dist/connectors/jira/index.js.map +1 -0
  32. package/dist/connectors/jira/jql.js +67 -0
  33. package/dist/connectors/jira/jql.js.map +1 -0
  34. package/dist/connectors/jira/tools.js +464 -0
  35. package/dist/connectors/jira/tools.js.map +1 -0
  36. package/dist/connectors/jira/vendor.js +94 -0
  37. package/dist/connectors/jira/vendor.js.map +1 -0
  38. package/dist/connectors/microsoft/client.js +434 -0
  39. package/dist/connectors/microsoft/client.js.map +1 -0
  40. package/dist/connectors/microsoft/provider.json +118 -0
  41. package/dist/connectors/outlook-calendar/connector.json +136 -0
  42. package/dist/connectors/outlook-calendar/index.js +4 -0
  43. package/dist/connectors/outlook-calendar/index.js.map +1 -0
  44. package/dist/connectors/outlook-calendar/tools.js +398 -0
  45. package/dist/connectors/outlook-calendar/tools.js.map +1 -0
  46. package/dist/connectors/outlook-mail/connector.json +154 -0
  47. package/dist/connectors/outlook-mail/index.js +4 -0
  48. package/dist/connectors/outlook-mail/index.js.map +1 -0
  49. package/dist/connectors/outlook-mail/tools.js +236 -0
  50. package/dist/connectors/outlook-mail/tools.js.map +1 -0
  51. package/dist/connectors/salesforce/connector.json +122 -0
  52. package/dist/connectors/salesforce/index.js +7 -0
  53. package/dist/connectors/salesforce/index.js.map +1 -0
  54. package/dist/connectors/salesforce/soql.js +60 -0
  55. package/dist/connectors/salesforce/soql.js.map +1 -0
  56. package/dist/connectors/salesforce/tools.js +234 -0
  57. package/dist/connectors/salesforce/tools.js.map +1 -0
  58. package/dist/connectors/salesforce/vendor.js +107 -0
  59. package/dist/connectors/salesforce/vendor.js.map +1 -0
  60. package/dist/connectors/sharepoint-files/connector.json +194 -0
  61. package/dist/connectors/sharepoint-files/excel.js +300 -0
  62. package/dist/connectors/sharepoint-files/excel.js.map +1 -0
  63. package/dist/connectors/sharepoint-files/index.js +12 -0
  64. package/dist/connectors/sharepoint-files/index.js.map +1 -0
  65. package/dist/connectors/sharepoint-files/tools.js +365 -0
  66. package/dist/connectors/sharepoint-files/tools.js.map +1 -0
  67. package/dist/connectors/sharepoint-files/vendor.js +167 -0
  68. package/dist/connectors/sharepoint-files/vendor.js.map +1 -0
  69. package/dist/connectors/teams/connector.json +298 -0
  70. package/dist/connectors/teams/index.js +5 -0
  71. package/dist/connectors/teams/index.js.map +1 -0
  72. package/dist/connectors/teams/tools.js +391 -0
  73. package/dist/connectors/teams/tools.js.map +1 -0
  74. package/dist/packages/connector-kit/src/branding.js +102 -0
  75. package/dist/packages/connector-kit/src/branding.js.map +1 -0
  76. package/dist/packages/connector-kit/src/certificate.js +84 -0
  77. package/dist/packages/connector-kit/src/certificate.js.map +1 -0
  78. package/dist/packages/connector-kit/src/common.js +107 -0
  79. package/dist/packages/connector-kit/src/common.js.map +1 -0
  80. package/dist/packages/connector-kit/src/connector.js +492 -0
  81. package/dist/packages/connector-kit/src/connector.js.map +1 -0
  82. package/dist/packages/connector-kit/src/oauth.js +79 -0
  83. package/dist/packages/connector-kit/src/oauth.js.map +1 -0
  84. package/dist/packages/connector-kit/src/types.js +20 -0
  85. package/dist/packages/connector-kit/src/types.js.map +1 -0
  86. package/dist/packages/server/migrations/0001_tables.sql +268 -0
  87. package/dist/packages/server/migrations/0002_organizations.sql +72 -0
  88. package/dist/packages/server/migrations/0003_drop_unused.sql +3 -0
  89. package/dist/packages/server/migrations/0004_trigger_runners.sql +15 -0
  90. package/dist/packages/server/migrations/0005_run_runner.sql +3 -0
  91. package/dist/packages/server/migrations/0006_approvals.sql +36 -0
  92. package/dist/packages/server/migrations/rollback/to-legacy.sql +87 -0
  93. package/dist/packages/server/src/api.js +684 -0
  94. package/dist/packages/server/src/api.js.map +1 -0
  95. package/dist/packages/server/src/app.js +444 -0
  96. package/dist/packages/server/src/app.js.map +1 -0
  97. package/dist/packages/server/src/builtin.js +24 -0
  98. package/dist/packages/server/src/builtin.js.map +1 -0
  99. package/dist/packages/server/src/consent.js +36 -0
  100. package/dist/packages/server/src/consent.js.map +1 -0
  101. package/dist/packages/server/src/index.js +129 -0
  102. package/dist/packages/server/src/index.js.map +1 -0
  103. package/dist/packages/server/src/migrate.js +134 -0
  104. package/dist/packages/server/src/migrate.js.map +1 -0
  105. package/dist/packages/server/src/openapi.js +101 -0
  106. package/dist/packages/server/src/openapi.js.map +1 -0
  107. package/dist/packages/server/src/secrets.js +76 -0
  108. package/dist/packages/server/src/secrets.js.map +1 -0
  109. package/dist/packages/server/src/server.js +69 -0
  110. package/dist/packages/server/src/server.js.map +1 -0
  111. package/dist/packages/server/src/service.js +908 -0
  112. package/dist/packages/server/src/service.js.map +1 -0
  113. package/dist/packages/server/src/store.js +411 -0
  114. package/dist/packages/server/src/store.js.map +1 -0
  115. package/dist/packages/server/src/teams/activity.js +187 -0
  116. package/dist/packages/server/src/teams/activity.js.map +1 -0
  117. package/dist/packages/server/src/teams/admin.js +699 -0
  118. package/dist/packages/server/src/teams/admin.js.map +1 -0
  119. package/dist/packages/server/src/teams/approval.js +118 -0
  120. package/dist/packages/server/src/teams/approval.js.map +1 -0
  121. package/dist/packages/server/src/teams/bot.js +124 -0
  122. package/dist/packages/server/src/teams/bot.js.map +1 -0
  123. package/dist/packages/server/src/teams/claude.js +165 -0
  124. package/dist/packages/server/src/teams/claude.js.map +1 -0
  125. package/dist/packages/server/src/teams/jwt.js +121 -0
  126. package/dist/packages/server/src/teams/jwt.js.map +1 -0
  127. package/dist/packages/server/src/teams/package.js +319 -0
  128. package/dist/packages/server/src/teams/package.js.map +1 -0
  129. package/dist/packages/server/src/teams/provision.js +505 -0
  130. package/dist/packages/server/src/teams/provision.js.map +1 -0
  131. package/dist/packages/server/src/teams/runner.js +143 -0
  132. package/dist/packages/server/src/teams/runner.js.map +1 -0
  133. package/dist/packages/server/src/teams/runtime.js +701 -0
  134. package/dist/packages/server/src/teams/runtime.js.map +1 -0
  135. package/dist/packages/server/src/teams/store.js +507 -0
  136. package/dist/packages/server/src/teams/store.js.map +1 -0
  137. package/package.json +42 -4
@@ -0,0 +1,143 @@
1
+ import { createHmac } from "node:crypto";
2
+ import { z } from "zod";
3
+ import { brand } from "../../../connector-kit/src/branding.js";
4
+ import { credentialAad } from "../secrets.js";
5
+ import { InvalidInput } from "../service.js";
6
+ import { ConnectError } from "../../../connector-kit/src/types.js";
7
+ import { agentMcpUrl, claudeClient, verifyTrigger, } from "./claude.js";
8
+ // What answers a Teams message once the core decided it should be answered (who may ask, reply
9
+ // mode, the hourly, daily and concurrent caps, the reply token and teams_reply stay in
10
+ // runtime.ts whatever the runner).
11
+ export const CLAUDE_RUNNER = "claude-managed-agents";
12
+ export const triggerAad = (org, agentId) => credentialAad(org, `teams-trigger:${agentId}`);
13
+ /** The trigger's signing secret, opened, or null when it has none. */
14
+ export function openTriggerSecret(key, org, trigger) {
15
+ if (!trigger.secret || !trigger.secretKeyId)
16
+ return null;
17
+ return String(key.open({ ciphertext: trigger.secret, keyId: trigger.secretKeyId }, triggerAad(org, trigger.agentId)).secret);
18
+ }
19
+ /** Claude Managed Agents with the organization's own Claude key (providers row anthropic). Its
20
+ * settings are the trigger's managedAgentId, environmentId and vaultIds. */
21
+ export const claudeManagedAgents = (claude = claudeClient) => (ctx) => {
22
+ async function claudeFor(org) {
23
+ const row = await ctx.teams.claudeKey(org);
24
+ if (!row)
25
+ return null;
26
+ const { api_key } = ctx.key.open({ ciphertext: row.credential, keyId: row.credentialKeyId }, credentialAad(org, "provider:anthropic"));
27
+ return claude(api_key);
28
+ }
29
+ async function need(org) {
30
+ const c = await claudeFor(org);
31
+ if (!c)
32
+ throw new ConnectError("Set your organization's Claude API key first");
33
+ return c;
34
+ }
35
+ return {
36
+ id: CLAUDE_RUNNER,
37
+ settings: z.strictObject({}),
38
+ async unready(org) {
39
+ return (await ctx.teams.claudeKey(org)) ? null : "organization has no Claude API key";
40
+ },
41
+ async verify(trigger, org, _secret, when) {
42
+ if (!trigger.managedAgentId || !trigger.environmentId)
43
+ throw new InvalidInput("Choose the Claude agent and environment");
44
+ if (!ctx.publicUrl)
45
+ throw new ConnectError("This deployment has no public address");
46
+ const c = await need(org);
47
+ await verifyTrigger(c, ctx.publicUrl, trigger.agentId, {
48
+ managedAgentId: trigger.managedAgentId,
49
+ vaultIds: trigger.vaultIds,
50
+ });
51
+ if (when === "save" && !(await c.environmentExists(trigger.environmentId)))
52
+ throw new ConnectError("Claude has no environment with that id under your organization's key");
53
+ },
54
+ async start(input) {
55
+ return (await need(input.org)).createSession({
56
+ agentId: input.trigger.managedAgentId,
57
+ environmentId: input.trigger.environmentId,
58
+ vaultIds: input.trigger.vaultIds,
59
+ budgetCents: input.budgetCents,
60
+ metadata: {
61
+ source: `${brand().resourcePrefix}-teams`,
62
+ agent: input.agentId,
63
+ bot: input.botId,
64
+ run: input.runId,
65
+ requested_by: input.requestedBy,
66
+ },
67
+ text: input.text,
68
+ });
69
+ },
70
+ async continue(sessionId, input) {
71
+ await (await need(input.org)).sendMessage(sessionId, input.text, input.budgetCents);
72
+ },
73
+ async state(run, org) {
74
+ const c = await claudeFor(org);
75
+ if (!c)
76
+ return { gone: "Claude API key removed" };
77
+ return (await c.session(run.sessionId)) ?? { gone: "The Claude session is gone" };
78
+ },
79
+ // Without the key there is nothing left to stop it with.
80
+ async stop(sessionId, org) {
81
+ await (await claudeFor(org))?.interrupt(sessionId);
82
+ },
83
+ };
84
+ };
85
+ export const SIGNATURE_HEADER = "x-agent-connect-signature";
86
+ /** `t=<unix seconds>,v1=<hex HMAC-SHA256 of "<t>.<body>">`; receivers reject an old `t`. */
87
+ export function signature(secret, body, t = Math.floor(Date.now() / 1000)) {
88
+ return `t=${t},v1=${createHmac("sha256", secret).update(`${t}.${body}`).digest("hex")}`;
89
+ }
90
+ /** A signed POST of the message and its context to the trigger's `url`, for any agent
91
+ * framework. The receiver answers through MCP teams_reply with the reply token and this
92
+ * agent's own key, as a Claude agent does. It reports no cost; the trigger's caps still
93
+ * apply. A run is answered once a reply arrives, and stopped after the turn timeout. */
94
+ export const signedWebhook = (fetchImpl = fetch) => (ctx) => {
95
+ async function post(trigger, secret, payload) {
96
+ if (!secret)
97
+ throw new InvalidInput("Give the webhook a signing secret");
98
+ const body = JSON.stringify(payload);
99
+ const res = await fetchImpl(String(trigger.settings.url), {
100
+ method: "POST",
101
+ headers: {
102
+ "content-type": "application/json",
103
+ [SIGNATURE_HEADER]: signature(secret, body),
104
+ },
105
+ body,
106
+ redirect: "error",
107
+ signal: AbortSignal.timeout(10_000),
108
+ });
109
+ if (!res.ok)
110
+ throw new ConnectError(`The webhook answered ${res.status}`);
111
+ }
112
+ const message = (input) => ({
113
+ type: "message",
114
+ run: input.runId,
115
+ agent: input.agentId,
116
+ bot: input.botId,
117
+ requestedBy: input.requestedBy,
118
+ text: input.text,
119
+ replyToken: input.replyToken,
120
+ mcpUrl: ctx.publicUrl ? agentMcpUrl(ctx.publicUrl, input.agentId) : null,
121
+ });
122
+ return {
123
+ id: "webhook",
124
+ settings: z.strictObject({ url: z.url({ protocol: /^https$/ }) }),
125
+ unready: async () => null,
126
+ async verify(trigger, _org, secret, when) {
127
+ if (when === "save")
128
+ await post(trigger, secret, { type: "ping", agent: trigger.agentId });
129
+ },
130
+ async start(input) {
131
+ await post(input.trigger, input.secret, message(input));
132
+ return `webhook:${input.runId}`;
133
+ },
134
+ async continue(_sessionId, input) {
135
+ await post(input.trigger, input.secret, message(input));
136
+ },
137
+ async state(run) {
138
+ return { status: run.replyCount > 0 ? "idle" : "running", costCents: 0, atBudget: false };
139
+ },
140
+ async stop() { },
141
+ };
142
+ };
143
+ //# sourceMappingURL=runner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runner.js","sourceRoot":"","sources":["../../../../../packages/server/src/teams/runner.ts"],"names":[],"mappings":"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"}