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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (231) hide show
  1. package/README.md +164 -12
  2. package/dist/connectors/dell-techdirect/index.d.ts +8 -0
  3. package/dist/connectors/dell-techdirect/tools.d.ts +2 -0
  4. package/dist/connectors/dell-techdirect/vendor.d.ts +6 -0
  5. package/dist/connectors/dynamics-365/connector.json +228 -0
  6. package/dist/connectors/dynamics-365/index.d.ts +8 -0
  7. package/dist/connectors/dynamics-365/index.js +10 -0
  8. package/dist/connectors/dynamics-365/index.js.map +1 -0
  9. package/dist/connectors/dynamics-365/tools.d.ts +35 -0
  10. package/dist/connectors/dynamics-365/tools.js +806 -0
  11. package/dist/connectors/dynamics-365/tools.js.map +1 -0
  12. package/dist/connectors/dynamics-365/vendor.d.ts +9 -0
  13. package/dist/connectors/dynamics-365/vendor.js +110 -0
  14. package/dist/connectors/dynamics-365/vendor.js.map +1 -0
  15. package/dist/connectors/entra/index.d.ts +2 -0
  16. package/dist/connectors/entra/tools.d.ts +14 -0
  17. package/dist/connectors/fedex/index.d.ts +8 -0
  18. package/dist/connectors/fedex/tools.d.ts +3 -0
  19. package/dist/connectors/fedex/vendor.d.ts +7 -0
  20. package/dist/connectors/gong/connector.json +127 -0
  21. package/dist/connectors/gong/index.d.ts +8 -0
  22. package/dist/connectors/gong/index.js +7 -0
  23. package/dist/connectors/gong/index.js.map +1 -0
  24. package/dist/connectors/gong/tools.d.ts +8 -0
  25. package/dist/connectors/gong/tools.js +424 -0
  26. package/dist/connectors/gong/tools.js.map +1 -0
  27. package/dist/connectors/gong/vendor.d.ts +4 -0
  28. package/dist/connectors/gong/vendor.js +89 -0
  29. package/dist/connectors/gong/vendor.js.map +1 -0
  30. package/dist/connectors/http/index.d.ts +34 -0
  31. package/dist/connectors/http/index.js +154 -64
  32. package/dist/connectors/http/index.js.map +1 -1
  33. package/dist/connectors/intune/index.d.ts +2 -0
  34. package/dist/connectors/intune/tools.d.ts +12 -0
  35. package/dist/connectors/jamf/connector.json +182 -0
  36. package/dist/connectors/jamf/index.d.ts +8 -0
  37. package/dist/connectors/jamf/index.js +7 -0
  38. package/dist/connectors/jamf/index.js.map +1 -0
  39. package/dist/connectors/jamf/tools.d.ts +7 -0
  40. package/dist/connectors/jamf/tools.js +659 -0
  41. package/dist/connectors/jamf/tools.js.map +1 -0
  42. package/dist/connectors/jamf/vendor.d.ts +5 -0
  43. package/dist/connectors/jamf/vendor.js +70 -0
  44. package/dist/connectors/jamf/vendor.js.map +1 -0
  45. package/dist/connectors/jira/connector.json +144 -1
  46. package/dist/connectors/jira/index.d.ts +8 -0
  47. package/dist/connectors/jira/jql.d.ts +4 -0
  48. package/dist/connectors/jira/tools.d.ts +3 -0
  49. package/dist/connectors/jira/vendor.d.ts +3 -0
  50. package/dist/connectors/jira/vendor.js +8 -2
  51. package/dist/connectors/jira/vendor.js.map +1 -1
  52. package/dist/connectors/microsoft/client.d.ts +66 -0
  53. package/dist/connectors/microsoft/client.js +26 -8
  54. package/dist/connectors/microsoft/client.js.map +1 -1
  55. package/dist/connectors/netsuite/connector.json +317 -0
  56. package/dist/connectors/netsuite/index.d.ts +8 -0
  57. package/dist/connectors/netsuite/index.js +7 -0
  58. package/dist/connectors/netsuite/index.js.map +1 -0
  59. package/dist/connectors/netsuite/tools.d.ts +24 -0
  60. package/dist/connectors/netsuite/tools.js +447 -0
  61. package/dist/connectors/netsuite/tools.js.map +1 -0
  62. package/dist/connectors/netsuite/vendor.d.ts +26 -0
  63. package/dist/connectors/netsuite/vendor.js +247 -0
  64. package/dist/connectors/netsuite/vendor.js.map +1 -0
  65. package/dist/connectors/odata/index.d.ts +33 -0
  66. package/dist/connectors/odata/index.js +460 -0
  67. package/dist/connectors/odata/index.js.map +1 -0
  68. package/dist/connectors/okta/connector.json +194 -0
  69. package/dist/connectors/okta/index.d.ts +8 -0
  70. package/dist/connectors/okta/index.js +7 -0
  71. package/dist/connectors/okta/index.js.map +1 -0
  72. package/dist/connectors/okta/tools.d.ts +6 -0
  73. package/dist/connectors/okta/tools.js +429 -0
  74. package/dist/connectors/okta/tools.js.map +1 -0
  75. package/dist/connectors/okta/vendor.d.ts +14 -0
  76. package/dist/connectors/okta/vendor.js +204 -0
  77. package/dist/connectors/okta/vendor.js.map +1 -0
  78. package/dist/connectors/outlook-calendar/index.d.ts +2 -0
  79. package/dist/connectors/outlook-calendar/tools.d.ts +65 -0
  80. package/dist/connectors/outlook-mail/index.d.ts +2 -0
  81. package/dist/connectors/outlook-mail/tools.d.ts +8 -0
  82. package/dist/connectors/salesforce/index.d.ts +8 -0
  83. package/dist/connectors/salesforce/soql.d.ts +3 -0
  84. package/dist/connectors/salesforce/tools.d.ts +9 -0
  85. package/dist/connectors/salesforce/vendor.d.ts +3 -0
  86. package/dist/connectors/salesforce/vendor.js +9 -3
  87. package/dist/connectors/salesforce/vendor.js.map +1 -1
  88. package/dist/connectors/sap-s4hana/connector.json +264 -0
  89. package/dist/connectors/sap-s4hana/index.d.ts +8 -0
  90. package/dist/connectors/sap-s4hana/index.js +7 -0
  91. package/dist/connectors/sap-s4hana/index.js.map +1 -0
  92. package/dist/connectors/sap-s4hana/tools.d.ts +4 -0
  93. package/dist/connectors/sap-s4hana/tools.js +761 -0
  94. package/dist/connectors/sap-s4hana/tools.js.map +1 -0
  95. package/dist/connectors/sap-s4hana/vendor.d.ts +5 -0
  96. package/dist/connectors/sap-s4hana/vendor.js +176 -0
  97. package/dist/connectors/sap-s4hana/vendor.js.map +1 -0
  98. package/dist/connectors/servicenow/connector.json +228 -0
  99. package/dist/connectors/servicenow/index.d.ts +8 -0
  100. package/dist/connectors/servicenow/index.js +7 -0
  101. package/dist/connectors/servicenow/index.js.map +1 -0
  102. package/dist/connectors/servicenow/tools.d.ts +4 -0
  103. package/dist/connectors/servicenow/tools.js +884 -0
  104. package/dist/connectors/servicenow/tools.js.map +1 -0
  105. package/dist/connectors/servicenow/vendor.d.ts +3 -0
  106. package/dist/connectors/servicenow/vendor.js +106 -0
  107. package/dist/connectors/servicenow/vendor.js.map +1 -0
  108. package/dist/connectors/sharepoint-files/excel.d.ts +16 -0
  109. package/dist/connectors/sharepoint-files/index.d.ts +8 -0
  110. package/dist/connectors/sharepoint-files/index.js.map +1 -1
  111. package/dist/connectors/sharepoint-files/tools.d.ts +52 -0
  112. package/dist/connectors/sharepoint-files/vendor.d.ts +11 -0
  113. package/dist/connectors/slack/connector.json +148 -0
  114. package/dist/connectors/slack/index.d.ts +8 -0
  115. package/dist/connectors/slack/index.js +7 -0
  116. package/dist/connectors/slack/index.js.map +1 -0
  117. package/dist/connectors/slack/tools.d.ts +3 -0
  118. package/dist/connectors/slack/tools.js +355 -0
  119. package/dist/connectors/slack/tools.js.map +1 -0
  120. package/dist/connectors/slack/vendor.d.ts +17 -0
  121. package/dist/connectors/slack/vendor.js +189 -0
  122. package/dist/connectors/slack/vendor.js.map +1 -0
  123. package/dist/connectors/soap/index.d.ts +16 -0
  124. package/dist/connectors/soap/index.js +248 -0
  125. package/dist/connectors/soap/index.js.map +1 -0
  126. package/dist/connectors/soap/xml.d.ts +12 -0
  127. package/dist/connectors/soap/xml.js +126 -0
  128. package/dist/connectors/soap/xml.js.map +1 -0
  129. package/dist/connectors/sql/engines.d.ts +58 -0
  130. package/dist/connectors/sql/engines.js +292 -0
  131. package/dist/connectors/sql/engines.js.map +1 -0
  132. package/dist/connectors/sql/index.d.ts +16 -0
  133. package/dist/connectors/sql/index.js +214 -0
  134. package/dist/connectors/sql/index.js.map +1 -0
  135. package/dist/connectors/teams/index.d.ts +2 -0
  136. package/dist/connectors/teams/tools.d.ts +7 -0
  137. package/dist/connectors/teams/tools.js +3 -2
  138. package/dist/connectors/teams/tools.js.map +1 -1
  139. package/dist/connectors/workday/connector.json +188 -0
  140. package/dist/connectors/workday/index.d.ts +8 -0
  141. package/dist/connectors/workday/index.js +7 -0
  142. package/dist/connectors/workday/index.js.map +1 -0
  143. package/dist/connectors/workday/tools.d.ts +33 -0
  144. package/dist/connectors/workday/tools.js +410 -0
  145. package/dist/connectors/workday/tools.js.map +1 -0
  146. package/dist/connectors/workday/vendor.d.ts +18 -0
  147. package/dist/connectors/workday/vendor.js +199 -0
  148. package/dist/connectors/workday/vendor.js.map +1 -0
  149. package/dist/packages/connector-kit/src/branding.d.ts +57 -0
  150. package/dist/packages/connector-kit/src/certificate.d.ts +19 -0
  151. package/dist/packages/connector-kit/src/common.d.ts +36 -0
  152. package/dist/packages/connector-kit/src/common.js +4 -1
  153. package/dist/packages/connector-kit/src/common.js.map +1 -1
  154. package/dist/packages/connector-kit/src/connector.d.ts +1356 -0
  155. package/dist/packages/connector-kit/src/connector.js +632 -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 +397 -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,447 @@
