@arbium/enterprise-agent-connect 0.1.1 → 0.1.2-dev.9022f22

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 (231) hide show
  1. package/README.md +164 -12
  2. package/dist/connectors/dell-techdirect/index.d.ts +8 -0
  3. package/dist/connectors/dell-techdirect/tools.d.ts +2 -0
  4. package/dist/connectors/dell-techdirect/vendor.d.ts +6 -0
  5. package/dist/connectors/dynamics-365/connector.json +228 -0
  6. package/dist/connectors/dynamics-365/index.d.ts +8 -0
  7. package/dist/connectors/dynamics-365/index.js +10 -0
  8. package/dist/connectors/dynamics-365/index.js.map +1 -0
  9. package/dist/connectors/dynamics-365/tools.d.ts +35 -0
  10. package/dist/connectors/dynamics-365/tools.js +806 -0
  11. package/dist/connectors/dynamics-365/tools.js.map +1 -0
  12. package/dist/connectors/dynamics-365/vendor.d.ts +9 -0
  13. package/dist/connectors/dynamics-365/vendor.js +110 -0
  14. package/dist/connectors/dynamics-365/vendor.js.map +1 -0
  15. package/dist/connectors/entra/index.d.ts +2 -0
  16. package/dist/connectors/entra/tools.d.ts +14 -0
  17. package/dist/connectors/fedex/index.d.ts +8 -0
  18. package/dist/connectors/fedex/tools.d.ts +3 -0
  19. package/dist/connectors/fedex/vendor.d.ts +7 -0
  20. package/dist/connectors/gong/connector.json +127 -0
  21. package/dist/connectors/gong/index.d.ts +8 -0
  22. package/dist/connectors/gong/index.js +7 -0
  23. package/dist/connectors/gong/index.js.map +1 -0
  24. package/dist/connectors/gong/tools.d.ts +8 -0
  25. package/dist/connectors/gong/tools.js +424 -0
  26. package/dist/connectors/gong/tools.js.map +1 -0
  27. package/dist/connectors/gong/vendor.d.ts +4 -0
  28. package/dist/connectors/gong/vendor.js +89 -0
  29. package/dist/connectors/gong/vendor.js.map +1 -0
  30. package/dist/connectors/http/index.d.ts +34 -0
  31. package/dist/connectors/http/index.js +154 -64
  32. package/dist/connectors/http/index.js.map +1 -1
  33. package/dist/connectors/intune/index.d.ts +2 -0
  34. package/dist/connectors/intune/tools.d.ts +12 -0
  35. package/dist/connectors/jamf/connector.json +182 -0
  36. package/dist/connectors/jamf/index.d.ts +8 -0
  37. package/dist/connectors/jamf/index.js +7 -0
  38. package/dist/connectors/jamf/index.js.map +1 -0
  39. package/dist/connectors/jamf/tools.d.ts +7 -0
  40. package/dist/connectors/jamf/tools.js +659 -0
  41. package/dist/connectors/jamf/tools.js.map +1 -0
  42. package/dist/connectors/jamf/vendor.d.ts +5 -0
  43. package/dist/connectors/jamf/vendor.js +70 -0
  44. package/dist/connectors/jamf/vendor.js.map +1 -0
  45. package/dist/connectors/jira/connector.json +144 -1
  46. package/dist/connectors/jira/index.d.ts +8 -0
  47. package/dist/connectors/jira/jql.d.ts +4 -0
  48. package/dist/connectors/jira/tools.d.ts +3 -0
  49. package/dist/connectors/jira/vendor.d.ts +3 -0
  50. package/dist/connectors/jira/vendor.js +8 -2
  51. package/dist/connectors/jira/vendor.js.map +1 -1
  52. package/dist/connectors/microsoft/client.d.ts +66 -0
  53. package/dist/connectors/microsoft/client.js +26 -8
  54. package/dist/connectors/microsoft/client.js.map +1 -1
  55. package/dist/connectors/netsuite/connector.json +317 -0
  56. package/dist/connectors/netsuite/index.d.ts +8 -0
  57. package/dist/connectors/netsuite/index.js +7 -0
  58. package/dist/connectors/netsuite/index.js.map +1 -0
  59. package/dist/connectors/netsuite/tools.d.ts +24 -0
  60. package/dist/connectors/netsuite/tools.js +447 -0
  61. package/dist/connectors/netsuite/tools.js.map +1 -0
  62. package/dist/connectors/netsuite/vendor.d.ts +26 -0
  63. package/dist/connectors/netsuite/vendor.js +247 -0
  64. package/dist/connectors/netsuite/vendor.js.map +1 -0
  65. package/dist/connectors/odata/index.d.ts +33 -0
  66. package/dist/connectors/odata/index.js +460 -0
  67. package/dist/connectors/odata/index.js.map +1 -0
  68. package/dist/connectors/okta/connector.json +194 -0
  69. package/dist/connectors/okta/index.d.ts +8 -0
  70. package/dist/connectors/okta/index.js +7 -0
  71. package/dist/connectors/okta/index.js.map +1 -0
  72. package/dist/connectors/okta/tools.d.ts +6 -0
  73. package/dist/connectors/okta/tools.js +429 -0
  74. package/dist/connectors/okta/tools.js.map +1 -0
  75. package/dist/connectors/okta/vendor.d.ts +14 -0
  76. package/dist/connectors/okta/vendor.js +204 -0
  77. package/dist/connectors/okta/vendor.js.map +1 -0
  78. package/dist/connectors/outlook-calendar/index.d.ts +2 -0
  79. package/dist/connectors/outlook-calendar/tools.d.ts +65 -0
  80. package/dist/connectors/outlook-mail/index.d.ts +2 -0
  81. package/dist/connectors/outlook-mail/tools.d.ts +8 -0
  82. package/dist/connectors/salesforce/index.d.ts +8 -0
  83. package/dist/connectors/salesforce/soql.d.ts +3 -0
  84. package/dist/connectors/salesforce/tools.d.ts +9 -0
  85. package/dist/connectors/salesforce/vendor.d.ts +3 -0
  86. package/dist/connectors/salesforce/vendor.js +9 -3
  87. package/dist/connectors/salesforce/vendor.js.map +1 -1
  88. package/dist/connectors/sap-s4hana/connector.json +264 -0
  89. package/dist/connectors/sap-s4hana/index.d.ts +8 -0
  90. package/dist/connectors/sap-s4hana/index.js +7 -0
  91. package/dist/connectors/sap-s4hana/index.js.map +1 -0
  92. package/dist/connectors/sap-s4hana/tools.d.ts +4 -0
  93. package/dist/connectors/sap-s4hana/tools.js +761 -0
  94. package/dist/connectors/sap-s4hana/tools.js.map +1 -0
  95. package/dist/connectors/sap-s4hana/vendor.d.ts +5 -0
  96. package/dist/connectors/sap-s4hana/vendor.js +176 -0
  97. package/dist/connectors/sap-s4hana/vendor.js.map +1 -0
  98. package/dist/connectors/servicenow/connector.json +228 -0
  99. package/dist/connectors/servicenow/index.d.ts +8 -0
  100. package/dist/connectors/servicenow/index.js +7 -0
  101. package/dist/connectors/servicenow/index.js.map +1 -0
  102. package/dist/connectors/servicenow/tools.d.ts +4 -0
  103. package/dist/connectors/servicenow/tools.js +884 -0
  104. package/dist/connectors/servicenow/tools.js.map +1 -0
  105. package/dist/connectors/servicenow/vendor.d.ts +3 -0
  106. package/dist/connectors/servicenow/vendor.js +106 -0
  107. package/dist/connectors/servicenow/vendor.js.map +1 -0
  108. package/dist/connectors/sharepoint-files/excel.d.ts +16 -0
  109. package/dist/connectors/sharepoint-files/index.d.ts +8 -0
  110. package/dist/connectors/sharepoint-files/index.js.map +1 -1
  111. package/dist/connectors/sharepoint-files/tools.d.ts +52 -0
  112. package/dist/connectors/sharepoint-files/vendor.d.ts +11 -0
  113. package/dist/connectors/slack/connector.json +148 -0
  114. package/dist/connectors/slack/index.d.ts +8 -0
  115. package/dist/connectors/slack/index.js +7 -0
  116. package/dist/connectors/slack/index.js.map +1 -0
  117. package/dist/connectors/slack/tools.d.ts +3 -0
  118. package/dist/connectors/slack/tools.js +355 -0
  119. package/dist/connectors/slack/tools.js.map +1 -0
  120. package/dist/connectors/slack/vendor.d.ts +17 -0
  121. package/dist/connectors/slack/vendor.js +189 -0
  122. package/dist/connectors/slack/vendor.js.map +1 -0
  123. package/dist/connectors/soap/index.d.ts +16 -0
  124. package/dist/connectors/soap/index.js +248 -0
  125. package/dist/connectors/soap/index.js.map +1 -0
  126. package/dist/connectors/soap/xml.d.ts +12 -0
  127. package/dist/connectors/soap/xml.js +126 -0
  128. package/dist/connectors/soap/xml.js.map +1 -0
  129. package/dist/connectors/sql/engines.d.ts +58 -0
  130. package/dist/connectors/sql/engines.js +292 -0
  131. package/dist/connectors/sql/engines.js.map +1 -0
  132. package/dist/connectors/sql/index.d.ts +16 -0
  133. package/dist/connectors/sql/index.js +214 -0
  134. package/dist/connectors/sql/index.js.map +1 -0
  135. package/dist/connectors/teams/index.d.ts +2 -0
  136. package/dist/connectors/teams/tools.d.ts +7 -0
  137. package/dist/connectors/teams/tools.js +3 -2
  138. package/dist/connectors/teams/tools.js.map +1 -1
  139. package/dist/connectors/workday/connector.json +188 -0
  140. package/dist/connectors/workday/index.d.ts +8 -0
  141. package/dist/connectors/workday/index.js +7 -0
  142. package/dist/connectors/workday/index.js.map +1 -0
  143. package/dist/connectors/workday/tools.d.ts +33 -0
  144. package/dist/connectors/workday/tools.js +410 -0
  145. package/dist/connectors/workday/tools.js.map +1 -0
  146. package/dist/connectors/workday/vendor.d.ts +18 -0
  147. package/dist/connectors/workday/vendor.js +199 -0
  148. package/dist/connectors/workday/vendor.js.map +1 -0
  149. package/dist/packages/connector-kit/src/branding.d.ts +57 -0
  150. package/dist/packages/connector-kit/src/certificate.d.ts +19 -0
  151. package/dist/packages/connector-kit/src/common.d.ts +36 -0
  152. package/dist/packages/connector-kit/src/common.js +4 -1
  153. package/dist/packages/connector-kit/src/common.js.map +1 -1
  154. package/dist/packages/connector-kit/src/connector.d.ts +1356 -0
  155. package/dist/packages/connector-kit/src/connector.js +634 -53
  156. package/dist/packages/connector-kit/src/connector.js.map +1 -1
  157. package/dist/packages/connector-kit/src/fetch.d.ts +6 -0
  158. package/dist/packages/connector-kit/src/fetch.js +44 -0
  159. package/dist/packages/connector-kit/src/fetch.js.map +1 -0
  160. package/dist/packages/connector-kit/src/index.d.ts +5 -0
  161. package/dist/packages/connector-kit/src/index.js +6 -0
  162. package/dist/packages/connector-kit/src/index.js.map +1 -0
  163. package/dist/packages/connector-kit/src/oauth.d.ts +15 -0
  164. package/dist/packages/connector-kit/src/oauth.js +25 -6
  165. package/dist/packages/connector-kit/src/oauth.js.map +1 -1
  166. package/dist/packages/connector-kit/src/types.d.ts +87 -0
  167. package/dist/packages/connector-kit/src/types.js.map +1 -1
  168. package/dist/packages/server/migrations/0007_app_events.sql +110 -0
  169. package/dist/packages/server/migrations/rollback/to-legacy.sql +3 -0
  170. package/dist/packages/server/src/api.d.ts +3730 -0
  171. package/dist/packages/server/src/api.js +137 -1
  172. package/dist/packages/server/src/api.js.map +1 -1
  173. package/dist/packages/server/src/app.d.ts +23 -0
  174. package/dist/packages/server/src/app.js +24 -1
  175. package/dist/packages/server/src/app.js.map +1 -1
  176. package/dist/packages/server/src/builtin.d.ts +5 -0
  177. package/dist/packages/server/src/builtin.js +18 -0
  178. package/dist/packages/server/src/builtin.js.map +1 -1
  179. package/dist/packages/server/src/consent.d.ts +27 -0
  180. package/dist/packages/server/src/events/admin.d.ts +156 -0
  181. package/dist/packages/server/src/events/admin.js +255 -0
  182. package/dist/packages/server/src/events/admin.js.map +1 -0
  183. package/dist/packages/server/src/events/deliver.d.ts +43 -0
  184. package/dist/packages/server/src/events/deliver.js +129 -0
  185. package/dist/packages/server/src/events/deliver.js.map +1 -0
  186. package/dist/packages/server/src/events/runtime.d.ts +28 -0
  187. package/dist/packages/server/src/events/runtime.js +400 -0
  188. package/dist/packages/server/src/events/runtime.js.map +1 -0
  189. package/dist/packages/server/src/events/store.d.ts +172 -0
  190. package/dist/packages/server/src/events/store.js +275 -0
  191. package/dist/packages/server/src/events/store.js.map +1 -0
  192. package/dist/packages/server/src/index.d.ts +40 -0
  193. package/dist/packages/server/src/index.js +68 -11
  194. package/dist/packages/server/src/index.js.map +1 -1
  195. package/dist/packages/server/src/migrate.d.ts +11 -0
  196. package/dist/packages/server/src/openapi.d.ts +4 -0
  197. package/dist/packages/server/src/openapi.js +2 -2
  198. package/dist/packages/server/src/openapi.js.map +1 -1
  199. package/dist/packages/server/src/queue.d.ts +10 -0
  200. package/dist/packages/server/src/queue.js +45 -0
  201. package/dist/packages/server/src/queue.js.map +1 -0
  202. package/dist/packages/server/src/secrets.d.ts +19 -0
  203. package/dist/packages/server/src/server.d.ts +1 -0
  204. package/dist/packages/server/src/server.js +14 -1
  205. package/dist/packages/server/src/server.js.map +1 -1
  206. package/dist/packages/server/src/service.d.ts +767 -0
  207. package/dist/packages/server/src/service.js +19 -3
  208. package/dist/packages/server/src/service.js.map +1 -1
  209. package/dist/packages/server/src/store.d.ts +157 -0
  210. package/dist/packages/server/src/store.js +4 -0
  211. package/dist/packages/server/src/store.js.map +1 -1
  212. package/dist/packages/server/src/teams/activity.d.ts +123 -0
  213. package/dist/packages/server/src/teams/activity.js +6 -5
  214. package/dist/packages/server/src/teams/activity.js.map +1 -1
  215. package/dist/packages/server/src/teams/admin.d.ts +335 -0
  216. package/dist/packages/server/src/teams/admin.js +1 -1
  217. package/dist/packages/server/src/teams/admin.js.map +1 -1
  218. package/dist/packages/server/src/teams/approval.d.ts +57 -0
  219. package/dist/packages/server/src/teams/bot.d.ts +25 -0
  220. package/dist/packages/server/src/teams/claude.d.ts +46 -0
  221. package/dist/packages/server/src/teams/jwt.d.ts +17 -0
  222. package/dist/packages/server/src/teams/package.d.ts +79 -0
  223. package/dist/packages/server/src/teams/provision.d.ts +84 -0
  224. package/dist/packages/server/src/teams/runner.d.ts +80 -0
  225. package/dist/packages/server/src/teams/runner.js +50 -6
  226. package/dist/packages/server/src/teams/runner.js.map +1 -1
  227. package/dist/packages/server/src/teams/runtime.d.ts +91 -0
  228. package/dist/packages/server/src/teams/runtime.js +25 -47
  229. package/dist/packages/server/src/teams/runtime.js.map +1 -1
  230. package/dist/packages/server/src/teams/store.d.ts +233 -0
  231. package/package.json +28 -2
