@arbium/enterprise-agent-connect 0.1.1 → 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 (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 +146 -3
  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 +404 -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,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":"AAAA,4FAA4F;AAC5F,2FAA2F;AAC3F,iEAAiE;AASjE,MAAM,OAAO,QAAS,SAAQ,KAAK;CAAG;AAEtC,MAAM,SAAS,GAAG,GAAG,CAAC;AACtB,MAAM,KAAK,GACT,uFAAuF,CAAC;AAC1F,MAAM,IAAI,GAAG,sDAAsD,CAAC;AACpE,MAAM,KAAK,GAA2B,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;AAE3F,SAAS,MAAM,CAAC,GAAW;IACzB,OAAO,GAAG,CAAC,OAAO,CAAC,8CAA8C,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;QACvF,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,IAAI;YAAE,MAAM,IAAI,QAAQ,CAAC,sBAAsB,CAAC,CAAC;QAC/E,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACvB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC;gBAAE,MAAM,IAAI,QAAQ,CAAC,mBAAmB,IAAI,GAAG,CAAC,CAAC;YAChF,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC;QACrB,CAAC;QACD,MAAM,IAAI,GAAG,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACjE,IAAI,CAAC,CAAC,IAAI,GAAG,CAAC,IAAI,IAAI,IAAI,QAAQ,CAAC;YAAE,MAAM,IAAI,QAAQ,CAAC,oCAAoC,CAAC,CAAC;QAC9F,OAAO,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,GAAW;IAClC,MAAM,IAAI,GAAY,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;IACtE,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC,CAAC;IACrB,MAAM,KAAK,GAAG,CAAC,GAAW,EAAE,IAAY,EAAE,EAAE;QAC1C,MAAM,EAAE,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QAClC,IAAI,EAAE,KAAK,CAAC,CAAC;YAAE,MAAM,IAAI,QAAQ,CAAC,YAAY,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;QAC3E,OAAO,EAAE,CAAC;IACZ,CAAC,CAAC;IACF,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,OAAO,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC;QACtB,MAAM,EAAE,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QAC/B,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACvD,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;YAAE,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAE,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC;aACpD,IAAI,IAAI,CAAC,IAAI,EAAE;YAAE,MAAM,IAAI,QAAQ,CAAC,+BAA+B,CAAC,CAAC;QAC1E,IAAI,EAAE,KAAK,CAAC,CAAC;YAAE,MAAM;QACrB,IAAI,GAAG,CAAC,UAAU,CAAC,MAAM,EAAE,EAAE,CAAC;YAAE,CAAC,GAAG,KAAK,CAAC,KAAK,EAAE,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;aACxD,IAAI,GAAG,CAAC,UAAU,CAAC,WAAW,EAAE,EAAE,CAAC,EAAE,CAAC;YACzC,MAAM,GAAG,GAAG,KAAK,CAAC,KAAK,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC;YACjC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;gBAAE,MAAM,IAAI,QAAQ,CAAC,+BAA+B,CAAC,CAAC;YAC5E,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAE,CAAC,IAAI,IAAI,GAAG,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;YAC7C,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC;QACd,CAAC;aAAM,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,CAAC;YACjC,MAAM,IAAI,QAAQ,CAAC,6CAA6C,CAAC,CAAC;aAC/D,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,CAAC;YAAE,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;aAC1D,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC;YAClC,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC;YAC/B,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;YAC3C,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC;YACzB,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,IAAK,CAAC,IAAI,KAAK,IAAI;gBAC3C,MAAM,IAAI,QAAQ,CAAC,0BAA0B,IAAI,EAAE,CAAC,CAAC;YACvD,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC;QACd,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,SAAS,GAAG,EAAE,CAAC;YACrB,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAC1B,IAAI,CAAC,CAAC;gBAAE,MAAM,IAAI,QAAQ,CAAC,iBAAiB,CAAC,CAAC;YAC9C,MAAM,IAAI,GAAY,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;YACxE,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;gBACpC,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;oBAAE,MAAM,IAAI,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;gBACnF,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC1C,CAAC;YACD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM;gBAAE,MAAM,IAAI,QAAQ,CAAC,mBAAmB,CAAC,CAAC;YACxF,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAClC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;gBAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC5B,IAAI,KAAK,CAAC,MAAM,GAAG,SAAS;gBAAE,MAAM,IAAI,QAAQ,CAAC,8BAA8B,CAAC,CAAC;YACjF,CAAC,GAAG,KAAK,CAAC,SAAS,CAAC;QACtB,CAAC;IACH,CAAC;IACD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,MAAM,IAAI,QAAQ,CAAC,mBAAmB,CAAC,CAAC;IAC9F,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AAC1B,CAAC;AAED,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAE7E,mFAAmF;AACnF,SAAS,GAAG,CAAC,GAA4B,EAAE,GAAW,EAAE,KAAc;IACpE,MAAM,CAAC,cAAc,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC;AACnG,CAAC;AAED,sFAAsF;AACtF,4FAA4F;AAC5F,0FAA0F;AAC1F,MAAM,UAAU,MAAM,CAAC,IAAa;IAClC,MAAM,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,MAAM,CAAC,CAAC;IAChG,IAAI,GAAG;QAAE,OAAO,IAAI,CAAC;IACrB,MAAM,GAAG,GAA4B,EAAE,CAAC;IACxC,MAAM,MAAM,GAAG,IAAI,GAAG,EAAU,CAAC;IACjC,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QAClC,MAAM,GAAG,GAAG,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAClC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;QAC5B,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;aACtC,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAAG,GAAG,CAAC,GAAG,CAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;;YACjE,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;QACtC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAClB,CAAC;IACD,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;QAC7C,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;YAAE,GAAG,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC1E,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;IAC9B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IAC1C,IAAI,IAAI;QAAE,GAAG,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;IAClC,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,KAAa,EAAE,EAAE,CACzC,KAAK,CAAC,OAAO,CACX,UAAU,EACV,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAE,CACtF,CAAC"}
@@ -0,0 +1,58 @@
1
+ import type { SqlApp } from "../../packages/connector-kit/src/connector.js";
2
+ /** A statement's text around its :name params: parts.length is names.length + 1. */
3
+ export type Statement = {
4
+ parts: string[];
5
+ names: string[];
6
+ };
7
+ export type Rows = Record<string, unknown>[];
8
+ export type RunInput = {
9
+ statement: Statement;
10
+ values: Record<string, unknown>;
11
+ write: boolean;
12
+ maxRows: number;
13
+ timeoutMs: number;
14
+ check(out: {
15
+ rows: Rows;
16
+ rowsAffected: number | null;
17
+ }): void;
18
+ };
19
+ export type Engine = {
20
+ run(input: RunInput): Promise<{
21
+ rows: Rows;
22
+ rowsAffected: number | null;
23
+ }>;
24
+ /** The server's version, from a trivial query proving the connection. */
25
+ version(): Promise<string>;
26
+ close(): Promise<void>;
27
+ };
28
+ export type Target = {
29
+ host: string;
30
+ port: number;
31
+ database: string;
32
+ user: string;
33
+ password: string;
34
+ tls: SqlApp["tls"];
35
+ readOnly: boolean;
36
+ };
37
+ export declare const DEFAULT_PORT: {
38
+ postgres: number;
39
+ sqlserver: number;
40
+ mysql: number;
41
+ oracle: number;
42
+ };
43
+ export declare const DRIVER: {
44
+ readonly sqlserver: "mssql";
45
+ readonly mysql: "mysql2/promise";
46
+ readonly oracle: "oracledb";
47
+ };
48
+ /** Splits on :name, skipping quoted text, comments and casts (::type). */
49
+ export declare function parseStatement(sql: string): Statement;
50
+ /** Throws when the engine's driver is not installed, naming what to install. */
51
+ export declare function assertDriver(engine: SqlApp["engine"], app: string, resolve?: (name: string) => string): void;
52
+ type Driver = any;
53
+ export declare function openEngine(engine: SqlApp["engine"], target: Target, driver?: Driver): Promise<Engine>;
54
+ export declare function pgEngine(t: Target, pg: Driver): Engine;
55
+ export declare function sqlServerEngine(t: Target, mssql: Driver): Engine;
56
+ export declare function mySqlEngine(t: Target, mysql: Driver): Engine;
57
+ export declare function oracleEngine(t: Target, oracledb: Driver): Engine;
58
+ export {};