@arbium/enterprise-agent-connect 0.0.0-stage → 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 (322) hide show
  1. package/LICENSE +202 -0
  2. package/README.md +269 -2
  3. package/dist/connectors/dell-techdirect/connector.json +39 -0
  4. package/dist/connectors/dell-techdirect/index.d.ts +8 -0
  5. package/dist/connectors/dell-techdirect/index.js +7 -0
  6. package/dist/connectors/dell-techdirect/index.js.map +1 -0
  7. package/dist/connectors/dell-techdirect/tools.d.ts +2 -0
  8. package/dist/connectors/dell-techdirect/tools.js +49 -0
  9. package/dist/connectors/dell-techdirect/tools.js.map +1 -0
  10. package/dist/connectors/dell-techdirect/vendor.d.ts +6 -0
  11. package/dist/connectors/dell-techdirect/vendor.js +57 -0
  12. package/dist/connectors/dell-techdirect/vendor.js.map +1 -0
  13. package/dist/connectors/dynamics-365/connector.json +228 -0
  14. package/dist/connectors/dynamics-365/index.d.ts +8 -0
  15. package/dist/connectors/dynamics-365/index.js +10 -0
  16. package/dist/connectors/dynamics-365/index.js.map +1 -0
  17. package/dist/connectors/dynamics-365/tools.d.ts +35 -0
  18. package/dist/connectors/dynamics-365/tools.js +806 -0
  19. package/dist/connectors/dynamics-365/tools.js.map +1 -0
  20. package/dist/connectors/dynamics-365/vendor.d.ts +9 -0
  21. package/dist/connectors/dynamics-365/vendor.js +110 -0
  22. package/dist/connectors/dynamics-365/vendor.js.map +1 -0
  23. package/dist/connectors/entra/connector.json +85 -0
  24. package/dist/connectors/entra/index.d.ts +2 -0
  25. package/dist/connectors/entra/index.js +4 -0
  26. package/dist/connectors/entra/index.js.map +1 -0
  27. package/dist/connectors/entra/tools.d.ts +14 -0
  28. package/dist/connectors/entra/tools.js +262 -0
  29. package/dist/connectors/entra/tools.js.map +1 -0
  30. package/dist/connectors/fedex/connector.json +118 -0
  31. package/dist/connectors/fedex/index.d.ts +8 -0
  32. package/dist/connectors/fedex/index.js +7 -0
  33. package/dist/connectors/fedex/index.js.map +1 -0
  34. package/dist/connectors/fedex/tools.d.ts +3 -0
  35. package/dist/connectors/fedex/tools.js +152 -0
  36. package/dist/connectors/fedex/tools.js.map +1 -0
  37. package/dist/connectors/fedex/vendor.d.ts +7 -0
  38. package/dist/connectors/fedex/vendor.js +98 -0
  39. package/dist/connectors/fedex/vendor.js.map +1 -0
  40. package/dist/connectors/gong/connector.json +127 -0
  41. package/dist/connectors/gong/index.d.ts +8 -0
  42. package/dist/connectors/gong/index.js +7 -0
  43. package/dist/connectors/gong/index.js.map +1 -0
  44. package/dist/connectors/gong/tools.d.ts +8 -0
  45. package/dist/connectors/gong/tools.js +424 -0
  46. package/dist/connectors/gong/tools.js.map +1 -0
  47. package/dist/connectors/gong/vendor.d.ts +4 -0
  48. package/dist/connectors/gong/vendor.js +89 -0
  49. package/dist/connectors/gong/vendor.js.map +1 -0
  50. package/dist/connectors/http/index.d.ts +34 -0
  51. package/dist/connectors/http/index.js +325 -0
  52. package/dist/connectors/http/index.js.map +1 -0
  53. package/dist/connectors/intune/connector.json +106 -0
  54. package/dist/connectors/intune/index.d.ts +2 -0
  55. package/dist/connectors/intune/index.js +4 -0
  56. package/dist/connectors/intune/index.js.map +1 -0
  57. package/dist/connectors/intune/tools.d.ts +12 -0
  58. package/dist/connectors/intune/tools.js +416 -0
  59. package/dist/connectors/intune/tools.js.map +1 -0
  60. package/dist/connectors/jamf/connector.json +182 -0
  61. package/dist/connectors/jamf/index.d.ts +8 -0
  62. package/dist/connectors/jamf/index.js +7 -0
  63. package/dist/connectors/jamf/index.js.map +1 -0
  64. package/dist/connectors/jamf/tools.d.ts +7 -0
  65. package/dist/connectors/jamf/tools.js +659 -0
  66. package/dist/connectors/jamf/tools.js.map +1 -0
  67. package/dist/connectors/jamf/vendor.d.ts +5 -0
  68. package/dist/connectors/jamf/vendor.js +70 -0
  69. package/dist/connectors/jamf/vendor.js.map +1 -0
  70. package/dist/connectors/jira/connector.json +272 -0
  71. package/dist/connectors/jira/index.d.ts +8 -0
  72. package/dist/connectors/jira/index.js +7 -0
  73. package/dist/connectors/jira/index.js.map +1 -0
  74. package/dist/connectors/jira/jql.d.ts +4 -0
  75. package/dist/connectors/jira/jql.js +67 -0
  76. package/dist/connectors/jira/jql.js.map +1 -0
  77. package/dist/connectors/jira/tools.d.ts +3 -0
  78. package/dist/connectors/jira/tools.js +464 -0
  79. package/dist/connectors/jira/tools.js.map +1 -0
  80. package/dist/connectors/jira/vendor.d.ts +3 -0
  81. package/dist/connectors/jira/vendor.js +100 -0
  82. package/dist/connectors/jira/vendor.js.map +1 -0
  83. package/dist/connectors/microsoft/client.d.ts +66 -0
  84. package/dist/connectors/microsoft/client.js +452 -0
  85. package/dist/connectors/microsoft/client.js.map +1 -0
  86. package/dist/connectors/microsoft/provider.json +118 -0
  87. package/dist/connectors/netsuite/connector.json +317 -0
  88. package/dist/connectors/netsuite/index.d.ts +8 -0
  89. package/dist/connectors/netsuite/index.js +7 -0
  90. package/dist/connectors/netsuite/index.js.map +1 -0
  91. package/dist/connectors/netsuite/tools.d.ts +24 -0
  92. package/dist/connectors/netsuite/tools.js +447 -0
  93. package/dist/connectors/netsuite/tools.js.map +1 -0
  94. package/dist/connectors/netsuite/vendor.d.ts +26 -0
  95. package/dist/connectors/netsuite/vendor.js +247 -0
  96. package/dist/connectors/netsuite/vendor.js.map +1 -0
  97. package/dist/connectors/odata/index.d.ts +33 -0
  98. package/dist/connectors/odata/index.js +460 -0
  99. package/dist/connectors/odata/index.js.map +1 -0
  100. package/dist/connectors/okta/connector.json +194 -0
  101. package/dist/connectors/okta/index.d.ts +8 -0
  102. package/dist/connectors/okta/index.js +7 -0
  103. package/dist/connectors/okta/index.js.map +1 -0
  104. package/dist/connectors/okta/tools.d.ts +6 -0
  105. package/dist/connectors/okta/tools.js +429 -0
  106. package/dist/connectors/okta/tools.js.map +1 -0
  107. package/dist/connectors/okta/vendor.d.ts +14 -0
  108. package/dist/connectors/okta/vendor.js +204 -0
  109. package/dist/connectors/okta/vendor.js.map +1 -0
  110. package/dist/connectors/outlook-calendar/connector.json +136 -0
  111. package/dist/connectors/outlook-calendar/index.d.ts +2 -0
  112. package/dist/connectors/outlook-calendar/index.js +4 -0
  113. package/dist/connectors/outlook-calendar/index.js.map +1 -0
  114. package/dist/connectors/outlook-calendar/tools.d.ts +65 -0
  115. package/dist/connectors/outlook-calendar/tools.js +398 -0
  116. package/dist/connectors/outlook-calendar/tools.js.map +1 -0
  117. package/dist/connectors/outlook-mail/connector.json +154 -0
  118. package/dist/connectors/outlook-mail/index.d.ts +2 -0
  119. package/dist/connectors/outlook-mail/index.js +4 -0
  120. package/dist/connectors/outlook-mail/index.js.map +1 -0
  121. package/dist/connectors/outlook-mail/tools.d.ts +8 -0
  122. package/dist/connectors/outlook-mail/tools.js +236 -0
  123. package/dist/connectors/outlook-mail/tools.js.map +1 -0
  124. package/dist/connectors/salesforce/connector.json +122 -0
  125. package/dist/connectors/salesforce/index.d.ts +8 -0
  126. package/dist/connectors/salesforce/index.js +7 -0
  127. package/dist/connectors/salesforce/index.js.map +1 -0
  128. package/dist/connectors/salesforce/soql.d.ts +3 -0
  129. package/dist/connectors/salesforce/soql.js +60 -0
  130. package/dist/connectors/salesforce/soql.js.map +1 -0
  131. package/dist/connectors/salesforce/tools.d.ts +9 -0
  132. package/dist/connectors/salesforce/tools.js +234 -0
  133. package/dist/connectors/salesforce/tools.js.map +1 -0
  134. package/dist/connectors/salesforce/vendor.d.ts +3 -0
  135. package/dist/connectors/salesforce/vendor.js +113 -0
  136. package/dist/connectors/salesforce/vendor.js.map +1 -0
  137. package/dist/connectors/sap-s4hana/connector.json +264 -0
  138. package/dist/connectors/sap-s4hana/index.d.ts +8 -0
  139. package/dist/connectors/sap-s4hana/index.js +7 -0
  140. package/dist/connectors/sap-s4hana/index.js.map +1 -0
  141. package/dist/connectors/sap-s4hana/tools.d.ts +4 -0
  142. package/dist/connectors/sap-s4hana/tools.js +761 -0
  143. package/dist/connectors/sap-s4hana/tools.js.map +1 -0
  144. package/dist/connectors/sap-s4hana/vendor.d.ts +5 -0
  145. package/dist/connectors/sap-s4hana/vendor.js +176 -0
  146. package/dist/connectors/sap-s4hana/vendor.js.map +1 -0
  147. package/dist/connectors/servicenow/connector.json +228 -0
  148. package/dist/connectors/servicenow/index.d.ts +8 -0
  149. package/dist/connectors/servicenow/index.js +7 -0
  150. package/dist/connectors/servicenow/index.js.map +1 -0
  151. package/dist/connectors/servicenow/tools.d.ts +4 -0
  152. package/dist/connectors/servicenow/tools.js +884 -0
  153. package/dist/connectors/servicenow/tools.js.map +1 -0
  154. package/dist/connectors/servicenow/vendor.d.ts +3 -0
  155. package/dist/connectors/servicenow/vendor.js +106 -0
  156. package/dist/connectors/servicenow/vendor.js.map +1 -0
  157. package/dist/connectors/sharepoint-files/connector.json +194 -0
  158. package/dist/connectors/sharepoint-files/excel.d.ts +16 -0
  159. package/dist/connectors/sharepoint-files/excel.js +300 -0
  160. package/dist/connectors/sharepoint-files/excel.js.map +1 -0
  161. package/dist/connectors/sharepoint-files/index.d.ts +8 -0
  162. package/dist/connectors/sharepoint-files/index.js +12 -0
  163. package/dist/connectors/sharepoint-files/index.js.map +1 -0
  164. package/dist/connectors/sharepoint-files/tools.d.ts +52 -0
  165. package/dist/connectors/sharepoint-files/tools.js +365 -0
  166. package/dist/connectors/sharepoint-files/tools.js.map +1 -0
  167. package/dist/connectors/sharepoint-files/vendor.d.ts +11 -0
  168. package/dist/connectors/sharepoint-files/vendor.js +167 -0
  169. package/dist/connectors/sharepoint-files/vendor.js.map +1 -0
  170. package/dist/connectors/slack/connector.json +148 -0
  171. package/dist/connectors/slack/index.d.ts +8 -0
  172. package/dist/connectors/slack/index.js +7 -0
  173. package/dist/connectors/slack/index.js.map +1 -0
  174. package/dist/connectors/slack/tools.d.ts +3 -0
  175. package/dist/connectors/slack/tools.js +355 -0
  176. package/dist/connectors/slack/tools.js.map +1 -0
  177. package/dist/connectors/slack/vendor.d.ts +17 -0
  178. package/dist/connectors/slack/vendor.js +189 -0
  179. package/dist/connectors/slack/vendor.js.map +1 -0
  180. package/dist/connectors/soap/index.d.ts +16 -0
  181. package/dist/connectors/soap/index.js +248 -0
  182. package/dist/connectors/soap/index.js.map +1 -0
  183. package/dist/connectors/soap/xml.d.ts +12 -0
  184. package/dist/connectors/soap/xml.js +126 -0
  185. package/dist/connectors/soap/xml.js.map +1 -0
  186. package/dist/connectors/sql/engines.d.ts +58 -0
  187. package/dist/connectors/sql/engines.js +292 -0
  188. package/dist/connectors/sql/engines.js.map +1 -0
  189. package/dist/connectors/sql/index.d.ts +16 -0
  190. package/dist/connectors/sql/index.js +214 -0
  191. package/dist/connectors/sql/index.js.map +1 -0
  192. package/dist/connectors/teams/connector.json +298 -0
  193. package/dist/connectors/teams/index.d.ts +2 -0
  194. package/dist/connectors/teams/index.js +5 -0
  195. package/dist/connectors/teams/index.js.map +1 -0
  196. package/dist/connectors/teams/tools.d.ts +7 -0
  197. package/dist/connectors/teams/tools.js +392 -0
  198. package/dist/connectors/teams/tools.js.map +1 -0
  199. package/dist/connectors/workday/connector.json +188 -0
  200. package/dist/connectors/workday/index.d.ts +8 -0
  201. package/dist/connectors/workday/index.js +7 -0
  202. package/dist/connectors/workday/index.js.map +1 -0
  203. package/dist/connectors/workday/tools.d.ts +33 -0
  204. package/dist/connectors/workday/tools.js +410 -0
  205. package/dist/connectors/workday/tools.js.map +1 -0
  206. package/dist/connectors/workday/vendor.d.ts +18 -0
  207. package/dist/connectors/workday/vendor.js +199 -0
  208. package/dist/connectors/workday/vendor.js.map +1 -0
  209. package/dist/packages/connector-kit/src/branding.d.ts +57 -0
  210. package/dist/packages/connector-kit/src/branding.js +102 -0
  211. package/dist/packages/connector-kit/src/branding.js.map +1 -0
  212. package/dist/packages/connector-kit/src/certificate.d.ts +19 -0
  213. package/dist/packages/connector-kit/src/certificate.js +84 -0
  214. package/dist/packages/connector-kit/src/certificate.js.map +1 -0
  215. package/dist/packages/connector-kit/src/common.d.ts +36 -0
  216. package/dist/packages/connector-kit/src/common.js +110 -0
  217. package/dist/packages/connector-kit/src/common.js.map +1 -0
  218. package/dist/packages/connector-kit/src/connector.d.ts +1356 -0
  219. package/dist/packages/connector-kit/src/connector.js +1073 -0
  220. package/dist/packages/connector-kit/src/connector.js.map +1 -0
  221. package/dist/packages/connector-kit/src/fetch.d.ts +6 -0
  222. package/dist/packages/connector-kit/src/fetch.js +44 -0
  223. package/dist/packages/connector-kit/src/fetch.js.map +1 -0
  224. package/dist/packages/connector-kit/src/index.d.ts +5 -0
  225. package/dist/packages/connector-kit/src/index.js +6 -0
  226. package/dist/packages/connector-kit/src/index.js.map +1 -0
  227. package/dist/packages/connector-kit/src/oauth.d.ts +15 -0
  228. package/dist/packages/connector-kit/src/oauth.js +98 -0
  229. package/dist/packages/connector-kit/src/oauth.js.map +1 -0
  230. package/dist/packages/connector-kit/src/types.d.ts +87 -0
  231. package/dist/packages/connector-kit/src/types.js +20 -0
  232. package/dist/packages/connector-kit/src/types.js.map +1 -0
  233. package/dist/packages/server/migrations/0001_tables.sql +268 -0
  234. package/dist/packages/server/migrations/0002_organizations.sql +72 -0
  235. package/dist/packages/server/migrations/0003_drop_unused.sql +3 -0
  236. package/dist/packages/server/migrations/0004_trigger_runners.sql +15 -0
  237. package/dist/packages/server/migrations/0005_run_runner.sql +3 -0
  238. package/dist/packages/server/migrations/0006_approvals.sql +36 -0
  239. package/dist/packages/server/migrations/0007_app_events.sql +110 -0
  240. package/dist/packages/server/migrations/rollback/to-legacy.sql +90 -0
  241. package/dist/packages/server/src/api.d.ts +3730 -0
  242. package/dist/packages/server/src/api.js +820 -0
  243. package/dist/packages/server/src/api.js.map +1 -0
  244. package/dist/packages/server/src/app.d.ts +23 -0
  245. package/dist/packages/server/src/app.js +467 -0
  246. package/dist/packages/server/src/app.js.map +1 -0
  247. package/dist/packages/server/src/builtin.d.ts +5 -0
  248. package/dist/packages/server/src/builtin.js +42 -0
  249. package/dist/packages/server/src/builtin.js.map +1 -0
  250. package/dist/packages/server/src/consent.d.ts +27 -0
  251. package/dist/packages/server/src/consent.js +36 -0
  252. package/dist/packages/server/src/consent.js.map +1 -0
  253. package/dist/packages/server/src/events/admin.d.ts +156 -0
  254. package/dist/packages/server/src/events/admin.js +255 -0
  255. package/dist/packages/server/src/events/admin.js.map +1 -0
  256. package/dist/packages/server/src/events/deliver.d.ts +43 -0
  257. package/dist/packages/server/src/events/deliver.js +129 -0
  258. package/dist/packages/server/src/events/deliver.js.map +1 -0
  259. package/dist/packages/server/src/events/runtime.d.ts +28 -0
  260. package/dist/packages/server/src/events/runtime.js +400 -0
  261. package/dist/packages/server/src/events/runtime.js.map +1 -0
  262. package/dist/packages/server/src/events/store.d.ts +172 -0
  263. package/dist/packages/server/src/events/store.js +275 -0
  264. package/dist/packages/server/src/events/store.js.map +1 -0
  265. package/dist/packages/server/src/index.d.ts +40 -0
  266. package/dist/packages/server/src/index.js +186 -0
  267. package/dist/packages/server/src/index.js.map +1 -0
  268. package/dist/packages/server/src/migrate.d.ts +11 -0
  269. package/dist/packages/server/src/migrate.js +134 -0
  270. package/dist/packages/server/src/migrate.js.map +1 -0
  271. package/dist/packages/server/src/openapi.d.ts +4 -0
  272. package/dist/packages/server/src/openapi.js +101 -0
  273. package/dist/packages/server/src/openapi.js.map +1 -0
  274. package/dist/packages/server/src/queue.d.ts +10 -0
  275. package/dist/packages/server/src/queue.js +45 -0
  276. package/dist/packages/server/src/queue.js.map +1 -0
  277. package/dist/packages/server/src/secrets.d.ts +19 -0
  278. package/dist/packages/server/src/secrets.js +76 -0
  279. package/dist/packages/server/src/secrets.js.map +1 -0
  280. package/dist/packages/server/src/server.d.ts +1 -0
  281. package/dist/packages/server/src/server.js +82 -0
  282. package/dist/packages/server/src/server.js.map +1 -0
  283. package/dist/packages/server/src/service.d.ts +767 -0
  284. package/dist/packages/server/src/service.js +924 -0
  285. package/dist/packages/server/src/service.js.map +1 -0
  286. package/dist/packages/server/src/store.d.ts +157 -0
  287. package/dist/packages/server/src/store.js +415 -0
  288. package/dist/packages/server/src/store.js.map +1 -0
  289. package/dist/packages/server/src/teams/activity.d.ts +123 -0
  290. package/dist/packages/server/src/teams/activity.js +188 -0
  291. package/dist/packages/server/src/teams/activity.js.map +1 -0
  292. package/dist/packages/server/src/teams/admin.d.ts +335 -0
  293. package/dist/packages/server/src/teams/admin.js +699 -0
  294. package/dist/packages/server/src/teams/admin.js.map +1 -0
  295. package/dist/packages/server/src/teams/approval.d.ts +57 -0
  296. package/dist/packages/server/src/teams/approval.js +118 -0
  297. package/dist/packages/server/src/teams/approval.js.map +1 -0
  298. package/dist/packages/server/src/teams/bot.d.ts +25 -0
  299. package/dist/packages/server/src/teams/bot.js +124 -0
  300. package/dist/packages/server/src/teams/bot.js.map +1 -0
  301. package/dist/packages/server/src/teams/claude.d.ts +46 -0
  302. package/dist/packages/server/src/teams/claude.js +165 -0
  303. package/dist/packages/server/src/teams/claude.js.map +1 -0
  304. package/dist/packages/server/src/teams/jwt.d.ts +17 -0
  305. package/dist/packages/server/src/teams/jwt.js +121 -0
  306. package/dist/packages/server/src/teams/jwt.js.map +1 -0
  307. package/dist/packages/server/src/teams/package.d.ts +79 -0
  308. package/dist/packages/server/src/teams/package.js +319 -0
  309. package/dist/packages/server/src/teams/package.js.map +1 -0
  310. package/dist/packages/server/src/teams/provision.d.ts +84 -0
  311. package/dist/packages/server/src/teams/provision.js +505 -0
  312. package/dist/packages/server/src/teams/provision.js.map +1 -0
  313. package/dist/packages/server/src/teams/runner.d.ts +80 -0
  314. package/dist/packages/server/src/teams/runner.js +187 -0
  315. package/dist/packages/server/src/teams/runner.js.map +1 -0
  316. package/dist/packages/server/src/teams/runtime.d.ts +91 -0
  317. package/dist/packages/server/src/teams/runtime.js +679 -0
  318. package/dist/packages/server/src/teams/runtime.js.map +1 -0
  319. package/dist/packages/server/src/teams/store.d.ts +233 -0
  320. package/dist/packages/server/src/teams/store.js +507 -0
  321. package/dist/packages/server/src/teams/store.js.map +1 -0
  322. package/package.json +68 -4
