@arbium/enterprise-agent-connect 0.0.0-stage → 0.1.2-dev.75145ef

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 +404 -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,189 @@
1
+ import { retryAfter, vendorFetch } from "../../packages/connector-kit/src/fetch.js";
2
+ import { ConnectError, } from "../../packages/connector-kit/src/types.js";
3
+ // A Slack app's bot token (xoxb-), made from the manifest in the setup steps and installed to
4
+ // one workspace. Web API methods at slack.com/api/<method>: reads as GET with query arguments,
5
+ // writes as POST JSON (docs.slack.dev/apis/web-api). Slack answers most
6
+ // failures 200 with {ok: false, error}; call() turns those into a status so the service's
7
+ // probes and the tools' VendorFailed treat them like any app's refusal.
8
+ const API = "https://slack.com/api";
9
+ // Where files.getUploadURLExternal points the file's bytes; the only other host called.
10
+ const UPLOAD_HOST = "files.slack.com";
11
+ const STATUS = {
12
+ not_authed: 401,
13
+ invalid_auth: 401,
14
+ account_inactive: 401,
15
+ token_revoked: 401,
16
+ token_expired: 401,
17
+ missing_scope: 403,
18
+ not_allowed_token_type: 403,
19
+ no_permission: 403,
20
+ restricted_action: 403,
21
+ ekm_access_denied: 403,
22
+ channel_not_found: 404,
23
+ message_not_found: 404,
24
+ thread_not_found: 404,
25
+ users_not_found: 404,
26
+ user_not_found: 404,
27
+ ratelimited: 429,
28
+ };
29
+ // Slack's error codes in words an agent or admin can act on; others are passed as they are.
30
+ const WORDS = {
31
+ not_in_channel: "the app is not a member of that channel. Someone in the channel can add it with /invite",
32
+ channel_not_found: "no channel with that id is visible to the app",
33
+ is_archived: "that channel is archived",
34
+ message_not_found: "no message with that timestamp in that channel",
35
+ thread_not_found: "no thread with that timestamp in that channel",
36
+ cant_delete_message: "the app can delete only its own messages",
37
+ msg_too_long: "the message is too long",
38
+ no_text: "the message is empty",
39
+ invalid_name: "no emoji with that name",
40
+ too_many_reactions: "that message has too many reactions",
41
+ users_not_found: "no person with that email address",
42
+ missing_scope: "the Slack app lacks a permission this needs",
43
+ invalid_auth: "Slack no longer accepts the app's token",
44
+ token_revoked: "the app's token was revoked",
45
+ account_inactive: "the app was uninstalled or its token deactivated",
46
+ };
47
+ export function slackError(res) {
48
+ const d = res.data;
49
+ if (res.status === 429) {
50
+ const after = typeof d?.retry_after === "number" ? ` Try again in ${d.retry_after} seconds.` : "";
51
+ return `Slack is limiting how often the app may call it.${after}`;
52
+ }
53
+ const code = typeof d?.error === "string" ? d.error : null;
54
+ if (!code)
55
+ return `Slack answered ${res.status}`;
56
+ const needed = code === "missing_scope" && typeof d?.needed === "string" ? ` (${d.needed})` : "";
57
+ return `Slack answered ${code}: ${WORDS[code] ?? code.replaceAll("_", " ")}${needed}`;
58
+ }
59
+ export function slackVendor(unguarded = fetch, wait) {
60
+ const fetchImpl = vendorFetch("Slack", unguarded, wait);
61
+ async function send(token, request) {
62
+ const upload = request.path.startsWith("https://");
63
+ if (upload && new URL(request.path).host !== UPLOAD_HOST)
64
+ throw new Error("Slack upload address on an unexpected host");
65
+ const res = await fetchImpl(upload ? request.path : `${API}${request.path}`, {
66
+ method: request.method,
67
+ headers: upload
68
+ ? { "content-type": "application/octet-stream" }
69
+ : {
70
+ authorization: `Bearer ${token}`,
71
+ ...(request.body === undefined
72
+ ? {}
73
+ : { "content-type": "application/json; charset=utf-8" }),
74
+ },
75
+ body: request.body === undefined
76
+ ? undefined
77
+ : upload
78
+ ? String(request.body)
79
+ : JSON.stringify(request.body),
80
+ });
81
+ const raw = await res.text();
82
+ const headers = Object.fromEntries(res.headers);
83
+ if (res.status === 429) {
84
+ const data = {
85
+ ok: false,
86
+ error: "ratelimited",
87
+ retry_after: retryAfter(res.headers.get("retry-after")),
88
+ };
89
+ return { headers: res.headers, response: { status: 429, data, headers } };
90
+ }
91
+ const data = raw ? parse(raw) : null;
92
+ const error = !upload && res.ok ? refusal(data) : null;
93
+ const status = error === null ? res.status : (STATUS[error] ?? 400);
94
+ return { headers: res.headers, response: { status, data, headers } };
95
+ }
96
+ const token = (c) => {
97
+ const t = c.secret.bot_token;
98
+ if (!t)
99
+ throw new Error("Slack connection has no bot token");
100
+ return t;
101
+ };
102
+ const call = async (c, request) => (await send(token(c), request)).response;
103
+ return {
104
+ async connect(fields) {
105
+ const botToken = fields.bot_token?.trim() ?? "";
106
+ if (!botToken.startsWith("xoxb-"))
107
+ throw new ConnectError("Enter the app's Bot User OAuth Token, which starts with xoxb- (Install App in the app's settings)");
108
+ const { response } = await send(botToken, { method: "GET", path: "/auth.test" });
109
+ const d = response.data;
110
+ if (response.status === 401)
111
+ throw new ConnectError("Slack did not accept the token");
112
+ if (response.status !== 200 || typeof d?.team_id !== "string")
113
+ throw new ConnectError(`Slack sign-in failed. ${slackError(response)}`);
114
+ const url = typeof d.url === "string" ? d.url : "";
115
+ const team = typeof d.team === "string" ? d.team : d.team_id;
116
+ return {
117
+ config: { teamId: d.team_id, team, url, botUserId: String(d.user_id ?? "") },
118
+ secret: { bot_token: botToken },
119
+ accountLabel: url ? `${team} (${new URL(url).host})` : team,
120
+ };
121
+ },
122
+ call,
123
+ checks: {
124
+ // auth.test proves the token; Slack names its scopes in x-oauth-scopes on every answer.
125
+ async workspace(connection, { expected }) {
126
+ const { headers, response } = await send(token(connection), {
127
+ method: "GET",
128
+ path: "/auth.test",
129
+ });
130
+ if (response.status !== 200)
131
+ throw new ConnectError(`Slack sign-in failed. ${slackError(response)}`);
132
+ const d = response.data;
133
+ const has = new Set((headers.get("x-oauth-scopes") ?? "").split(",").map((s) => s.trim()));
134
+ const missing = expected.filter((s) => !has.has(s));
135
+ return {
136
+ values: [d.url ? `${d.team} (${new URL(d.url).host})` : String(d.team)],
137
+ ...(missing.length
138
+ ? {
139
+ warning: `The Slack app is missing these bot scopes: ${missing.join(", ")}. Add them under OAuth & Permissions, reinstall the app to the workspace, then check again.`,
140
+ }
141
+ : {}),
142
+ };
143
+ },
144
+ async channels(connection) {
145
+ return { values: (await memberChannels(call, connection)).map((c) => c.id) };
146
+ },
147
+ },
148
+ };
149
+ }
150
+ // Every channel the bot is a member of, for the admin's limit choices: at most 5 pages of 200.
151
+ export async function memberChannels(call, connection) {
152
+ const out = [];
153
+ let cursor = "";
154
+ for (let page = 0; page < 5; page++) {
155
+ const res = await call(connection, {
156
+ method: "GET",
157
+ path: `/users.conversations?${channelQuery(200, cursor)}`,
158
+ });
159
+ if (res.status !== 200)
160
+ throw new ConnectError(slackError(res));
161
+ const d = res.data;
162
+ out.push(...(d.channels ?? []));
163
+ cursor = d.response_metadata?.next_cursor ?? "";
164
+ if (!cursor)
165
+ break;
166
+ }
167
+ return out;
168
+ }
169
+ export const channelQuery = (limit, cursor = "") => new URLSearchParams({
170
+ types: "public_channel,private_channel",
171
+ exclude_archived: "true",
172
+ limit: String(limit),
173
+ ...(cursor ? { cursor } : {}),
174
+ }).toString();
175
+ function refusal(data) {
176
+ if (!data || typeof data !== "object")
177
+ return null;
178
+ const d = data;
179
+ return d.ok === false ? (typeof d.error === "string" ? d.error : "unknown_error") : null;
180
+ }
181
+ function parse(raw) {
182
+ try {
183
+ return JSON.parse(raw);
184
+ }
185
+ catch {
186
+ return raw;
187
+ }
188
+ }
189
+ //# sourceMappingURL=vendor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vendor.js","sourceRoot":"","sources":["../../../connectors/slack/vendor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import { type Toolset } from "../../packages/connector-kit/src/common.js";
2
+ import { type Connector, type SoapApp, type SoapTool } from "../../packages/connector-kit/src/connector.js";
3
+ import { type Fetch, type Vendor } from "../../packages/connector-kit/src/types.js";
4
+ export declare function renderBody(tool: SoapTool, args: Record<string, unknown>): string;
5
+ export declare function soapVendor(connector: Connector, fetchImpl?: Fetch): Vendor;
6
+ export declare function answer(tool: SoapTool, body: unknown): unknown;
7
+ export declare function soapTools(soap: SoapApp): Toolset;
8
+ /** Binds to any connector with a `soap` block; createAgentConnect uses it for those. */
9
+ declare const _default: {
10
+ id: string;
11
+ create: ({ connector }: import("../../packages/connector-kit/src/connector.js").ConnectorContext) => {
12
+ vendor: Vendor;
13
+ toolset: Toolset;
14
+ };
15
+ };
16
+ export default _default;
@@ -0,0 +1,248 @@
1
+ import { createHash, randomBytes } from "node:crypto";
2
+ import { z } from "zod";
3
+ import { audited, Denied, json, listLimit, VendorFailed, } from "../../packages/connector-kit/src/common.js";
4
+ import { pickDisplay, } from "../../packages/connector-kit/src/connector.js";
5
+ import { vendorError } from "../../packages/connector-kit/src/oauth.js";
6
+ import { ConnectError, } from "../../packages/connector-kit/src/types.js";
7
+ import { answerWithin, authHeaders, formValues, guardedFetch, MAX_BODY_BYTES, paramLimits, zodType, } from "../http/index.js";
8
+ import { escapeXml, localName, parseXml, toJson, XmlError } from "./xml.js";
9
+ // The generic module behind every connector.json with a `soap` block: a SOAP 1.1 or 1.2
10
+ // service described as data. Calls reach only the endpoint's origin, always POSTing to it.
11
+ const ENVELOPE = {
12
+ "1.1": "http://schemas.xmlsoap.org/soap/envelope/",
13
+ "1.2": "http://www.w3.org/2003/05/soap-envelope",
14
+ };
15
+ const WSSE = "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd";
16
+ const WSU = "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd";
17
+ const TOKEN_PROFILE = "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0";
18
+ const XML_TYPES = /^(text\/|application\/([\w.+-]*\+)?(xml|json))/i;
19
+ // Characters XML 1.0 cannot carry, even escaped.
20
+ const NOT_XML = /[\u0000-\u0008\u000B\u000C\u000E-\u001F￾￿]/;
21
+ // The Body content of one call: the template with each value escaped, and an optional
22
+ // param's element dropped when it is left out.
23
+ export function renderBody(tool, args) {
24
+ let body = tool.body;
25
+ for (const [name, p] of Object.entries(tool.params)) {
26
+ if (args[name] !== undefined)
27
+ continue;
28
+ if (p.required)
29
+ throw new Denied(`${name} is required`);
30
+ body = body.replace(new RegExp(`<([\\w.:-]+)(\\s[^>]*)?>\\{${name}\\}</\\1>`), "");
31
+ }
32
+ // One pass, so a value holding "{other}" is never read as a placeholder.
33
+ return body.replace(/\{([a-z][a-z0-9_]*)\}/g, (_, name) => {
34
+ const value = String(args[name]);
35
+ if (NOT_XML.test(value))
36
+ throw new Denied(`${name} has characters XML cannot carry`);
37
+ return escapeXml(value);
38
+ });
39
+ }
40
+ function usernameToken(username, password, digest) {
41
+ const nonce = randomBytes(16);
42
+ const created = new Date().toISOString();
43
+ const value = digest
44
+ ? createHash("sha1")
45
+ .update(Buffer.concat([nonce, Buffer.from(created + password)]))
46
+ .digest("base64")
47
+ : password;
48
+ return (`<wsse:Security xmlns:wsse="${WSSE}" xmlns:wsu="${WSU}"><wsse:UsernameToken>` +
49
+ `<wsse:Username>${escapeXml(username)}</wsse:Username>` +
50
+ `<wsse:Password Type="${TOKEN_PROFILE}#${digest ? "PasswordDigest" : "PasswordText"}">${escapeXml(value)}</wsse:Password>` +
51
+ `<wsse:Nonce EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary">${nonce.toString("base64")}</wsse:Nonce>` +
52
+ `<wsu:Created>${created}</wsu:Created></wsse:UsernameToken></wsse:Security>`);
53
+ }
54
+ const child = (node, name) => node?.children.find((c) => localName(c.name) === name);
55
+ // A SOAP Fault's code and text, from either version's shape.
56
+ function faultText(fault) {
57
+ const f = toJson(fault);
58
+ const first = (v) => (Array.isArray(v) ? v[0] : v);
59
+ const reason = f.Reason;
60
+ const code = f.Code;
61
+ const message = String(first(f.faultstring ?? reason?.Text) ?? "no reason given");
62
+ const kind = f.faultcode ?? code?.Value;
63
+ return `${message.slice(0, 300)}${typeof kind === "string" ? ` (${kind})` : ""}`;
64
+ }
65
+ function failure(status, data) {
66
+ const fault = data?.fault;
67
+ if (fault)
68
+ return `The service refused the call: ${fault}`;
69
+ const detail = vendorError(data);
70
+ return `The service answered ${status}${detail ? `: ${detail}` : ""}`;
71
+ }
72
+ export function soapVendor(connector, fetchImpl = fetch) {
73
+ const soap = connector.soap;
74
+ const endpoint = new URL(soap.endpoint);
75
+ const safe = guardedFetch([endpoint.origin], fetchImpl, XML_TYPES, "XML, JSON or text");
76
+ const ns = Object.entries(soap.namespaces)
77
+ .map(([prefix, uri]) => ` xmlns:${prefix}="${escapeXml(uri)}"`)
78
+ .join("");
79
+ // request.body is the Body's content (already escaped), request.headers.soapaction its action.
80
+ const call = async (c, request) => {
81
+ const ws = soap.wsSecurity;
82
+ const header = ws
83
+ ? `<soap:Header>${usernameToken(c.config[ws.username], c.secret[ws.password], ws.digest)}</soap:Header>`
84
+ : "";
85
+ const envelope = `<?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:soap="${ENVELOPE[soap.version]}"${ns}>` +
86
+ `${header}<soap:Body>${String(request.body)}</soap:Body></soap:Envelope>`;
87
+ const action = request.headers?.soapaction;
88
+ const res = await safe(endpoint, {
89
+ method: "POST",
90
+ headers: {
91
+ accept: soap.version === "1.1" ? "text/xml" : "application/soap+xml",
92
+ ...(soap.auth ? authHeaders(soap.auth, c) : {}),
93
+ ...(soap.version === "1.1"
94
+ ? { "content-type": "text/xml; charset=utf-8", soapaction: `"${action ?? ""}"` }
95
+ : {
96
+ "content-type": `application/soap+xml; charset=utf-8${action ? `; action="${action}"` : ""}`,
97
+ }),
98
+ },
99
+ body: envelope,
100
+ });
101
+ const raw = await res.text();
102
+ let doc = null;
103
+ try {
104
+ doc = parseXml(raw);
105
+ }
106
+ catch (error) {
107
+ if (!(error instanceof XmlError))
108
+ throw error;
109
+ if (res.ok)
110
+ throw new ConnectError(`The service's answer is not usable XML: ${error.message}`);
111
+ }
112
+ const body = doc && localName(doc.name) === "Envelope" ? child(doc, "Body") : undefined;
113
+ if (!body) {
114
+ // A gateway's error page, say: its own words, as for any app.
115
+ if (!res.ok)
116
+ return { status: res.status, data: raw.slice(0, 300) };
117
+ throw new ConnectError("The service answered without a SOAP envelope");
118
+ }
119
+ const fault = child(body, "Fault");
120
+ if (fault)
121
+ return { status: res.ok ? 500 : res.status, data: { fault: faultText(fault) } };
122
+ return { status: res.status, data: toJson(body) };
123
+ };
124
+ return {
125
+ async connect(fields) {
126
+ const { config, secret } = formValues(connector, fields);
127
+ const conn = { config: { host: endpoint.host, ...config }, secret };
128
+ return { ...conn, accountLabel: conn.config[connector.accountKey] ?? endpoint.host };
129
+ },
130
+ call,
131
+ checks: soap.verify
132
+ ? {
133
+ // The connector's `verify` call, with the admin's own arguments.
134
+ async operation(c) {
135
+ const verify = soap.verify;
136
+ const tool = soap.tools.find((t) => t.name === verify.tool);
137
+ const res = await call(c, {
138
+ method: "POST",
139
+ path: "",
140
+ body: renderBody(tool, verify.args),
141
+ headers: tool.soapAction ? { soapaction: tool.soapAction } : {},
142
+ });
143
+ if (res.status < 200 || res.status >= 300)
144
+ throw new ConnectError(failure(res.status, res.data));
145
+ const shown = answer(tool, res.data);
146
+ return {
147
+ values: (Array.isArray(shown) ? shown : [shown]).flatMap((item) => pickDisplay(item, verify.show)),
148
+ };
149
+ },
150
+ }
151
+ : undefined,
152
+ };
153
+ }
154
+ // The tool's part of the Body: its `result` path, a list when it ends in [], and only its
155
+ // `fields`.
156
+ export function answer(tool, body) {
157
+ const path = tool.result ?? `${tool.operation}Response`;
158
+ const list = path.endsWith("[]");
159
+ let value = body;
160
+ for (const key of path.replace(/\[\]$/, "").split(".")) {
161
+ value =
162
+ value && typeof value === "object" && !Array.isArray(value) && Object.hasOwn(value, key)
163
+ ? value[key]
164
+ : undefined;
165
+ }
166
+ if (list)
167
+ value = value === undefined || value === "" ? [] : [value].flat();
168
+ const keep = tool.fields;
169
+ if (!keep)
170
+ return value ?? null;
171
+ const trim = (item) => item && typeof item === "object"
172
+ ? Object.fromEntries(keep.flatMap((k) => Object.hasOwn(item, k) ? [[k, item[k]]] : []))
173
+ : item;
174
+ return Array.isArray(value) ? value.map(trim) : trim(value ?? null);
175
+ }
176
+ export function soapTools(soap) {
177
+ return {
178
+ names: soap.tools.map((t) => t.name),
179
+ register(server, ctx, allowed) {
180
+ for (const tool of soap.tools) {
181
+ if (!allowed.has(tool.name))
182
+ continue;
183
+ const shape = Object.fromEntries(Object.entries(tool.params).map(([name, p]) => {
184
+ const type = zodType[p.type].describe(p.description);
185
+ return [name, p.required ? type : type.optional()];
186
+ }));
187
+ server.registerTool(tool.name, {
188
+ description: tool.description,
189
+ inputSchema: z.object(shape).strict(),
190
+ annotations: {
191
+ readOnlyHint: tool.readOnly,
192
+ destructiveHint: tool.destructive,
193
+ openWorldHint: true,
194
+ },
195
+ }, (args) => audited(ctx, tool.name, JSON.stringify(args).slice(0, 300), async (mark) => {
196
+ paramLimits(ctx.limits, tool.params, args);
197
+ const body = renderBody(tool, args);
198
+ if (Buffer.byteLength(body) > MAX_BODY_BYTES)
199
+ throw new Denied(`The request is larger than ${MAX_BODY_BYTES / 1024} KB`);
200
+ let res;
201
+ try {
202
+ res = await ctx.call({
203
+ method: "POST",
204
+ path: "",
205
+ body,
206
+ headers: tool.soapAction ? { soapaction: tool.soapAction } : {},
207
+ });
208
+ }
209
+ catch (error) {
210
+ if (error instanceof ConnectError)
211
+ throw new VendorFailed(502, error.message);
212
+ throw error;
213
+ }
214
+ mark(res.status);
215
+ if (res.status < 200 || res.status >= 300) {
216
+ throw new VendorFailed(res.status, failure(res.status, res.data));
217
+ }
218
+ const result = answer(tool, res.data);
219
+ for (const a of tool.answerLimits) {
220
+ const values = listLimit(ctx.limits, a.limit);
221
+ if (values && !answerWithin(result, a.field, values))
222
+ throw new Denied(`The answer's ${a.field} is outside this agent's limits`);
223
+ }
224
+ return json(result);
225
+ }));
226
+ }
227
+ },
228
+ };
229
+ }
230
+ /** Binds to any connector with a `soap` block; createAgentConnect uses it for those. */
231
+ export default {
232
+ id: "soap",
233
+ create: ({ connector }) => {
234
+ const soap = connector.soap;
235
+ // Each body must be well-formed once filled, so a typo fails at startup, not on a call.
236
+ for (const tool of soap.tools) {
237
+ const sample = tool.body.replace(/\{[a-z][a-z0-9_]*\}/g, "x");
238
+ try {
239
+ parseXml(`<soap:Body xmlns:soap="${ENVELOPE[soap.version]}">${sample}</soap:Body>`);
240
+ }
241
+ catch (error) {
242
+ throw new Error(`${connector.id}: ${tool.name}'s body is not XML: ${error.message}`);
243
+ }
244
+ }
245
+ return { vendor: soapVendor(connector), toolset: soapTools(soap) };
246
+ },
247
+ };
248
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../connectors/soap/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ export type XmlNode = {
2
+ name: string;
3
+ attrs: Record<string, string>;
4
+ children: XmlNode[];
5
+ text: string;
6
+ };
7
+ export declare class XmlError extends Error {
8
+ }
9
+ export declare function parseXml(xml: string): XmlNode;
10
+ export declare const localName: (name: string) => string;
11
+ export declare function toJson(node: XmlNode): unknown;
12
+ export declare const escapeXml: (value: string) => string;
@@ -0,0 +1,126 @@
1
+ // A small XML reader for SOAP answers, WSDL and OData $metadata: elements, attributes, text
2
+ // and CDATA. A document type declaration is refused, so there are no external or expanding
3
+ // entities: only XML's five named ones and character references.
4
+ export class XmlError extends Error {
5
+ }
6
+ const MAX_DEPTH = 100;
7
+ const START = /<([A-Za-z_][\w.:-]*)((?:\s+[A-Za-z_][\w.:-]*\s*=\s*(?:"[^"<]*"|'[^'<]*'))*)\s*(\/?)>/y;
8
+ const ATTR = /([A-Za-z_][\w.:-]*)\s*=\s*(?:"([^"<]*)"|'([^'<]*)')/g;
9
+ const NAMED = { amp: "&", lt: "<", gt: ">", quot: '"', apos: "'" };
10
+ function decode(raw) {
11
+ return raw.replace(/&(?:#x([0-9a-fA-F]+)|#([0-9]+)|([a-z]+))?;?/g, (m, hex, dec, name) => {
12
+ if (!m.endsWith(";") || m === "&;")
13
+ throw new XmlError("A bare & in the text");
14
+ if (name !== undefined) {
15
+ if (!Object.hasOwn(NAMED, name))
16
+ throw new XmlError(`Unknown entity &${name};`);
17
+ return NAMED[name];
18
+ }
19
+ const code = hex !== undefined ? parseInt(hex, 16) : Number(dec);
20
+ if (!(code > 0 && code <= 0x10ffff))
21
+ throw new XmlError("A character reference out of range");
22
+ return String.fromCodePoint(code);
23
+ });
24
+ }
25
+ export function parseXml(xml) {
26
+ const root = { name: "", attrs: {}, children: [], text: "" };
27
+ const stack = [root];
28
+ const until = (end, from) => {
29
+ const at = xml.indexOf(end, from);
30
+ if (at === -1)
31
+ throw new XmlError(`Unclosed ${xml.slice(from, from + 9)}`);
32
+ return at;
33
+ };
34
+ let i = 0;
35
+ while (i < xml.length) {
36
+ const lt = xml.indexOf("<", i);
37
+ const text = xml.slice(i, lt === -1 ? xml.length : lt);
38
+ if (stack.length > 1)
39
+ stack.at(-1).text += decode(text);
40
+ else if (text.trim())
41
+ throw new XmlError("Text outside the root element");
42
+ if (lt === -1)
43
+ break;
44
+ if (xml.startsWith("<!--", lt))
45
+ i = until("-->", lt + 4) + 3;
46
+ else if (xml.startsWith("<![CDATA[", lt)) {
47
+ const end = until("]]>", lt + 9);
48
+ if (stack.length === 1)
49
+ throw new XmlError("Text outside the root element");
50
+ stack.at(-1).text += xml.slice(lt + 9, end);
51
+ i = end + 3;
52
+ }
53
+ else if (xml.startsWith("<!", lt))
54
+ throw new XmlError("A document type declaration is not accepted");
55
+ else if (xml.startsWith("<?", lt))
56
+ i = until("?>", lt + 2) + 2;
57
+ else if (xml.startsWith("</", lt)) {
58
+ const end = until(">", lt + 2);
59
+ const name = xml.slice(lt + 2, end).trim();
60
+ const open = stack.pop();
61
+ if (stack.length === 0 || open.name !== name)
62
+ throw new XmlError(`Unexpected closing tag ${name}`);
63
+ i = end + 1;
64
+ }
65
+ else {
66
+ START.lastIndex = lt;
67
+ const m = START.exec(xml);
68
+ if (!m)
69
+ throw new XmlError("A malformed tag");
70
+ const node = { name: m[1], attrs: {}, children: [], text: "" };
71
+ for (const a of m[2].matchAll(ATTR)) {
72
+ if (Object.hasOwn(node.attrs, a[1]))
73
+ throw new XmlError(`Attribute ${a[1]} twice`);
74
+ node.attrs[a[1]] = decode(a[2] ?? a[3]);
75
+ }
76
+ if (stack.length === 1 && root.children.length)
77
+ throw new XmlError("Two root elements");
78
+ stack.at(-1).children.push(node);
79
+ if (!m[3])
80
+ stack.push(node);
81
+ if (stack.length > MAX_DEPTH)
82
+ throw new XmlError("The XML is nested too deeply");
83
+ i = START.lastIndex;
84
+ }
85
+ }
86
+ if (stack.length !== 1 || root.children.length !== 1)
87
+ throw new XmlError("Unclosed elements");
88
+ return root.children[0];
89
+ }
90
+ export const localName = (name) => name.slice(name.indexOf(":") + 1);
91
+ // A key set as data, never as the object's prototype (an element named __proto__).
92
+ function put(out, key, value) {
93
+ Object.defineProperty(out, key, { value, enumerable: true, writable: true, configurable: true });
94
+ }
95
+ // An element as plain JSON: names without prefixes, repeated children as a list, text
96
+ // trimmed, an element with only text as its text, xsi:nil as null. Attributes with a prefix
97
+ // (namespaces, xsi:type) are left out; others become keys, which child elements win over.
98
+ export function toJson(node) {
99
+ const nil = Object.entries(node.attrs).some(([k, v]) => localName(k) === "nil" && v === "true");
100
+ if (nil)
101
+ return null;
102
+ const out = {};
103
+ const listed = new Set();
104
+ for (const child of node.children) {
105
+ const key = localName(child.name);
106
+ const value = toJson(child);
107
+ if (!listed.has(key))
108
+ put(out, key, value);
109
+ else if (Array.isArray(out[key]))
110
+ out[key].push(value);
111
+ else
112
+ put(out, key, [out[key], value]);
113
+ listed.add(key);
114
+ }
115
+ for (const [k, v] of Object.entries(node.attrs))
116
+ if (!k.includes(":") && k !== "xmlns" && !listed.has(k))
117
+ put(out, k, v);
118
+ const text = node.text.trim();
119
+ if (!Object.keys(out).length)
120
+ return text;
121
+ if (text)
122
+ put(out, "_text", text);
123
+ return out;
124
+ }
125
+ export const escapeXml = (value) => value.replace(/[&<>"']/g, (c) => ({ "&": "&amp;", "<": "&lt;", ">": "&gt;", '"': "&quot;", "'": "&apos;" })[c]);
126
+ //# sourceMappingURL=xml.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"xml.js","sourceRoot":"","sources":["../../../connectors/soap/xml.ts"],"names":[],"mappings":"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"}