1
+ import { z } from "zod";
2
+ import { netsuiteError, RESTLET_PATH, SUITEQL_PATH } from "./vendor.js";
3
+ import { audited, Denied, json, listLimit, VendorFailed, } from "../../packages/connector-kit/src/common.js";
4
+ // Agents never write SuiteQL: every query is built here from validated parameters. SuiteQL
5
+ // over REST takes no bound parameters, so ids and dates are checked against strict patterns
6
+ // and text is quoted with single quotes doubled (SuiteQL, like Oracle, has no backslash
7
+ // escapes). The key's subsidiaries and locations go into every query's WHERE and are checked
8
+ // again on each row returned.
9
+ const RECORD = "/services/rest/record/v1";
10
+ const SAVED_SEARCH_SCRIPT = "script=customscript_agent_saved_search&deploy=customdeploy_agent_saved_search";
11
+ const ID = /^[0-9]{1,12}$/;
12
+ const DATE = /^\d{4}-\d{2}-\d{2}$/;
13
+ const SEARCH_ID = /^(customsearch[a-z0-9_]{1,80}|[0-9]{1,12})$/;
14
+ async function ok(ctx, mark, req, hintTool) {
15
+ return (await answer(ctx, mark, req, hintTool)).data;
16
+ }
17
+ async function answer(ctx, mark, req, hintTool) {
18
+ const res = await ctx.call(req);
19
+ mark(res.status);
20
+ if (res.status >= 200 && res.status < 300)
21
+ return res;
22
+ const why = netsuiteError(res.data);
23
+ // NetSuite answers a record type the role may not read as not found, so the hint of what
24
+ // the role needs is given as for a refusal.
25
+ const status = res.status === 400 && /Record '[^']+' was not found/i.test(why) ? 403 : res.status;
26
+ throw new VendorFailed(status, `NetSuite answered ${res.status}${why ? `: ${why}` : ""}`, hintTool);
27
+ }
28
+ const quote = (v) => {
29
+ if (/[\u0000-\u001f]/.test(v))
30
+ throw new Denied("Text may not contain control characters");
31
+ return `'${v.replaceAll("'", "''")}'`;
32
+ };
33
+ const like = (v) => quote(`%${v.toUpperCase()}%`);
34
+ function id(value, what) {
35
+ if (!ID.test(value))
36
+ throw new Denied(`${what} must be a NetSuite internal id (digits)`);
37
+ return value;
38
+ }
39
+ function date(value, what) {
40
+ if (!DATE.test(value) || Number.isNaN(Date.parse(value)))
41
+ throw new Denied(`${what} must be a date as YYYY-MM-DD`);
42
+ return `TO_DATE('${value}', 'YYYY-MM-DD')`;
43
+ }
44
+ function scope(ctx) {
45
+ const read = (limit) => {
46
+ const values = listLimit(ctx.limits, limit);
47
+ return values && values.map((v) => id(v, "A limit value"));
48
+ };
49
+ return { subsidiaries: read("subsidiaries"), locations: read("locations") };
50
+ }
51
+ const within = (list, value) => !list || (value !== null && value !== undefined && list.includes(String(value)));
52
+ function checkLocation(ctx, location) {
53
+ const { locations } = scope(ctx);
54
+ if (location !== undefined)
55
+ id(location, "location");
56
+ if (locations && location === undefined)
57
+ throw new Denied(`This agent must name a location: one of ${locations.join(", ")}`);
58
+ if (location !== undefined && !within(locations, location))
59
+ throw new Denied(`This agent may not use location ${location}`);
60
+ return location;
61
+ }
62
+ // Paging: the cursor is "<offset>:<page size>" as an earlier answer gave it, since NetSuite
63
+ // pages by offset in steps of the page size.
64
+ function page(cursor, size) {
65
+ if (cursor === undefined)
66
+ return { offset: 0, limit: size };
67
+ const m = /^(\d{1,7}):(\d{1,4})$/.exec(cursor);
68
+ if (!m || Number(m[1]) % Number(m[2]))
69
+ throw new Denied("Pass the cursor exactly as the previous answer gave it");
70
+ return { offset: Number(m[1]), limit: Number(m[2]) };
71
+ }
72
+ async function suiteql(ctx, mark, q, at, hintTool) {
73
+ const data = await ok(ctx, mark, {
74
+ method: "POST",
75
+ path: `${SUITEQL_PATH}?limit=${at.limit}&offset=${at.offset}`,
76
+ body: { q },
77
+ }, hintTool);
78
+ const items = (data?.items ?? []).map(({ links: _links, ...row }) => row);
79
+ return { items, next: data?.hasMore ? `${at.offset + at.limit}:${at.limit}` : null };
80
+ }
81
+ const where = (parts) => {
82
+ const kept = parts.filter(Boolean);
83
+ return kept.length ? `WHERE ${kept.join(" AND ")}` : "";
84
+ };
85
+ const maxResults = (max, fallback) => z.number().int().min(1).max(max).default(fallback).describe(`At most ${max}.`);
86
+ const cursor = z
87
+ .string()
88
+ .optional()
89
+ .describe("The `next` value of a previous answer, to read on. Leave out for the first page.");
90
+ // Customers and vendors share the entity columns.
91
+ async function findParties(ctx, mark, table, args, at) {
92
+ const { subsidiaries } = scope(ctx);
93
+ const q = "SELECT e.id, e.entityid AS number, e.altname AS name, e.companyname AS company_name, " +
94
+ "e.email, e.phone, e.subsidiary AS subsidiary_id, BUILTIN.DF(e.subsidiary) AS subsidiary, " +
95
+ `e.isinactive AS inactive FROM ${table} e ` +
96
+ where([
97
+ args.id && `e.id = ${id(args.id, "id")}`,
98
+ args.name &&
99
+ `(UPPER(e.entityid) LIKE ${like(args.name)} OR UPPER(e.altname) LIKE ${like(args.name)} OR UPPER(e.companyname) LIKE ${like(args.name)})`,
100
+ args.email && `UPPER(e.email) = ${quote(args.email.toUpperCase())}`,
101
+ !args.include_inactive && "e.isinactive = 'F'",
102
+ subsidiaries && `e.subsidiary IN (${subsidiaries.join(", ")})`,
103
+ ]) +
104
+ " ORDER BY e.id";
105
+ const { items, next } = await suiteql(ctx, mark, q, at);
106
+ return { [`${table}s`]: items.filter((r) => within(subsidiaries, r.subsidiary_id)), next };
107
+ }
108
+ // Status letters per type: sales and purchase orders C cancelled or rejected, G billed,
109
+ // H closed; invoices A open.
110
+ const OPEN = {
111
+ SalesOrd: "t.status NOT IN ('C', 'G', 'H')",
112
+ PurchOrd: "t.status NOT IN ('C', 'G', 'H')",
113
+ CustInvc: "t.status = 'A'",
114
+ };
115
+ async function findTransactions(ctx, mark, type, args, at) {
116
+ const { subsidiaries, locations } = scope(ctx);
117
+ const invoice = type === "CustInvc";
118
+ const q = "SELECT t.id, t.tranid AS number, TO_CHAR(t.trandate, 'YYYY-MM-DD') AS date, " +
119
+ "BUILTIN.DF(t.status) AS status, t.entity AS entity_id, BUILTIN.DF(t.entity) AS entity, " +
120
+ "tl.subsidiary AS subsidiary_id, BUILTIN.DF(tl.subsidiary) AS subsidiary, " +
121
+ "tl.location AS location_id, BUILTIN.DF(tl.location) AS location, " +
122
+ "t.foreigntotal AS total, BUILTIN.DF(t.currency) AS currency, t.memo" +
123
+ (invoice
124
+ ? ", t.foreignamountremaining AS amount_due, TO_CHAR(t.duedate, 'YYYY-MM-DD') AS due_date"
125
+ : "") +
126
+ " FROM transaction t JOIN transactionline tl ON tl.transaction = t.id AND tl.mainline = 'T' " +
127
+ where([
128
+ `t.type = '${type}'`,
129
+ args.id && `t.id = ${id(args.id, "id")}`,
130
+ args.number && `UPPER(t.tranid) = ${quote(args.number.toUpperCase())}`,
131
+ args.entity &&
132
+ `t.entity = ${id(args.entity, invoice || type === "SalesOrd" ? "customer" : "vendor")}`,
133
+ args.from && `t.trandate >= ${date(args.from, "from")}`,
134
+ args.to && `t.trandate <= ${date(args.to, "to")}`,
135
+ (args.open_only || args.overdue_only) && OPEN[type],
136
+ args.overdue_only && "t.duedate < SYSDATE",
137
+ subsidiaries && `tl.subsidiary IN (${subsidiaries.join(", ")})`,
138
+ locations && `tl.location IN (${locations.join(", ")})`,
139
+ ]) +
140
+ " ORDER BY t.trandate DESC, t.id DESC";
141
+ const found = await suiteql(ctx, mark, q, at);
142
+ const items = found.items.filter((r) => within(subsidiaries, r.subsidiary_id) && within(locations, r.location_id));
143
+ if (!args.include_lines || !items.length)
144
+ return { transactions: items, next: found.next };
145
+ // Sales lines are stored with the sign of a credit: turned so a sold line reads positive.
146
+ const sign = type === "PurchOrd" ? "" : "-";
147
+ const lines = await suiteql(ctx, mark, "SELECT tl.transaction AS transaction_id, tl.linesequencenumber AS line, tl.item AS item_id, " +
148
+ `BUILTIN.DF(tl.item) AS item, ${sign}tl.quantity AS quantity, tl.rate, ${sign}tl.foreignamount AS amount, ` +
149
+ "tl.location AS location_id, BUILTIN.DF(tl.location) AS location, tl.memo AS description " +
150
+ `FROM transactionline tl WHERE tl.transaction IN (${items.map((r) => id(String(r.id), "id")).join(", ")}) ` +
151
+ "AND tl.mainline = 'F' AND tl.taxline = 'F' AND tl.item IS NOT NULL " +
152
+ "ORDER BY tl.transaction, tl.linesequencenumber", { offset: 0, limit: 1000 });
153
+ // A line at a location outside the key's (the header's is inside) is left out.
154
+ const shown = lines.items.filter((l) => l.location_id == null || within(locations, l.location_id));
155
+ return {
156
+ transactions: items.map((t) => ({
157
+ ...t,
158
+ lines: shown
159
+ .filter((l) => String(l.transaction_id) === String(t.id))
160
+ .map(({ transaction_id: _t, ...l }) => l),
161
+ })),
162
+ lines_hidden: lines.items.length - shown.length,
163
+ next: found.next,
164
+ };
165
+ }
166
+ // A record made through REST answers 204 with its address in Location.
167
+ async function create(ctx, mark, req) {
168
+ const made = (await answer(ctx, mark, req)).headers?.location?.split("/").pop();
169
+ if (!made || !ID.test(made))
170
+ throw new Error("NetSuite did not say which record it made");
171
+ return made;
172
+ }
173
+ export function searchRows(answer, limits) {
174
+ const index = (name, list, label) => {
175
+ if (!list)
176
+ return -1;
177
+ const at = answer.columns.findIndex((c) => c.name === name && !c.join);
178
+ if (at < 0)
179
+ throw new Denied(`This saved search has no ${label} column, so this agent, limited to some ${label.toLowerCase()} values, cannot run it. Add a ${label} column to the search in NetSuite`);
180
+ return at;
181
+ };
182
+ const sub = index("subsidiary", limits.subsidiaries, "Subsidiary");
183
+ const loc = index("location", limits.locations, "Location");
184
+ const keys = [];
185
+ for (const c of answer.columns) {
186
+ const base = c.label || (c.join ? `${c.join}.${c.name}` : c.name);
187
+ let key = base;
188
+ for (let n = 2; keys.includes(key); n++)
189
+ key = `${base} (${n})`;
190
+ keys.push(key);
191
+ }
192
+ const kept = answer.rows.filter((r) => (sub < 0 || within(limits.subsidiaries, r[sub]?.value)) &&
193
+ (loc < 0 || within(limits.locations, r[loc]?.value)));
194
+ return {
195
+ rows: kept.map((r) => Object.fromEntries(keys.map((k, i) => [k, r[i]?.text || r[i]?.value || null]))),
196
+ hidden: answer.rows.length - kept.length,
197
+ };
198
+ }
199
+ export const netsuiteTools = {
200
+ names: [
201
+ "netsuite_find_customers",
202
+ "netsuite_find_vendors",
203
+ "netsuite_find_sales_orders",
204
+ "netsuite_find_invoices",
205
+ "netsuite_find_purchase_orders",
206
+ "netsuite_item_availability",
207
+ "netsuite_create_customer",
208
+ "netsuite_create_sales_order",
209
+ "netsuite_run_saved_search",
210
+ ],
211
+ register(server, ctx, allowed) {
212
+ const readOnly = { readOnlyHint: true, openWorldHint: true };
213
+ const write = { readOnlyHint: false, destructiveHint: false, openWorldHint: true };
214
+ const text = (max) => z.string().min(1).max(max);
215
+ for (const [tool, table] of [
216
+ ["netsuite_find_customers", "customer"],
217
+ ["netsuite_find_vendors", "vendor"],
218
+ ])
219
+ if (allowed.has(tool))
220
+ server.registerTool(tool, {
221
+ description: `Find ${table}s by internal id, by name or number (part of it is enough) or by exact email. ` +
222
+ "Leave every filter out to list them. Answers the internal id agents pass to other tools.",
223
+ inputSchema: z.object({
224
+ id: z.string().optional().describe("Internal id."),
225
+ name: text(100).optional().describe("Part of the name, company name or number."),
226
+ email: text(254).optional(),
227
+ include_inactive: z.boolean().default(false),
228
+ max_results: maxResults(100, 25),
229
+ cursor,
230
+ }),
231
+ annotations: readOnly,
232
+ }, ({ max_results, cursor: c, ...args }) => audited(ctx, tool, JSON.stringify(args).slice(0, 300), async (mark) => json(await findParties(ctx, mark, table, args, page(c, max_results)))));
233
+ const transactionTools = [
234
+ ["netsuite_find_sales_orders", "SalesOrd", "sales orders", "customer"],
235
+ ["netsuite_find_invoices", "CustInvc", "invoices", "customer"],
236
+ ["netsuite_find_purchase_orders", "PurchOrd", "purchase orders", "vendor"],
237
+ ];
238
+ for (const [tool, type, what, party] of transactionTools)
239
+ if (allowed.has(tool))
240
+ server.registerTool(tool, {
241
+ description: `Find ${what}, newest first, with status, total` +
242
+ (type === "CustInvc" ? ", amount due and due date" : "") +
243
+ `. Filter by internal id, document number, ${party} or date range. ` +
244
+ "Set include_lines to also get each one's item lines (then at most 10 are returned).",
245
+ inputSchema: z.object({
246
+ id: z.string().optional().describe("Internal id."),
247
+ number: text(45).optional().describe("Document number, e.g. SO1234."),
248
+ [party]: z.string().optional().describe(`The ${party}'s internal id.`),
249
+ from: z.string().optional().describe("Earliest date, YYYY-MM-DD."),
250
+ to: z.string().optional().describe("Latest date, YYYY-MM-DD."),
251
+ open_only: z
252
+ .boolean()
253
+ .default(false)
254
+ .describe(type === "CustInvc"
255
+ ? "Only invoices not yet paid."
256
+ : "Leave out cancelled, fully billed and closed ones."),
257
+ ...(type === "CustInvc"
258
+ ? {
259
+ overdue_only: z
260
+ .boolean()
261
+ .default(false)
262
+ .describe("Only unpaid invoices past due."),
263
+ }
264
+ : {}),
265
+ include_lines: z.boolean().default(false),
266
+ max_results: maxResults(100, 25),
267
+ cursor,
268
+ }),
269
+ annotations: readOnly,
270
+ }, (input) => {
271
+ const { max_results, cursor: c, ...args } = input;
272
+ return audited(ctx, tool, JSON.stringify(args).slice(0, 300), async (mark) => {
273
+ const size = args.include_lines ? Math.min(max_results, 10) : max_results;
274
+ return json(await findTransactions(ctx, mark, type, { ...args, entity: args[party] }, page(c, size)));
275
+ });
276
+ });
277
+ if (allowed.has("netsuite_item_availability"))
278
+ server.registerTool("netsuite_item_availability", {
279
+ description: "How many of an item are available, on hand, committed, on order and back ordered, per location. " +
280
+ "Give the item's internal id, or part of its number or name.",
281
+ inputSchema: z.object({
282
+ item: text(100).describe("Internal id, or part of the item number or name."),
283
+ location: z.string().optional().describe("One location's internal id."),
284
+ max_results: maxResults(200, 50),
285
+ cursor,
286
+ }),
287
+ annotations: readOnly,
288
+ }, ({ item, location, max_results, cursor: c }) => audited(ctx, "netsuite_item_availability", `${item} @ ${location ?? "any"}`, async (mark) => {
289
+ const { subsidiaries, locations } = scope(ctx);
290
+ if (location !== undefined) {
291
+ id(location, "location");
292
+ if (!within(locations, location))
293
+ throw new Denied(`This agent may not use location ${location}`);
294
+ }
295
+ const q = "SELECT a.item AS item_id, i.itemid AS item_number, i.displayname AS item_name, " +
296
+ "a.location AS location_id, BUILTIN.DF(a.location) AS location, l.subsidiary AS subsidiary_id, " +
297
+ "a.quantityavailable AS available, a.quantityonhand AS on_hand, a.quantitycommitted AS committed, " +
298
+ "a.quantityonorder AS on_order, a.quantitybackordered AS back_ordered " +
299
+ "FROM aggregateitemlocation a JOIN item i ON i.id = a.item JOIN location l ON l.id = a.location " +
300
+ where([
301
+ ID.test(item)
302
+ ? `i.id = ${item}`
303
+ : `(UPPER(i.itemid) LIKE ${like(item)} OR UPPER(i.displayname) LIKE ${like(item)})`,
304
+ "i.isinactive = 'F'",
305
+ location && `a.location = ${location}`,
306
+ locations && `a.location IN (${locations.join(", ")})`,
307
+ subsidiaries && `l.subsidiary IN (${subsidiaries.join(", ")})`,
308
+ ]) +
309
+ " ORDER BY i.itemid, a.location";
310
+ const { items, next } = await suiteql(ctx, mark, q, page(c, max_results));
311
+ const shown = items.filter((r) => within(locations, r.location_id) && within(subsidiaries, r.subsidiary_id));
312
+ return json({ availability: shown, next });
313
+ }));
314
+ if (allowed.has("netsuite_create_customer"))
315
+ server.registerTool("netsuite_create_customer", {
316
+ description: "Create a company customer. Find it first with netsuite_find_customers so it is not made twice.",
317
+ inputSchema: z.object({
318
+ company_name: text(83),
319
+ email: text(254).optional(),
320
+ phone: text(32).optional(),
321
+ subsidiary: z
322
+ .string()
323
+ .optional()
324
+ .describe("Internal id of its primary subsidiary. Needed where the account has subsidiaries."),
325
+ }),
326
+ annotations: write,
327
+ }, ({ company_name, email, phone, subsidiary }) => audited(ctx, "netsuite_create_customer", company_name, async (mark, retarget) => {
328
+ const { subsidiaries } = scope(ctx);
329
+ if (subsidiary !== undefined)
330
+ id(subsidiary, "subsidiary");
331
+ if (subsidiaries && !within(subsidiaries, subsidiary))
332
+ throw new Denied(`This agent must name a subsidiary: one of ${subsidiaries.join(", ")}`);
333
+ const made = await create(ctx, mark, {
334
+ method: "POST",
335
+ path: `${RECORD}/customer`,
336
+ body: {
337
+ isPerson: false,
338
+ companyName: company_name,
339
+ ...(email ? { email } : {}),
340
+ ...(phone ? { phone } : {}),
341
+ ...(subsidiary ? { subsidiary: { id: subsidiary } } : {}),
342
+ },
343
+ });
344
+ retarget(`customer/${made} ${company_name}`);
345
+ return json({ id: made });
346
+ }));
347
+ if (allowed.has("netsuite_create_sales_order"))
348
+ server.registerTool("netsuite_create_sales_order", {
349
+ description: "Create a sales order for a customer with item lines. Leave rate out to use the item's price for that customer. " +
350
+ "Check the customer's open orders first so the order is not placed twice.",
351
+ inputSchema: z.object({
352
+ customer: z.string().describe("The customer's internal id."),
353
+ lines: z
354
+ .array(z.object({
355
+ item: z.string().describe("The item's internal id."),
356
+ quantity: z.number().positive().max(1e9),
357
+ rate: z.number().min(0).max(1e12).optional().describe("Price per unit."),
358
+ }))
359
+ .min(1)
360
+ .max(100),
361
+ location: z.string().optional().describe("Internal id of the location it ships from."),
362
+ ship_date: z.string().optional().describe("YYYY-MM-DD."),
363
+ po_number: text(45).optional().describe("The customer's purchase order number."),
364
+ memo: text(999).optional(),
365
+ }),
366
+ annotations: write,
367
+ }, ({ customer, lines, location, ship_date, po_number, memo }) => audited(ctx, "netsuite_create_sales_order", `customer ${customer}`, async (mark, retarget) => {
368
+ id(customer, "customer");
369
+ lines.forEach((l) => id(l.item, "item"));
370
+ if (ship_date)
371
+ date(ship_date, "ship_date");
372
+ checkLocation(ctx, location);
373
+ const { subsidiaries } = scope(ctx);
374
+ let subsidiary;
375
+ if (subsidiaries) {
376
+ // The order takes the customer's subsidiary, so the customer is read first.
377
+ const { items } = await suiteql(ctx, mark, `SELECT e.id, e.subsidiary AS subsidiary_id FROM customer e WHERE e.id = ${customer}`, { offset: 0, limit: 1 }, "netsuite_find_customers");
378
+ const found = items[0]?.subsidiary_id;
379
+ // Not found and not allowed read the same, so a key cannot probe other customers.
380
+ if (!within(subsidiaries, found))
381
+ throw new Denied(`This agent may not use customer ${customer}`);
382
+ subsidiary = String(found);
383
+ }
384
+ const made = await create(ctx, mark, {
385
+ method: "POST",
386
+ path: `${RECORD}/salesOrder`,
387
+ body: {
388
+ entity: { id: customer },
389
+ ...(subsidiary ? { subsidiary: { id: subsidiary } } : {}),
390
+ ...(location ? { location: { id: location } } : {}),
391
+ ...(ship_date ? { shipDate: ship_date } : {}),
392
+ ...(po_number ? { otherRefNum: po_number } : {}),
393
+ ...(memo ? { memo } : {}),
394
+ item: {
395
+ items: lines.map((l) => ({
396
+ item: { id: l.item },
397
+ quantity: l.quantity,
398
+ ...(l.rate === undefined ? {} : { rate: l.rate }),
399
+ ...(location ? { location: { id: location } } : {}),
400
+ })),
401
+ },
402
+ },
403
+ });
404
+ retarget(`salesOrder/${made} for customer ${customer}`);
405
+ return json({ id: made });
406
+ }));
407
+ if (allowed.has("netsuite_run_saved_search"))
408
+ server.registerTool("netsuite_run_saved_search", {
409
+ description: "Run one of the saved searches this agent may use, by its id (customsearch... or a number), a page at a time.",
410
+ inputSchema: z.object({
411
+ search: z.string().describe("The saved search's id, as your administrator gave it."),
412
+ max_results: z
413
+ .number()
414
+ .int()
415
+ .min(5)
416
+ .max(1000)
417
+ .default(100)
418
+ .describe("Rows per page, 5 to 1000."),
419
+ cursor,
420
+ }),
421
+ annotations: readOnly,
422
+ }, ({ search, max_results, cursor: c }) => audited(ctx, "netsuite_run_saved_search", search, async (mark) => {
423
+ const searches = listLimit(ctx.limits, "saved_searches");
424
+ if (!searches)
425
+ throw new Denied("This agent has no saved searches. An administrator adds their ids to its key");
426
+ if (!SEARCH_ID.test(search) || !searches.includes(search))
427
+ throw new Denied(`This agent may run only these saved searches: ${searches.join(", ")}`);
428
+ const at = page(c, max_results);
429
+ const index = at.offset / at.limit;
430
+ const data = await ok(ctx, mark, {
431
+ method: "POST",
432
+ path: `${RESTLET_PATH}?${SAVED_SEARCH_SCRIPT}`,
433
+ body: { search, page: index, size: at.limit },
434
+ });
435
+ if (!Array.isArray(data?.columns) || !Array.isArray(data?.rows))
436
+ throw new VendorFailed(502, "The saved search script answered something else. Check it is the script from the setup steps");
437
+ const { rows, hidden } = searchRows(data, scope(ctx));
438
+ return json({
439
+ total: data.total,
440
+ rows,
441
+ ...(hidden ? { rows_hidden: hidden } : {}),
442
+ next: index + 1 < Number(data.pages) ? `${at.offset + at.limit}:${at.limit}` : null,
443
+ });
444
+ }));
445
+ },
446
+ };
447
+ //# sourceMappingURL=tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools.js","sourceRoot":"","sources":["../../../connectors/netsuite/tools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ import { type Fetch, type Vendor } from "../../packages/connector-kit/src/types.js";
2
+ export declare const RESTLET_PATH = "/app/site/hosting/restlet.nl";
3
+ export declare const SUITEQL_PATH = "/services/rest/query/v1/suiteql";
4
+ export declare function normalizeAccount(input: string): string;
5
+ export declare function readPrivateKey(pem: string): import("node:crypto").KeyObject;
6
+ export declare function clientAssertion(input: {
7
+ clientId: string;
8
+ certificateId: string;
9
+ privateKey: string;
10
+ tokenUrl: string;
11
+ scope: string;
12
+ now?: number;
13
+ }): string;
14
+ export declare function tbaHeader(input: {
15
+ method: string;
16
+ url: string;
17
+ realm: string;
18
+ consumerKey: string;
19
+ consumerSecret: string;
20
+ tokenId: string;
21
+ tokenSecret: string;
22
+ nonce?: string;
23
+ timestamp?: number;
24
+ }): string;
25
+ export declare function netsuiteError(data: unknown): string;
26
+ export declare function netsuiteVendor(unguarded?: Fetch): Vendor;