@@ -0,0 +1,275 @@
1
+ import { tables } from "../store.js";
2
+ // Postgres for app events: each organization's subscriptions, the inbound queue, each agent's
3
+ // event triggers and the runs they started (migrations/0007_app_events.sql).
4
+ const iso = (column) => `to_char(${column} at time zone 'UTC', 'YYYY-MM-DD"T"HH24:MI:SS.MS"Z"')`;
5
+ const SUBSCRIPTION = `id::text, organization_id::text as "organizationId",
6
+ connector_id as "connectorId", source, secret, secret_key_id as "secretKeyId", filter,
7
+ interval_seconds as "intervalSeconds", cursor, ${iso("polled_at")} as "polledAt",
8
+ last_error as "lastError", registered, created_by as "createdBy",
9
+ ${iso("created_at")} as "createdAt"`;
10
+ const TRIGGER = `t.id::text, t.agent_id::text as "agentId", t.connector_id as "connectorId",
11
+ t.enabled, t.event_types as "eventTypes", t.conditions, t.prompt, t.runner, t.settings,
12
+ t.secret, t.secret_key_id as "secretKeyId", t.managed_agent_id as "managedAgentId",
13
+ t.environment_id as "environmentId", t.vault_ids as "vaultIds",
14
+ t.budget_cents as "budgetCents", t.max_runs_per_hour as "maxRunsPerHour",
15
+ t.max_cents_per_day as "maxCentsPerDay", t.max_concurrent as "maxConcurrent",
16
+ t.updated_by as "updatedBy", ${iso("t.updated_at")} as "updatedAt"`;
17
+ const RUN = `r.id::text, r.agent_id::text as "agentId", r.trigger_id::text as "triggerId",
18
+ t.connector_id as "connectorId", r.event_type as "eventType", r.delivery_id as "deliveryId",
19
+ r.runner, r.session_id as "sessionId", r.state, r.error, r.cost_cents as "costCents",
20
+ ${iso("r.started_at")} as "startedAt", ${iso("r.finished_at")} as "finishedAt"`;
21
+ export function createEventsStore(sql, schema) {
22
+ const t = tables(sql, schema);
23
+ return {
24
+ // ---- subscriptions ----
25
+ // Null when the organization already subscribed to the app.
26
+ async createSubscription(input) {
27
+ const [row] = await sql.unsafe(`insert into ${t.event_subscriptions}
28
+ (id, organization_id, connector_id, source, secret, secret_key_id, filter,
29
+ interval_seconds, cursor, created_by)
30
+ values ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10)
31
+ on conflict (organization_id, connector_id) do nothing returning ${SUBSCRIPTION}`, [
32
+ input.id,
33
+ input.organizationId,
34
+ input.connectorId,
35
+ input.source,
36
+ input.secret,
37
+ input.secretKeyId,
38
+ input.filter,
39
+ input.intervalSeconds,
40
+ input.cursor,
41
+ input.createdBy,
42
+ ]);
43
+ return row ?? null;
44
+ },
45
+ async subscription(id) {
46
+ const [row] = await sql.unsafe(`select ${SUBSCRIPTION} from ${t.event_subscriptions} where id = $1`, [id]);
47
+ return row ?? null;
48
+ },
49
+ async subscriptions(org) {
50
+ return sql.unsafe(`select ${SUBSCRIPTION} from ${t.event_subscriptions}
51
+ where organization_id = $1 order by connector_id`, [org]);
52
+ },
53
+ async deleteSubscription(org, id) {
54
+ const [row] = await sql.unsafe(`delete from ${t.event_subscriptions} where organization_id = $1 and id = $2
55
+ returning ${SUBSCRIPTION}`, [org, id]);
56
+ return row ?? null;
57
+ },
58
+ async setSecret(org, id, secret, keyId) {
59
+ const rows = await sql `
60
+ update ${t.event_subscriptions} set secret = ${secret}, secret_key_id = ${keyId}
61
+ where organization_id = ${org} and id = ${id} and source = 'webhook' returning id`;
62
+ return rows.length > 0;
63
+ },
64
+ async setRegistered(id, registered) {
65
+ await sql `update ${t.event_subscriptions} set registered = ${registered} where id = ${id}`;
66
+ },
67
+ // Polls whose interval has passed since they last ran.
68
+ async duePolls() {
69
+ return sql.unsafe(`select ${SUBSCRIPTION} from ${t.event_subscriptions}
70
+ where source = 'poll'
71
+ and (polled_at is null
72
+ or polled_at < now() - make_interval(secs => interval_seconds))
73
+ order by polled_at nulls first`);
74
+ },
75
+ async polled(id, cursor, error) {
76
+ await sql `
77
+ update ${t.event_subscriptions}
78
+ set polled_at = now(), cursor = coalesce(${cursor}, cursor), last_error = ${error}
79
+ where id = ${id}`;
80
+ },
81
+ // During a key rotation: the secrets still sealed with another key than `keyId`.
82
+ async staleSecrets(keyId) {
83
+ const [subscriptions, triggers] = await Promise.all([
84
+ sql `
85
+ select s.id::text, s.organization_id::text as "organizationId", s.secret,
86
+ s.secret_key_id as "secretKeyId"
87
+ from ${t.event_subscriptions} s
88
+ where s.secret is not null and s.secret_key_id <> ${keyId}`,
89
+ sql `
90
+ select t.id::text, a.organization_id::text as "organizationId",
91
+ t.agent_id::text as "agentId", t.connector_id as "connectorId", t.secret,
92
+ t.secret_key_id as "secretKeyId"
93
+ from ${t.event_triggers} t join ${t.agents} a on a.id = t.agent_id
94
+ where t.secret is not null and t.secret_key_id <> ${keyId}`,
95
+ ]);
96
+ return { subscriptions, triggers };
97
+ },
98
+ // Only over the secret read: one replaced meanwhile stays.
99
+ async reseal(table, id, was, secret, keyId) {
100
+ const rows = await sql `
101
+ update ${t[table]} set secret = ${secret}, secret_key_id = ${keyId}
102
+ where id = ${id} and secret = ${was} returning id`;
103
+ return rows.length > 0;
104
+ },
105
+ // ---- the queue ----
106
+ // Null when this delivery was already received (a retry or a replay).
107
+ async insertEvent(input) {
108
+ const [row] = await sql `
109
+ insert into ${t.app_events}
110
+ (subscription_id, delivery_id, event_type, payload, payload_key_id)
111
+ values (${input.subscriptionId}, ${input.deliveryId}, ${input.eventType},
112
+ ${input.payload}, ${input.payloadKeyId})
113
+ on conflict (subscription_id, delivery_id) do nothing returning id::text`;
114
+ return row?.id ?? null;
115
+ },
116
+ // The oldest pending event, or one whose worker died. Never the same one to two workers.
117
+ async claimEvent() {
118
+ const [row] = await sql.unsafe(`with claimed as (
119
+ update ${t.app_events} set state = 'processing', claimed_at = now()
120
+ where id = (
121
+ select id from ${t.app_events}
122
+ where state = 'pending'
123
+ or (state = 'processing' and claimed_at < now() - interval '10 minutes')
124
+ order by id for update skip locked limit 1)
125
+ returning *)
126
+ select c.id::text, c.subscription_id::text as "subscriptionId",
127
+ s.organization_id::text as "organizationId", s.connector_id as "connectorId",
128
+ c.delivery_id as "deliveryId", c.event_type as "eventType", c.payload,
129
+ c.payload_key_id as "payloadKeyId"
130
+ from claimed c join ${t.event_subscriptions} s on s.id = c.subscription_id`);
131
+ return row ?? null;
132
+ },
133
+ // The payload is kept only until the event is handled.
134
+ async finishEvent(id, state, reason) {
135
+ await sql `
136
+ update ${t.app_events}
137
+ set state = ${state}, reason = ${reason}, payload = null, payload_key_id = null
138
+ where id = ${id}`;
139
+ },
140
+ async pruneEvents() {
141
+ await sql `delete from ${t.app_events} where received_at < now() - interval '30 days'`;
142
+ },
143
+ // ---- triggers ----
144
+ async agentState(agentId, connectorId) {
145
+ const [row] = await sql `
146
+ select a.name as "agentName", a.status as "agentStatus",
147
+ case when g.agent_id is null then null else
148
+ jsonb_build_object('capabilities', to_jsonb(g.capabilities), 'limits', g.limits)
149
+ end as grant,
150
+ case when c.id is null then null else
151
+ jsonb_build_object('capabilities', to_jsonb(c.capabilities),
152
+ 'connected', c.status = 'connected'
153
+ and (c.provider_id is null or p.status = 'connected'))
154
+ end as connection
155
+ from ${t.agents} a
156
+ left join ${t.grants} g on g.agent_id = a.id and g.connector_id = ${connectorId}
157
+ left join ${t.connections} c
158
+ on c.organization_id = a.organization_id and c.connector_id = ${connectorId}
159
+ left join ${t.providers} p on p.id = c.provider_id
160
+ where a.id = ${agentId}`;
161
+ return row ?? null;
162
+ },
163
+ // Every enabled trigger on the app, of the organization's agents.
164
+ async triggersFor(org, connectorId) {
165
+ return sql.unsafe(`select ${TRIGGER} from ${t.event_triggers} t join ${t.agents} a on a.id = t.agent_id
166
+ where a.organization_id = $1 and t.connector_id = $2 and t.enabled
167
+ order by t.agent_id`, [org, connectorId]);
168
+ },
169
+ async trigger(org, agentId, connectorId) {
170
+ const [row] = await sql.unsafe(`select ${TRIGGER} from ${t.event_triggers} t join ${t.agents} a on a.id = t.agent_id
171
+ where a.organization_id = $1 and t.agent_id = $2 and t.connector_id = $3`, [org, agentId, connectorId]);
172
+ return row ?? null;
173
+ },
174
+ async triggerById(id) {
175
+ const [row] = await sql.unsafe(`select ${TRIGGER} from ${t.event_triggers} t where t.id = $1`, [id]);
176
+ return row ?? null;
177
+ },
178
+ async agentTriggers(org, agentId) {
179
+ return sql.unsafe(`select ${TRIGGER} from ${t.event_triggers} t join ${t.agents} a on a.id = t.agent_id
180
+ where a.organization_id = $1 and t.agent_id = $2 order by t.connector_id`, [org, agentId]);
181
+ },
182
+ // Only for an agent of this organization; false otherwise.
183
+ async setTrigger(org, row) {
184
+ const rows = await sql `
185
+ insert into ${t.event_triggers}
186
+ (agent_id, connector_id, enabled, event_types, conditions, prompt, runner, settings,
187
+ secret, secret_key_id, managed_agent_id, environment_id, vault_ids, budget_cents,
188
+ max_runs_per_hour, max_cents_per_day, max_concurrent, updated_by)
189
+ select a.id, ${row.connectorId}, ${row.enabled}, ${sql.array(row.eventTypes)},
190
+ ${sql.json(row.conditions)}, ${row.prompt}, ${row.runner},
191
+ ${sql.json(row.settings)}, ${row.secret},
192
+ ${row.secretKeyId}, ${row.managedAgentId}, ${row.environmentId},
193
+ ${sql.array(row.vaultIds)}, ${row.budgetCents}, ${row.maxRunsPerHour},
194
+ ${row.maxCentsPerDay}, ${row.maxConcurrent}, ${row.updatedBy}
195
+ from ${t.agents} a
196
+ where a.id = ${row.agentId} and a.organization_id = ${org}
197
+ on conflict (agent_id, connector_id) do update set
198
+ enabled = excluded.enabled, event_types = excluded.event_types,
199
+ conditions = excluded.conditions, prompt = excluded.prompt, runner = excluded.runner,
200
+ settings = excluded.settings, secret = excluded.secret,
201
+ secret_key_id = excluded.secret_key_id, managed_agent_id = excluded.managed_agent_id,
202
+ environment_id = excluded.environment_id, vault_ids = excluded.vault_ids,
203
+ budget_cents = excluded.budget_cents, max_runs_per_hour = excluded.max_runs_per_hour,
204
+ max_cents_per_day = excluded.max_cents_per_day,
205
+ max_concurrent = excluded.max_concurrent, updated_by = excluded.updated_by,
206
+ updated_at = now()
207
+ returning agent_id`;
208
+ return rows.length > 0;
209
+ },
210
+ async removeTrigger(org, agentId, connectorId) {
211
+ const rows = await sql `
212
+ delete from ${t.event_triggers} t using ${t.agents} a
213
+ where a.id = t.agent_id and a.organization_id = ${org} and t.agent_id = ${agentId}
214
+ and t.connector_id = ${connectorId}
215
+ returning t.id`;
216
+ return rows.length > 0;
217
+ },
218
+ // ---- runs ----
219
+ // Runs live now, started in the last hour (failed starts too), and what finished runs
220
+ // cost in the last 24 hours, for one trigger.
221
+ async runCounts(triggerId) {
222
+ const [row] = await sql `
223
+ select count(*) filter (where state in ('starting', 'running'))::int as active,
224
+ count(*) filter (where started_at > now() - interval '1 hour')::int as "lastHour",
225
+ coalesce(sum(cost_cents) filter (where started_at > now() - interval '24 hours'),
226
+ 0)::int as "spentToday"
227
+ from ${t.event_runs}
228
+ where trigger_id = ${triggerId} and started_at > now() - interval '24 hours'
229
+ or (trigger_id = ${triggerId} and state in ('starting', 'running'))`;
230
+ return row;
231
+ },
232
+ async startRun(input) {
233
+ const [row] = await sql `
234
+ insert into ${t.event_runs}
235
+ (agent_id, trigger_id, event_id, event_type, delivery_id, runner, state)
236
+ values (${input.agentId}, ${input.triggerId}, ${input.eventId}, ${input.eventType},
237
+ ${input.deliveryId}, ${input.runner}, 'starting')
238
+ returning id::text`;
239
+ return row.id;
240
+ },
241
+ async updateRun(id, patch) {
242
+ const finished = patch.state === "ended" || patch.state === "failed";
243
+ await sql `
244
+ update ${t.event_runs}
245
+ set state = coalesce(${patch.state ?? null}, state),
246
+ session_id = coalesce(${patch.sessionId ?? null}, session_id),
247
+ error = coalesce(${patch.error ?? null}, error),
248
+ cost_cents = coalesce(${patch.costCents ?? null}, cost_cents),
249
+ finished_at = case when ${finished} then now() else finished_at end
250
+ where id = ${id}`;
251
+ },
252
+ // Runs left starting (the process stopped mid-start) hold a concurrency slot forever.
253
+ async failStaleStarts() {
254
+ const rows = await sql `
255
+ update ${t.event_runs}
256
+ set state = 'failed', error = 'Did not start', finished_at = now()
257
+ where state = 'starting' and started_at < now() - interval '10 minutes'
258
+ returning id`;
259
+ return rows.length;
260
+ },
261
+ async runningRuns() {
262
+ return sql.unsafe(`select ${RUN}, a.organization_id::text as "organizationId"
263
+ from ${t.event_runs} r join ${t.event_triggers} t on t.id = r.trigger_id
264
+ join ${t.agents} a on a.id = r.agent_id
265
+ where r.state = 'running' and r.session_id is not null order by r.started_at`);
266
+ },
267
+ async recentRuns(org, agentId, limit) {
268
+ return sql.unsafe(`select ${RUN} from ${t.event_runs} r join ${t.event_triggers} t on t.id = r.trigger_id
269
+ where r.agent_id = $2 and exists (select 1 from ${t.agents} a
270
+ where a.id = $2 and a.organization_id = $1)
271
+ order by r.started_at desc limit $3`, [org, agentId, limit]);
272
+ },
273
+ };
274
+ }
275
+ //# sourceMappingURL=store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../../../../../packages/server/src/events/store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ import { type BrandingInput } from "../../connector-kit/src/branding.js";
2
+ import { type BuiltinModule, type ConnectorModule } from "./builtin.js";
3
+ import { type ConnectorJson } from "../../connector-kit/src/connector.js";
4
+ import { type Sql } from "./store.js";
5
+ import { type RunnerFactory } from "./teams/runner.js";
6
+ export type { BrandingInput } from "../../connector-kit/src/branding.js";
7
+ export type { ConnectorContext, ConnectorModule } from "./builtin.js";
8
+ export type { ConnectorJson } from "../../connector-kit/src/connector.js";
9
+ export { builtinConnectors } from "./builtin.js";
10
+ export type { EventRunInput, RunInput, RunnerFactory, TriggerRunner } from "./teams/runner.js";
11
+ export { claudeManagedAgents, signature, signedWebhook } from "./teams/runner.js";
12
+ export type AgentConnectOptions = {
13
+ database: Sql | {
14
+ url: string;
15
+ };
16
+ schema?: string;
17
+ migrate?: boolean;
18
+ encryptionKey: string;
19
+ previousEncryptionKey?: string;
20
+ adminToken: string;
21
+ publicBaseUrl?: string | null;
22
+ branding?: BrandingInput;
23
+ connectors?: (ConnectorModule | BuiltinModule | ConnectorJson)[];
24
+ extraConnectorDirs?: string[];
25
+ microsoftSharedApp?: {
26
+ clientId: string;
27
+ clientSecret: string;
28
+ } | null;
29
+ runners?: RunnerFactory[];
30
+ log?: Pick<Console, "log" | "error">;
31
+ };
32
+ /** The whole service, checked and wired: fetch serves /agent-connect/*, start runs the Teams
33
+ * and app events queue workers, watchers and polls. Throws on anything misconfigured. */
34
+ export declare function createAgentConnect(options: AgentConnectOptions): Promise<{
35
+ fetch: (req: Request) => Promise<Response>;
36
+ connectors: string[];
37
+ start(): void;
38
+ stop(): Promise<void>;
39
+ }>;
40
+ export type AgentConnect = Awaited<ReturnType<typeof createAgentConnect>>;
@@ -1,13 +1,20 @@
1
+ import { existsSync, readdirSync } from "node:fs";
1
2
  import { pathToFileURL } from "node:url";