@@ -0,0 +1,42 @@
1
+ import dellTechdirect from "../../../connectors/dell-techdirect/index.js";
2
+ import dynamics365 from "../../../connectors/dynamics-365/index.js";
3
+ import entra from "../../../connectors/entra/index.js";
4
+ import fedex from "../../../connectors/fedex/index.js";
5
+ import gong from "../../../connectors/gong/index.js";
6
+ import intune from "../../../connectors/intune/index.js";
7
+ import jamf from "../../../connectors/jamf/index.js";
8
+ import jira from "../../../connectors/jira/index.js";
9
+ import netsuite from "../../../connectors/netsuite/index.js";
10
+ import okta from "../../../connectors/okta/index.js";
11
+ import outlookCalendar from "../../../connectors/outlook-calendar/index.js";
12
+ import outlookMail from "../../../connectors/outlook-mail/index.js";
13
+ import salesforce from "../../../connectors/salesforce/index.js";
14
+ import sapS4hana from "../../../connectors/sap-s4hana/index.js";
15
+ import servicenow from "../../../connectors/servicenow/index.js";
16
+ import sharepointFiles from "../../../connectors/sharepoint-files/index.js";
17
+ import slack from "../../../connectors/slack/index.js";
18
+ import teams from "../../../connectors/teams/index.js";
19
+ import workday from "../../../connectors/workday/index.js";
20
+ /** The code behind each connector folder in connectors/ (index.ts beside its connector.json). */
21
+ export const builtinConnectors = [
22
+ jira,
23
+ outlookMail,
24
+ outlookCalendar,
25
+ sharepointFiles,
26
+ salesforce,
27
+ servicenow,
28
+ fedex,
29
+ dellTechdirect,
30
+ teams,
31
+ entra,
32
+ intune,
33
+ slack,
34
+ okta,
35
+ jamf,
36
+ sapS4hana,
37
+ workday,
38
+ netsuite,
39
+ dynamics365,
40
+ gong,
41
+ ];
42
+ //# sourceMappingURL=builtin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"builtin.js","sourceRoot":"","sources":["../../../../packages/server/src/builtin.ts"],"names":[],"mappings":"AAAA,OAAO,cAAc,MAAM,8CAA8C,CAAC;AAC1E,OAAO,WAAW,MAAM,2CAA2C,CAAC;AACpE,OAAO,KAAK,MAAM,oCAAoC,CAAC;AACvD,OAAO,KAAK,MAAM,oCAAoC,CAAC;AACvD,OAAO,IAAI,MAAM,mCAAmC,CAAC;AACrD,OAAO,MAAM,MAAM,qCAAqC,CAAC;AACzD,OAAO,IAAI,MAAM,mCAAmC,CAAC;AACrD,OAAO,IAAI,MAAM,mCAAmC,CAAC;AACrD,OAAO,QAAQ,MAAM,uCAAuC,CAAC;AAC7D,OAAO,IAAI,MAAM,mCAAmC,CAAC;AACrD,OAAO,eAAe,MAAM,+CAA+C,CAAC;AAC5E,OAAO,WAAW,MAAM,2CAA2C,CAAC;AACpE,OAAO,UAAU,MAAM,yCAAyC,CAAC;AACjE,OAAO,SAAS,MAAM,yCAAyC,CAAC;AAChE,OAAO,UAAU,MAAM,yCAAyC,CAAC;AACjE,OAAO,eAAe,MAAM,+CAA+C,CAAC;AAC5E,OAAO,KAAK,MAAM,oCAAoC,CAAC;AACvD,OAAO,KAAK,MAAM,oCAAoC,CAAC;AACvD,OAAO,OAAO,MAAM,sCAAsC,CAAC;AAM3D,iGAAiG;AACjG,MAAM,CAAC,MAAM,iBAAiB,GAAoB;IAChD,IAAI;IACJ,WAAW;IACX,eAAe;IACf,eAAe;IACf,UAAU;IACV,UAAU;IACV,KAAK;IACL,cAAc;IACd,KAAK;IACL,KAAK;IACL,MAAM;IACN,KAAK;IACL,IAAI;IACJ,IAAI;IACJ,SAAS;IACT,OAAO;IACP,QAAQ;IACR,WAAW;IACX,IAAI;CACL,CAAC"}
@@ -0,0 +1,27 @@
1
+ export type ConsentState = {
2
+ org: string;
3
+ app: string;
4
+ ceiling: string[];
5
+ redirectUri: string;
6
+ tenant?: string;
7
+ nonce: string;
8
+ exp: number;
9
+ };
10
+ export declare const signInNonce: (nonce: string) => string;
11
+ export declare function signState(key: Buffer, input: {
12
+ org: string;
13
+ app: string;
14
+ ceiling: string[];
15
+ redirectUri: string;
16
+ tenant?: string;
17
+ }, now?: number, nonce?: string): {
18
+ state: string;
19
+ nonce: string;
20
+ };
21
+ export declare function verifyState(key: Buffer, state: string, expect: {
22
+ org: string;
23
+ app: string;
24
+ nonce: string;
25
+ }, now?: number): ConsentState;
26
+ /** The app a state names, unverified: only to choose what verifyState then checks it against. */
27
+ export declare function stateApp(state: string): string | null;
@@ -0,0 +1,36 @@
1
+ import { createHash, createHmac, randomBytes } from "node:crypto";
2
+ import { tokensEqual } from "./secrets.js";
3
+ import { ConnectError } from "../../connector-kit/src/types.js";
4
+ // The OpenID Connect nonce for the sign-in leg. Derived, so the browser-held nonce itself
5
+ // never appears in a URL.
6
+ export const signInNonce = (nonce) => createHash("sha256").update(`sign-in:${nonce}`).digest("base64url");
7
+ const TTL_MS = 15 * 60 * 1000;
8
+ const mac = (key, body) => createHmac("sha256", key).update(body).digest("base64url");
9
+ export function signState(key, input, now = Date.now(), nonce = randomBytes(16).toString("base64url")) {
10
+ const body = Buffer.from(JSON.stringify({ ...input, nonce, exp: now + TTL_MS })).toString("base64url");
11
+ return { state: `${body}.${mac(key, body)}`, nonce };
12
+ }
13
+ export function verifyState(key, state, expect, now = Date.now()) {
14
+ const [body, sig, extra] = state.split(".");
15
+ if (!body || !sig || extra !== undefined || !tokensEqual(sig, mac(key, body)))
16
+ throw new ConnectError("This approval did not start here. Start again from Integrations.");
17
+ const parsed = JSON.parse(Buffer.from(body, "base64url").toString("utf8"));
18
+ if (parsed.org !== expect.org ||
19
+ parsed.app !== expect.app ||
20
+ !tokensEqual(parsed.nonce, expect.nonce))
21
+ throw new ConnectError("This approval did not start here. Start again from Integrations.");
22
+ if (!(parsed.exp > now))
23
+ throw new ConnectError("This approval took too long. Start again.");
24
+ return parsed;
25
+ }
26
+ /** The app a state names, unverified: only to choose what verifyState then checks it against. */
27
+ export function stateApp(state) {
28
+ try {
29
+ const app = JSON.parse(Buffer.from(state.split(".")[0], "base64url").toString("utf8")).app;
30
+ return typeof app === "string" ? app : null;
31
+ }
32
+ catch {
33
+ return null;
34
+ }
35
+ }
36
+ //# sourceMappingURL=consent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"consent.js","sourceRoot":"","sources":["../../../../packages/server/src/consent.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,156 @@
1
+ import { z } from "zod";
2
+ import type { Connector } from "../../../connector-kit/src/connector.js";
3
+ import { type VendorRequest, type VendorResponse } from "../../../connector-kit/src/types.js";
4
+ import type { CredentialKey } from "../secrets.js";
5
+ import type { Store } from "../store.js";
6
+ import { type TriggerRunner } from "../teams/runner.js";
7
+ import type { EventsStore } from "./store.js";
8
+ type Steps = NonNullable<NonNullable<Connector["events"]>["webhook"]>["setup"];
9
+ export declare const subscriptionSchema: z.ZodObject<{
10
+ app: z.ZodString;
11
+ source: z.ZodEnum<{
12
+ webhook: "webhook";
13
+ poll: "poll";
14
+ }>;
15
+ filter: z.ZodDefault<z.ZodString>;
16
+ intervalSeconds: z.ZodDefault<z.ZodNumber>;
17
+ register: z.ZodDefault<z.ZodBoolean>;
18
+ by: z.ZodString;
19
+ }, z.core.$strip>;
20
+ export declare const eventTriggerSchema: z.ZodObject<{
21
+ enabled: z.ZodBoolean;
22
+ eventTypes: z.ZodArray<z.ZodString>;
23
+ conditions: z.ZodDefault<z.ZodArray<z.ZodUnion<readonly [z.ZodObject<{
24
+ field: z.ZodString;
25
+ in: z.ZodArray<z.ZodString>;
26
+ }, z.core.$strict>, z.ZodObject<{
27
+ field: z.ZodString;
28
+ notIn: z.ZodArray<z.ZodString>;
29
+ }, z.core.$strict>]>>>;
30
+ prompt: z.ZodString;
31
+ runner: z.ZodDefault<z.ZodString>;
32
+ managedAgentId: z.ZodOptional<z.ZodString>;
33
+ environmentId: z.ZodOptional<z.ZodString>;
34
+ vaultIds: z.ZodDefault<z.ZodArray<z.ZodString>>;
35
+ settings: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
36
+ signingSecret: z.ZodOptional<z.ZodString>;
37
+ budgetCents: z.ZodNumber;
38
+ maxRunsPerHour: z.ZodDefault<z.ZodNumber>;
39
+ maxCentsPerDay: z.ZodDefault<z.ZodNumber>;
40
+ maxConcurrent: z.ZodDefault<z.ZodNumber>;
41
+ by: z.ZodString;
42
+ }, z.core.$strip>;
43
+ export declare function createEventsAdmin(deps: {
44
+ store: Store;
45
+ events: EventsStore;
46
+ key: CredentialKey;
47
+ connectors: Map<string, Connector>;
48
+ appCall(org: string, app: string, request: VendorRequest): Promise<VendorResponse | null>;
49
+ runners: Map<string, TriggerRunner>;
50
+ publicUrl: string | null;
51
+ }): {
52
+ subscriptions(org: string): Promise<{
53
+ url: string | null;
54
+ id: string;
55
+ connectorId: string;
56
+ source: "webhook" | "poll";
57
+ filter: string;
58
+ intervalSeconds: number;
59
+ cursor: string | null;
60
+ polledAt: string | null;
61
+ lastError: string | null;
62
+ registered: string | null;
63
+ createdBy: string;
64
+ createdAt: string;
65
+ }[]>;
66
+ /** The secret is in this answer only. */
67
+ subscribe(org: string, input: z.output<typeof subscriptionSchema>): Promise<{
68
+ subscription: {
69
+ url: string | null;
70
+ id: string;
71
+ connectorId: string;
72
+ source: "webhook" | "poll";
73
+ filter: string;
74
+ intervalSeconds: number;
75
+ cursor: string | null;
76
+ polledAt: string | null;
77
+ lastError: string | null;
78
+ registered: string | null;
79
+ createdBy: string;
80
+ createdAt: string;
81
+ };
82
+ secret: string | null;
83
+ setup: Steps;
84
+ registration: {
85
+ ok: boolean;
86
+ message: string;
87
+ } | null;
88
+ }>;
89
+ rotateSecret(org: string, subId: string, who: string): Promise<{
90
+ subscription: {
91
+ url: string | null;
92
+ id: string;
93
+ connectorId: string;
94
+ source: "webhook" | "poll";
95
+ filter: string;
96
+ intervalSeconds: number;
97
+ cursor: string | null;
98
+ polledAt: string | null;
99
+ lastError: string | null;
100
+ registered: string | null;
101
+ createdBy: string;
102
+ createdAt: string;
103
+ };
104
+ secret: string;
105
+ } | null>;
106
+ unsubscribe(org: string, subId: string, who: string): Promise<boolean>;
107
+ triggers(org: string, agentId: string): Promise<{
108
+ hasSigningSecret: boolean;
109
+ id: string;
110
+ agentId: string;
111
+ connectorId: string;
112
+ enabled: boolean;
113
+ eventTypes: string[];
114
+ conditions: import("./store.js").Condition[];
115
+ prompt: string;
116
+ runner: string;
117
+ settings: Record<string, unknown>;
118
+ managedAgentId: string | null;
119
+ environmentId: string | null;
120
+ vaultIds: string[];
121
+ budgetCents: number;
122
+ maxRunsPerHour: number;
123
+ maxCentsPerDay: number;
124
+ maxConcurrent: number;
125
+ updatedBy: string | null;
126
+ updatedAt: string;
127
+ }[]>;
128
+ setTrigger(org: string, agentId: string, app: string, input: z.output<typeof eventTriggerSchema>): Promise<{
129
+ hasSigningSecret: boolean;
130
+ id: string;
131
+ agentId: string;
132
+ connectorId: string;
133
+ enabled: boolean;
134
+ eventTypes: string[];
135
+ conditions: import("./store.js").Condition[];
136
+ prompt: string;
137
+ runner: string;
138
+ settings: Record<string, unknown>;
139
+ managedAgentId: string | null;
140
+ environmentId: string | null;
141
+ vaultIds: string[];
142
+ budgetCents: number;
143
+ maxRunsPerHour: number;
144
+ maxCentsPerDay: number;
145
+ maxConcurrent: number;
146
+ updatedBy: string | null;
147
+ updatedAt: string;
148
+ } | null>;
149
+ removeTrigger(org: string, agentId: string, app: string, who: string): Promise<boolean>;
150
+ runs(org: string, agentId: string, limit: number): Promise<import("./store.js").EventRunRow[]>;
151
+ };
152
+ export type EventsAdmin = ReturnType<typeof createEventsAdmin>;
153
+ /** During a key rotation, moves every webhook and trigger secret still sealed with an old key
154
+ * onto the current one. */
155
+ export declare function resealEventSecrets(events: EventsStore, key: CredentialKey): Promise<number>;
156
+ export {};
@@ -0,0 +1,255 @@
1
+ import { randomBytes, randomUUID } from "node:crypto";
2
+ import { z } from "zod";
3
+ import { brand } from "../../../connector-kit/src/branding.js";
4
+ import { ConnectError, } from "../../../connector-kit/src/types.js";
5
+ import { InvalidInput } from "../service.js";
6
+ import { CLAUDE_RUNNER } from "../teams/runner.js";
7
+ import { fill, rawAt } from "./deliver.js";
8
+ import { eventTriggerAad, subscriptionAad } from "./runtime.js";
9
+ const id = z.string().regex(/^[A-Za-z0-9_-]{1,128}$/);
10
+ const by = z.string().trim().min(1).max(200);
11
+ export const subscriptionSchema = z.object({
12
+ app: z.string().regex(/^[a-z0-9-]+$/),
13
+ source: z.enum(["webhook", "poll"]),
14
+ // In the app's own terms, e.g. Jira JQL: what it sends, or what a poll reads.
15
+ filter: z.string().max(2000).default(""),
16
+ intervalSeconds: z.number().int().min(60).max(86400).default(300),
17
+ // Webhooks: register it through the app's API with the connection, where the app allows.
18
+ register: z.boolean().default(false),
19
+ by,
20
+ });
21
+ const condition = z.union([
22
+ z.strictObject({ field: z.string(), in: z.array(z.string().max(500)).min(1).max(100) }),
23
+ z.strictObject({ field: z.string(), notIn: z.array(z.string().max(500)).min(1).max(100) }),
24
+ ]);
25
+ export const eventTriggerSchema = z
26
+ .object({
27
+ enabled: z.boolean(),
28
+ eventTypes: z.array(z.string().max(100)).min(1).max(50),
29
+ // All must hold, on the event's fields (the app's `events.fields`).
30
+ conditions: z.array(condition).max(20).default([]),
31
+ // What the agent is asked to do; {app} and {event} are filled in. The event's data follows.
32
+ prompt: z.string().trim().min(1).max(4000),
33
+ runner: z
34
+ .string()
35
+ .regex(/^[a-z][a-z0-9-]{1,40}$/)
36
+ .default(CLAUDE_RUNNER),
37
+ managedAgentId: id.optional(),
38
+ environmentId: id.optional(),
39
+ vaultIds: z.array(id).max(20).default([]),
40
+ settings: z.record(z.string(), z.unknown()).default({}),
41
+ signingSecret: z.string().min(32).max(256).optional(),
42
+ budgetCents: z.number().int().min(1).max(2000),
43
+ maxRunsPerHour: z.number().int().min(1).max(100).default(20),
44
+ maxCentsPerDay: z.number().int().min(1).max(100_000).default(500),
45
+ maxConcurrent: z.number().int().min(1).max(10).default(2),
46
+ by,
47
+ })
48
+ .refine((t) => t.maxCentsPerDay >= t.budgetCents, {
49
+ message: "The daily limit must be at least the limit per run",
50
+ path: ["maxCentsPerDay"],
51
+ });
52
+ export function createEventsAdmin(deps) {
53
+ const { store, events, key } = deps;
54
+ const log = (org, who, app, action, target) => store.audit({
55
+ organizationId: org,
56
+ agentId: null,
57
+ agentName: who,
58
+ connectorId: app,
59
+ tool: `admin:${action}`,
60
+ target,
61
+ decision: "allowed",
62
+ reason: null,
63
+ vendorStatus: null,
64
+ });
65
+ function eventsOf(app) {
66
+ const connector = deps.connectors.get(app);
67
+ if (!connector?.events)
68
+ throw new InvalidInput(`${app} has no events agents can start from`);
69
+ return { connector, events: connector.events };
70
+ }
71
+ const urlOf = (sub) => sub.source === "webhook" && deps.publicUrl ? `${deps.publicUrl}/events/${sub.id}` : null;
72
+ function publicSubscription(sub) {
73
+ const { secret: _s, secretKeyId: _k, organizationId: _o, ...rest } = sub;
74
+ return { ...rest, url: urlOf(sub) };
75
+ }
76
+ function publicTrigger(row) {
77
+ const { secret, secretKeyId: _k, ...rest } = row;
78
+ return { ...rest, hasSigningSecret: secret !== null };
79
+ }
80
+ const newSecret = () => randomBytes(32).toString("hex");
81
+ // Live runs of a trigger are stopped before it changes runner or goes.
82
+ async function stopRuns(org, triggerId, runner) {
83
+ for (const run of await events.runningRuns()) {
84
+ if (run.triggerId !== triggerId || (runner && run.runner !== runner))
85
+ continue;
86
+ await deps.runners.get(run.runner)?.stop(run.sessionId, org);
87
+ await events.updateRun(run.id, { state: "failed", error: "Stopped by an administrator" });
88
+ }
89
+ }
90
+ return {
91
+ async subscriptions(org) {
92
+ return (await events.subscriptions(org)).map(publicSubscription);
93
+ },
94
+ /** The secret is in this answer only. */
95
+ async subscribe(org, input) {
96
+ const { connector, events: declared } = eventsOf(input.app);
97
+ const hook = declared.webhook;
98
+ if (input.source === "webhook" && !hook)
99
+ throw new InvalidInput(`${connector.name} sends no webhooks; read it on an interval instead`);
100
+ if (input.source === "poll" && !declared.poll)
101
+ throw new InvalidInput(`${connector.name} cannot be read on an interval; use its webhook`);
102
+ if (!(await store.getConnection(org, input.app)))
103
+ throw new InvalidInput(`Connect ${connector.name} first`);
104
+ if (input.source === "webhook" && !deps.publicUrl)
105
+ throw new ConnectError("This deployment has no public address for the app to send to");
106
+ const subId = randomUUID();
107
+ const secret = input.source === "webhook" ? newSecret() : null;
108
+ const sealed = secret ? key.seal({ secret }, subscriptionAad(org, subId)) : null;
109
+ const sub = await events.createSubscription({
110
+ id: subId,
111
+ organizationId: org,
112
+ connectorId: input.app,
113
+ source: input.source,
114
+ secret: sealed?.ciphertext ?? null,
115
+ secretKeyId: sealed?.keyId ?? null,
116
+ filter: input.filter,
117
+ intervalSeconds: input.intervalSeconds,
118
+ // A poll starts from now: what changed before it is not news.
119
+ cursor: input.source === "poll" ? new Date().toISOString() : null,
120
+ createdBy: input.by,
121
+ });
122
+ if (!sub)
123
+ throw new InvalidInput(`${connector.name} already sends events here; remove that first`);
124
+ const url = urlOf(sub);
125
+ let registration = null;
126
+ if (input.register && hook?.register && url && secret) {
127
+ const res = await deps.appCall(org, input.app, fill(hook.register, {
128
+ name: `${brand().productName} events`,
129
+ url,
130
+ secret,
131
+ events: declared.types.map((t) => t.id),
132
+ filter: input.filter,
133
+ }));
134
+ const location = res && res.status < 300 ? rawAt(res.data, hook.register.location) : null;
135
+ if (res && res.status >= 200 && res.status < 300) {
136
+ await events.setRegistered(sub.id, typeof location === "string" ? location : "yes");
137
+ registration = { ok: true, message: `Registered in ${connector.name}` };
138
+ }
139
+ else
140
+ registration = {
141
+ ok: false,
142
+ message: `${connector.name} did not let its connection register the webhook (${res?.status ?? "not connected"}). Add it by hand with the steps.`,
143
+ };
144
+ }
145
+ await log(org, input.by, input.app, "subscribe_events", `${input.source} ${sub.id}`);
146
+ const fresh = (await events.subscription(sub.id));
147
+ return {
148
+ subscription: publicSubscription(fresh),
149
+ secret,
150
+ setup: (input.source === "webhook" ? hook.setup : []).map((step) => fill(step, { url: url ?? "", filter: input.filter || "(none)" })),
151
+ registration,
152
+ };
153
+ },
154
+ async rotateSecret(org, subId, who) {
155
+ const sub = await events.subscription(subId);
156
+ if (!sub || sub.organizationId !== org || sub.source !== "webhook")
157
+ return null;
158
+ const secret = newSecret();
159
+ const sealed = key.seal({ secret }, subscriptionAad(org, subId));
160
+ if (!(await events.setSecret(org, subId, sealed.ciphertext, sealed.keyId)))
161
+ return null;
162
+ await log(org, who, sub.connectorId, "rotate_event_secret", subId);
163
+ return { subscription: publicSubscription(sub), secret };
164
+ },
165
+ async unsubscribe(org, subId, who) {
166
+ const sub = await events.deleteSubscription(org, subId);
167
+ if (sub)
168
+ await log(org, who, sub.connectorId, "unsubscribe_events", subId);
169
+ return sub !== null;
170
+ },
171
+ async triggers(org, agentId) {
172
+ return (await events.agentTriggers(org, agentId)).map(publicTrigger);
173
+ },
174
+ // Proven by its runner first, as Teams triggers are.
175
+ async setTrigger(org, agentId, app, input) {
176
+ const { connector, events: declared } = eventsOf(app);
177
+ const { by: who, signingSecret, settings: rawSettings, ...rest } = input;
178
+ const unknownType = rest.eventTypes.find((t) => !declared.types.some((x) => x.id === t));
179
+ if (unknownType)
180
+ throw new InvalidInput(`${connector.name} has no event ${unknownType}`);
181
+ const unknownField = rest.conditions.find((c) => !(c.field in declared.fields));
182
+ if (unknownField)
183
+ throw new InvalidInput(`${connector.name} events have no field ${unknownField.field}; they have ${Object.keys(declared.fields).join(", ")}`);
184
+ const runner = deps.runners.get(rest.runner);
185
+ if (!runner?.startEvent)
186
+ throw new InvalidInput(`This deployment offers no runner ${rest.runner} for app events`);
187
+ const settings = runner.settings.safeParse(rawSettings);
188
+ if (!settings.success)
189
+ throw new InvalidInput(z.prettifyError(settings.error));
190
+ if (!deps.publicUrl)
191
+ throw new ConnectError("This deployment has no public address");
192
+ const existing = await events.trigger(org, agentId, app);
193
+ const aad = eventTriggerAad(org, agentId, app);
194
+ const sealed = signingSecret
195
+ ? key.seal({ secret: signingSecret }, aad)
196
+ : existing?.secret
197
+ ? { ciphertext: existing.secret, keyId: existing.secretKeyId }
198
+ : null;
199
+ const row = {
200
+ ...rest,
201
+ agentId,
202
+ connectorId: app,
203
+ managedAgentId: rest.managedAgentId ?? null,
204
+ environmentId: rest.environmentId ?? null,
205
+ settings: settings.data,
206
+ secret: sealed?.ciphertext ?? null,
207
+ secretKeyId: sealed?.keyId ?? null,
208
+ updatedBy: who,
209
+ };
210
+ const secret = sealed ? key.open(sealed, aad).secret : null;
211
+ await runner.verify(row, org, secret, "save");
212
+ if (existing && existing.runner !== rest.runner)
213
+ await stopRuns(org, existing.id, existing.runner);
214
+ if (!(await events.setTrigger(org, row)))
215
+ return null;
216
+ await log(org, who, app, "set_event_trigger", `agent ${agentId} ${rest.enabled ? "on" : "off"} ${rest.eventTypes.join(", ")} runner ${rest.runner} budget ${rest.budgetCents}c`);
217
+ return publicTrigger((await events.trigger(org, agentId, app)));
218
+ },
219
+ async removeTrigger(org, agentId, app, who) {
220
+ const existing = await events.trigger(org, agentId, app);
221
+ if (!existing)
222
+ return false;
223
+ await stopRuns(org, existing.id);
224
+ if (!(await events.removeTrigger(org, agentId, app)))
225
+ return false;
226
+ await log(org, who, app, "remove_event_trigger", `agent ${agentId}`);
227
+ return true;
228
+ },
229
+ async runs(org, agentId, limit) {
230
+ return events.recentRuns(org, agentId, limit);
231
+ },
232
+ };
233
+ }
234
+ /** During a key rotation, moves every webhook and trigger secret still sealed with an old key
235
+ * onto the current one. */
236
+ export async function resealEventSecrets(events, key) {
237
+ if (!key.previousIds.length)
238
+ return 0;
239
+ const stale = await events.staleSecrets(key.id);
240
+ let n = 0;
241
+ for (const s of stale.subscriptions) {
242
+ const aad = subscriptionAad(s.organizationId, s.id);
243
+ const sealed = key.seal(key.open({ ciphertext: s.secret, keyId: s.secretKeyId }, aad), aad);
244
+ if (await events.reseal("event_subscriptions", s.id, s.secret, sealed.ciphertext, sealed.keyId))
245
+ n++;
246
+ }
247
+ for (const t of stale.triggers) {
248
+ const aad = eventTriggerAad(t.organizationId, t.agentId, t.connectorId);
249
+ const sealed = key.seal(key.open({ ciphertext: t.secret, keyId: t.secretKeyId }, aad), aad);
250
+ if (await events.reseal("event_triggers", t.id, t.secret, sealed.ciphertext, sealed.keyId))
251
+ n++;
252
+ }
253
+ return n;
254
+ }
255
+ //# sourceMappingURL=admin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin.js","sourceRoot":"","sources":["../../../../../packages/server/src/events/admin.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ import type { ConnectorEvents } from "../../../connector-kit/src/connector.js";
2
+ import type { Condition } from "./store.js";
3
+ type Webhook = NonNullable<ConnectorEvents["webhook"]>;
4
+ type Locator = Webhook["type"];
5
+ export type Scalar = string | number | boolean;
6
+ export type EventData = Record<string, Scalar | Scalar[] | null>;
7
+ /** A dot path's value in JSON, as is (no `[]`). */
8
+ export declare function rawAt(data: unknown, path: string): unknown;
9
+ /** A path's value: the list of scalars for a path through `[]`, else one scalar or null.
10
+ * Objects are left out; text is cut to 2000 characters, lists to 50 items. */
11
+ export declare function valueAt(data: unknown, path: string): Scalar | Scalar[] | null;
12
+ export declare function locate(at: Locator, body: unknown, headers: Headers): string | null;
13
+ /** Whether the delivery carries the subscription's proof. Constant time for both kinds. */
14
+ export declare function signed(verify: Webhook["verify"], secret: string, body: Buffer, headers: Headers): boolean;
15
+ /** Within the replay window. A missing or unreadable time is not. */
16
+ export declare function fresh(ts: NonNullable<Webhook["timestamp"]>, body: unknown, headers: Headers, now?: number): boolean;
17
+ export declare const bodyHash: (body: Buffer) => string;
18
+ /** The fields the connector keeps: all an agent, a condition or a limit ever reads. */
19
+ export declare function pickFields(fields: Record<string, string>, body: unknown): EventData;
20
+ /** The first of the agent's limits the event is outside of, or null. A limit left empty
21
+ * allows everything; a set one needs every value of the event's field within it (an event
22
+ * missing the field is outside it). */
23
+ export declare function outsideLimits(eventLimits: Record<string, string>, data: EventData, limits: Record<string, unknown>): string | null;
24
+ /** The first condition the event fails, or null. `in`: one of the field's values (any item of
25
+ * a list) is listed; `notIn`: none is. */
26
+ export declare function failedCondition(conditions: Condition[], data: EventData): Condition | null;
27
+ /** Fills {name} placeholders in a request: a string that is only a placeholder takes the
28
+ * value as is (a list stays a list), others have it written in. */
29
+ export declare function fill(value: unknown, vars: Record<string, string | string[]>): unknown;
30
+ /** The admin's instructions, then the event: its data quoted as untrusted, since people in
31
+ * the app wrote it. Only trusted values ({app}, {event}: the app's name and the declared
32
+ * event's label) are filled into the instructions. */
33
+ export declare function eventPrompt(input: {
34
+ prompt: string;
35
+ appName: string;
36
+ type: {
37
+ id: string;
38
+ label: string;
39
+ };
40
+ deliveryId: string;
41
+ data: EventData;
42
+ }): string;
43
+ export {};