2
3
  import { createApp } from "./app.js";
3
4
  import { parseBranding, setBranding, } from "../../connector-kit/src/branding.js";
4
5
  import { builtinConnectors } from "./builtin.js";
5
6
  import httpConnector from "../../../connectors/http/index.js";
6
- import { loadConnectors, loadProviders } from "../../connector-kit/src/connector.js";
7
+ import odataConnector from "../../../connectors/odata/index.js";
8
+ import soapConnector from "../../../connectors/soap/index.js";
9
+ import sqlConnector from "../../../connectors/sql/index.js";
10
+ import { CONNECTORS_DIR, loadConnectors, loadProviders, parseConnector, } from "../../connector-kit/src/connector.js";
7
11
  import { migrate as runMigrations } from "./migrate.js";
8
12
  import { CredentialKey } from "./secrets.js";
9
13
  import { assertToolsImplemented, createService } from "./service.js";
10
14
  import { assertSchemaName, connectDatabase, createStore } from "./store.js";
15
+ import { createEventsAdmin, resealEventSecrets } from "./events/admin.js";
16
+ import { createEventsRuntime } from "./events/runtime.js";
17
+ import { createEventsStore } from "./events/store.js";
11
18
  import { createTeamsAdmin, resealTeamsCredentials } from "./teams/admin.js";
12
19
  import { botClient } from "./teams/bot.js";
13
20
  import { claudeClient } from "./teams/claude.js";
@@ -20,16 +27,34 @@ import { microsoftClient } from "../../../connectors/microsoft/client.js";
20
27
  export { builtinConnectors } from "./builtin.js";
21
28
  export { claudeManagedAgents, signature, signedWebhook } from "./teams/runner.js";
22
29
  /** The whole service, checked and wired: fetch serves /agent-connect/*, start runs the Teams
23
- * queue worker and watcher. Throws on anything misconfigured. */
30
+ * and app events queue workers, watchers and polls. Throws on anything misconfigured. */
24
31
  export async function createAgentConnect(options) {
25
32
  const log = options.log ?? console;
26
33
  setBranding(parseBranding(options.branding));
27
34
  const schema = options.schema ?? "agent_connect";
28
35
  assertSchemaName(schema);
29
36
  const microsoft = microsoftClient({ sharedApp: options.microsoftSharedApp ?? null });
30
- const modules = new Map((options.connectors ?? builtinConnectors).map((m) => [m.id, m]));
37
+ const modules = new Map();
38
+ const inline = [];
39
+ for (const entry of options.connectors ?? builtinConnectors) {
40
+ if (!("create" in entry)) {
41
+ inline.push(parseConnector(entry, `Connector ${entry.id}`));
42
+ continue;
43
+ }
44
+ if (modules.has(entry.id))
45
+ throw new Error(`Two connector modules have the id ${entry.id}`);
46
+ modules.set(entry.id, entry);
47
+ if (!entry.connector)
48
+ continue;
49
+ const connector = parseConnector(entry.connector, `Connector ${entry.id}`);
50
+ if (connector.id !== entry.id)
51
+ throw new Error(`Connector module ${entry.id} carries the definition of ${connector.id}`);
52
+ inline.push(connector);
53
+ }
54
+ const builtin = loadConnectors(CONNECTORS_DIR, (id) => modules.has(id));
31
55
  const connectors = [
32
- ...loadConnectors(),
56
+ ...builtin,
57
+ ...inline,
33
58
  ...(options.extraConnectorDirs ?? []).flatMap((dir) => {
34
59
  const found = loadConnectors(pathToFileURL(`${dir.replace(/\/+$/, "")}/`));
35
60
  if (!found.length)
@@ -37,15 +62,29 @@ export async function createAgentConnect(options) {
37
62
  return found;
38
63
  }),
39
64
  ];
65
+ for (const id of modules.keys())
66
+ if (!connectors.some((c) => c.id === id))
67
+ throw new Error(`Connector module ${id} has no definition: give it as its connector, or its folder in extraConnectorDirs`);
40
68
  const apps = connectors.map((connector) => {
41
69
  if (connectors.filter((c) => c.id === connector.id).length > 1)
42
70
  throw new Error(`Two connectors have the id ${connector.id}`);
43
- // An app described entirely in its connector.json runs on the generic http module.
44
- const module = modules.get(connector.id) ?? (connector.http ? httpConnector : undefined);
71
+ // An app described entirely in its connector.json runs on a generic module.
72
+ const module = modules.get(connector.id) ??
73
+ (connector.http
74
+ ? httpConnector
75
+ : connector.soap
76
+ ? soapConnector
77
+ : connector.odata
78
+ ? odataConnector
79
+ : connector.sql
80
+ ? sqlConnector
81
+ : undefined);
45
82
  if (!module)
46
83
  throw new Error(`Connector ${connector.id} has no code (ConnectorModule)`);
47
84
  return { connector, ...module.create({ microsoft, connector }) };
48
85
  });
86
+ if (!apps.length)
87
+ throw new Error("No connectors: pass at least one app in connectors");
49
88
  assertToolsImplemented(apps);
50
89
  // Every `live` step check a connector names is one the Teams admin runs.
51
90
  for (const { connector } of apps)
@@ -53,15 +92,18 @@ export async function createAgentConnect(options) {
53
92
  if (step.live && !LIVE_CHECKS.includes(step.live))
54
93
  throw new Error(`Connector ${connector.id}: no live check ${step.live}`);
55
94
  const providerClients = { microsoft: microsoft.provider };
95
+ // A built-in app left out drops out of its provider's add-agent steps.
96
+ const left = new Set(readdirSync(CONNECTORS_DIR).filter((id) => existsSync(new URL(`${id}/connector.json`, CONNECTORS_DIR)) && !modules.has(id)));
56
97
  const providers = loadProviders().map((provider) => {
57
98
  const client = providerClients[provider.id];
58
99
  if (!client)
59
100
  throw new Error(`connectors/${provider.id}/provider.json has no client`);
60
- return { provider, client };
101
+ const addAgent = provider.addAgent
102
+ .map((step) => ({ ...step, apps: step.apps.filter((id) => !left.has(id)) }))
103
+ .filter((step) => step.apps.length);
104
+ return { provider: { ...provider, addAgent }, client };
61
105
  });
62
- const teamsConnector = apps.find((a) => a.connector.id === "teams")?.connector;
63
- if (!teamsConnector)
64
- throw new Error("The teams connector is missing");
106
+ const teamsConnector = apps.find((a) => a.connector.id === "teams")?.connector ?? null;
65
107
  const ownsSql = !("unsafe" in options.database);
66
108
  const sql = "unsafe" in options.database ? options.database : connectDatabase(options.database.url);
67
109
  if (options.migrate ?? true)
@@ -92,10 +134,22 @@ export async function createAgentConnect(options) {
92
134
  key,
93
135
  bots: { botForAgent: teamsStore.botForAgent, access: runtime.access },
94
136
  });
137
+ const eventsStore = createEventsStore(sql, schema);
138
+ const eventApps = new Map(apps.filter((a) => a.connector.events).map((a) => [a.connector.id, a.connector]));
139
+ const eventDeps = {
140
+ store,
141
+ events: eventsStore,
142
+ key,
143
+ connectors: eventApps,
144
+ appCall: service.appCall,
145
+ runners,
146
+ };
147
+ const events = createEventsRuntime(eventDeps);
95
148
  const app = createApp({
96
149
  service,
97
150
  store,
98
151
  adminToken: options.adminToken,
152
+ events: { runtime: events, admin: createEventsAdmin({ ...eventDeps, publicUrl }) },
99
153
  teams: {
100
154
  runtime,
101
155
  admin: createTeamsAdmin({
@@ -115,12 +169,15 @@ export async function createAgentConnect(options) {
115
169
  connectors: apps.map((a) => a.connector.id),
116
170
  start() {
117
171
  runtime.start();
172
+ events.start();
118
173
  // While rotating the key, move what Teams sealed onto the new one.
119
174
  if (options.previousEncryptionKey)
120
175
  resealTeamsCredentials(teamsStore, key).then((n) => log.log(`[agent-connect] re-sealed ${n.bots} bot credentials, ${n.claudeKeys} Claude keys and ${n.triggerSecrets} trigger secrets`), (error) => log.error("[agent-connect] re-sealing Teams credentials failed", error));
176
+ if (options.previousEncryptionKey)
177
+ resealEventSecrets(eventsStore, key).then((n) => log.log(`[agent-connect] re-sealed ${n} app event secrets`), (error) => log.error("[agent-connect] re-sealing app event secrets failed", error));
121
178
  },
122
179
  async stop() {
123
- await runtime.stop();
180
+ await Promise.all([runtime.stop(), events.stop()]);
124
181
  if (ownsSql)
125
182
  await sql.end();
126
183
  },
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../packages/server/src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../packages/server/src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import { type Sql } from "./store.js";
2
+ export type Migration = {
3
+ id: string;
4
+ version: number;
5
+ name: string;
6
+ sql: string;
7
+ checksum: string;
8
+ };
9
+ export declare function migrationFiles(): Migration[];
10
+ /** Applies pending migrations in one transaction; returns what it did, in order. */
11
+ export declare function migrate(sql: Sql, schema: string, log?: (line: string) => void): Promise<string[]>;
@@ -0,0 +1,4 @@
1
+ type Json = Record<string, unknown>;
2
+ export declare const ADMIN_V1 = "/agent-connect/admin/v1";
3
+ export declare function openapi(): Json;
4
+ export {};
@@ -67,7 +67,7 @@ export function openapi() {
67
67
  (paths[spec.path] ??= {})[spec.method.toLowerCase()] = {
68
68
  operationId,
69
69
  summary: spec.summary,
70
- ...(spec.teams ? { tags: ["teams"] } : {}),
70
+ ...(spec.teams ? { tags: ["teams"] } : spec.events ? { tags: ["events"] } : {}),
71
71
  ...(parameters.length ? { parameters } : {}),
72
72
  ...(spec.body
73
73
  ? {
@@ -87,7 +87,7 @@ export function openapi() {
87
87
  version: "1",
88
88
  description: "Server to server only: a bearer token (AGENT_CONNECT_ADMIN_TOKEN), and requests " +
89
89
  "carrying X-Forwarded-For are refused. Routes tagged teams are served only where " +
90
- "Teams is set up.",
90
+ "Teams is set up, routes tagged events only where app events are.",
91
91
  },
92
92
  servers: [{ url: ADMIN_V1 }],
93
93
  security: [{ bearer: [] }],
@@ -1 +1 @@
1
- {"version":3,"file":"openapi.js","sourceRoot":"","sources":["../../../../packages/server/src/openapi.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAA+B,MAAM,UAAU,CAAC;AAOhF,MAAM,CAAC,MAAM,QAAQ,GAAG,yBAAyB,CAAC;AAElD,SAAS,OAAO,CAAC,MAAiB,EAAE,EAAsB,EAAE,UAAgB;IAC1E,MAAM,EACJ,OAAO,EAAE,CAAC,EACV,KAAK,EACL,GAAG,IAAI,EACR,GAAG,CAAC,CAAC,YAAY,CAAC,MAAM,EAAE;QACzB,EAAE;QACF,MAAM,EAAE,eAAe;KACxB,CAA4C,CAAC;IAC9C,MAAM,GAAG,GAAG,CAAC,KAAc,EAAW,EAAE,CACtC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAClB,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC;QAChB,CAAC,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;YAClC,CAAC,CAAC,MAAM,CAAC,WAAW,CAChB,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;gBACpC,CAAC;gBACD,CAAC,KAAK,MAAM,IAAI,OAAO,CAAC,KAAK,QAAQ;oBACnC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,uBAAuB,CAAC;oBAChD,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;aACX,CAAC,CACH;YACH,CAAC,CAAC,KAAK,CAAC;IACd,KAAK,MAAM,CAAC,EAAE,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC,EAAE,CAAC;QACpD,MAAM,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;QACtB,6EAA6E;QAC7E,IAAI,EAAE,IAAI,UAAU,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC;YAC9D,MAAM,IAAI,KAAK,CAAC,UAAU,EAAE,2BAA2B,CAAC,CAAC;QAC3D,UAAU,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC;IACxB,CAAC;IACD,OAAO,GAAG,CAAC,IAAI,CAAS,CAAC;AAC3B,CAAC;AAED,SAAS,MAAM,CAAC,MAAc,EAAE,CAAS,EAAE,UAAgB;IACzD,MAAM,WAAW,GAAG,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;IACpD,IAAI,CAAC,KAAK,IAAI;QAAE,OAAO,EAAE,WAAW,EAAE,CAAC;IACvC,IAAI,MAAM,IAAI,CAAC;QACb,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE,EAAE,CAAC;IAClG,OAAO;QACL,WAAW;QACX,OAAO,EAAE,EAAE,kBAAkB,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,EAAE,QAAQ,EAAE,UAAU,CAAC,EAAE,EAAE;KAC9E,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,OAAO;IACrB,MAAM,UAAU,GAAS,EAAE,CAAC;IAC5B,MAAM,KAAK,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;IAC3D,MAAM,KAAK,GAAyB,EAAE,CAAC;IACvC,KAAK,MAAM,CAAC,WAAW,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAA0B,EAAE,CAAC;QAClF,MAAM,UAAU,GAAG;YACjB,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBACvD,IAAI,EAAE,CAAC;gBACP,EAAE,EAAE,MAAM;gBACV,QAAQ,EAAE,IAAI;gBACd,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,MAAM,CAAC,CAAwB,CAAC,GAAG,EAAE;aAC7E,CAAC,CAAC;YACH,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,EAAE,EAAE,CAAC,CAAC;gBAC7D,IAAI,EAAE,CAAC;gBACP,EAAE,EAAE,OAAO;gBACX,QAAQ,EAAE,KAAK;gBACf,WAAW;gBACX,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;aAC3B,CAAC,CAAC;SACJ,CAAC;QACF,MAAM,SAAS,GAAS,EAAE,CAAC;QAC3B,KAAK,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC;YACtD,SAAS,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,UAAU,CAAC,CAAC;QAC5D,wFAAwF;QACxF,2BAA2B;QAC3B,KAAK,MAAM,MAAM,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;YAAE,SAAS,CAAC,MAAM,CAAC,KAAK,KAAK,EAAE,CAAC;QACjF,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,GAAG;YACrD,WAAW;YACX,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC1C,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC5C,GAAG,CAAC,IAAI,CAAC,IAAI;gBACX,CAAC,CAAC;oBACE,WAAW,EAAE;wBACX,QAAQ,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,OAAO;wBACjD,OAAO,EAAE,EAAE,kBAAkB,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,UAAU,CAAC,EAAE,EAAE;qBACrF;iBACF;gBACH,CAAC,CAAC,EAAE,CAAC;YACP,SAAS;SACV,CAAC;IACJ,CAAC;IACD,OAAO;QACL,OAAO,EAAE,OAAO;QAChB,IAAI,EAAE;YACJ,KAAK,EAAE,yBAAyB;YAChC,OAAO,EAAE,GAAG;YACZ,WAAW,EACT,kFAAkF;gBAClF,kFAAkF;gBAClF,kBAAkB;SACrB;QACD,OAAO,EAAE,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC;QAC5B,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;QAC1B,KAAK;QACL,UAAU,EAAE;YACV,OAAO,EAAE,MAAM,CAAC,WAAW,CACzB,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAClE;YACD,eAAe,EAAE,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE;SAChE;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"openapi.js","sourceRoot":"","sources":["../../../../packages/server/src/openapi.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /** A queue worker for one process: `next` handles one item and says whether there was one.
2
+ * One drain at a time; a kick during one makes it look again before stopping. */
3
+ export declare function drainer(name: string, next: () => Promise<boolean>): {
4
+ kick: () => void;
5
+ start(): void;
6
+ /** Stops claiming and waits for the item in hand, so a rollout neither strands it nor
7
+ * handles it twice. */
8
+ stop(): Promise<void>;
9
+ idle(): Promise<void>;
10
+ };
@@ -0,0 +1,45 @@
1
+ /** A queue worker for one process: `next` handles one item and says whether there was one.
2
+ * One drain at a time; a kick during one makes it look again before stopping. */
3
+ export function drainer(name, next) {
4
+ let draining = null;
5
+ let again = false;
6
+ let stopped = false;
7
+ async function drain() {
8
+ while (again) {
9
+ again = false;
10
+ while (!stopped && (await next()))
11
+ ;
12
+ }
13
+ }
14
+ function kick() {
15
+ if (stopped)
16
+ return;
17
+ again = true;
18
+ draining ??= drain()
19
+ .catch((error) => console.error(`[${name}] worker`, error))
20
+ .finally(() => {
21
+ draining = null;
22
+ if (again)
23
+ kick();
24
+ });
25
+ }
26
+ return {
27
+ kick,
28
+ start() {
29
+ stopped = false;
30
+ },
31
+ /** Stops claiming and waits for the item in hand, so a rollout neither strands it nor
32
+ * handles it twice. */
33
+ async stop() {
34
+ stopped = true;
35
+ again = false;
36
+ while (draining)
37
+ await draining;
38
+ },
39
+ async idle() {
40
+ while (draining)
41
+ await draining;
42
+ },
43
+ };
44
+ }
45
+ //# sourceMappingURL=queue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queue.js","sourceRoot":"","sources":["../../../../packages/server/src/queue.ts"],"names":[],"mappings":"AAAA;kFACkF;AAClF,MAAM,UAAU,OAAO,CAAC,IAAY,EAAE,IAA4B;IAChE,IAAI,QAAQ,GAAyB,IAAI,CAAC;IAC1C,IAAI,KAAK,GAAG,KAAK,CAAC;IAClB,IAAI,OAAO,GAAG,KAAK,CAAC;IAEpB,KAAK,UAAU,KAAK;QAClB,OAAO,KAAK,EAAE,CAAC;YACb,KAAK,GAAG,KAAK,CAAC;YACd,OAAO,CAAC,OAAO,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC;gBAAC,CAAC;QACrC,CAAC;IACH,CAAC;IAED,SAAS,IAAI;QACX,IAAI,OAAO;YAAE,OAAO;QACpB,KAAK,GAAG,IAAI,CAAC;QACb,QAAQ,KAAK,KAAK,EAAE;aACjB,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,IAAI,UAAU,EAAE,KAAK,CAAC,CAAC;aAC1D,OAAO,CAAC,GAAG,EAAE;YACZ,QAAQ,GAAG,IAAI,CAAC;YAChB,IAAI,KAAK;gBAAE,IAAI,EAAE,CAAC;QACpB,CAAC,CAAC,CAAC;IACP,CAAC;IAED,OAAO;QACL,IAAI;QACJ,KAAK;YACH,OAAO,GAAG,KAAK,CAAC;QAClB,CAAC;QACD;gCACwB;QACxB,KAAK,CAAC,IAAI;YACR,OAAO,GAAG,IAAI,CAAC;YACf,KAAK,GAAG,KAAK,CAAC;YACd,OAAO,QAAQ;gBAAE,MAAM,QAAQ,CAAC;QAClC,CAAC;QACD,KAAK,CAAC,IAAI;YACR,OAAO,QAAQ;gBAAE,MAAM,QAAQ,CAAC;QAClC,CAAC;KACF,CAAC;AACJ,CAAC"}