node-autotask 0.31.0 → 0.33.0
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.
- package/CHANGELOG.md +38 -0
- package/MCP_TOOL_CATALOG.json +31 -12
- package/MCP_TOOL_MANIFEST.md +18 -19
- package/MCP_TOOL_OVERRIDES.json +0 -12
- package/N8N_MCP_MANIFEST.json +44 -18
- package/N8N_MCP_MANIFEST.md +15 -14
- package/README.md +8 -6
- package/capabilities.json +1579 -1414
- package/dist/capabilities.cjs +2 -2
- package/dist/capabilities.js +1 -1
- package/dist/{chunk-3H3RJ4LA.cjs → chunk-3LAZZT7V.cjs} +143 -143
- package/dist/{chunk-PCLL536B.cjs → chunk-4QN43TRP.cjs} +75 -50
- package/dist/{chunk-6UA544OR.js → chunk-5DS6F6GF.js} +299 -113
- package/dist/{chunk-RQZUV74N.js → chunk-7WNE5MPG.js} +2 -2
- package/dist/{chunk-INSFDXHP.js → chunk-MFDQHFGJ.js} +28 -3
- package/dist/{chunk-DQLEVKZS.cjs → chunk-OO67MRHN.cjs} +814 -628
- package/dist/{chunk-QXUN2VCJ.cjs → chunk-SP2SJJZX.cjs} +1578 -1413
- package/dist/{chunk-EPOHRNSX.js → chunk-VKE56TTN.js} +1578 -1413
- package/dist/{index-Uqj987EE.d.ts → index-BaeMHZPk.d.ts} +149 -12
- package/dist/{index--5jrRl4u.d.cts → index-Cq0VsfSz.d.cts} +149 -12
- package/dist/index.cjs +22 -22
- package/dist/index.d.cts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js +4 -4
- package/dist/operations/index.cjs +120 -133
- package/dist/operations/index.d.cts +2 -2
- package/dist/operations/index.d.ts +2 -2
- package/dist/operations/index.js +3 -16
- package/dist/pool.cjs +9 -9
- package/dist/pool.d.cts +1 -1
- package/dist/pool.d.ts +1 -1
- package/dist/pool.js +4 -4
- package/dist/resources/index.cjs +4 -4
- package/dist/resources/index.d.cts +1 -1
- package/dist/resources/index.d.ts +1 -1
- package/dist/resources/index.js +3 -3
- package/docs/API.md +62 -37
- package/package.json +2 -1
|
@@ -135,13 +135,13 @@ import {
|
|
|
135
135
|
VersionInformationResource,
|
|
136
136
|
VersionResource,
|
|
137
137
|
ZoneInformationResource
|
|
138
|
-
} from "./chunk-
|
|
138
|
+
} from "./chunk-5DS6F6GF.js";
|
|
139
139
|
import {
|
|
140
140
|
AutotaskConfigError,
|
|
141
141
|
HttpClient,
|
|
142
142
|
resolveConfig,
|
|
143
143
|
runWithSignal
|
|
144
|
-
} from "./chunk-
|
|
144
|
+
} from "./chunk-MFDQHFGJ.js";
|
|
145
145
|
|
|
146
146
|
// src/client.ts
|
|
147
147
|
var AutotaskClient = class {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
CAPABILITIES
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-VKE56TTN.js";
|
|
4
4
|
|
|
5
5
|
// src/auth.ts
|
|
6
6
|
var AUTH_HEADERS = {
|
|
@@ -10863,8 +10863,8 @@ var EMPTY_REASON_STAMPS = {
|
|
|
10863
10863
|
var POINTER_NOTES = {
|
|
10864
10864
|
"ticket_history.query": `W1 (ww29 (australia-nz) live 2026-10-04; vendor contract change live-verified 2026-10-06): the vendor requires ticket_history.query to be supplied with exactly ONE ticketID-equals filter \u2014 an unfiltered call 500s by contract (10-06 text: "When querying the TicketHistory entity you are required to supply one and only one ticketID equals filter"). WITH the filter the query WORKS (live 2026-10-06: rows returned, hasMore true \u2014 a single {op:'eq', field:'ticketID', value:<id>} condition; the filter vocabulary is eq/noteq/gt/gte/lt/lte/beginsWith/endsWith/contains/exist/notExist/in/notIn/and/or). tickets.timeline / tickets.fullContext remain the convenient composites; raw history rows come from the filtered query.`,
|
|
10865
10865
|
"time_entries.create": `W-A3 (ww29 (australia-nz) live 2026-10-04; re-walled 2026-10-06; scope re-stamped 2026-10-21): for a time_entries.create whose (resourceID, roleID) pair selects the API-only user's own resource, the vendor refused with "API-only user cannot be selected for this field" (10-04 text: "The specified AssignedResourceID and AssignedRoleID combination is not currently defined"). This is a (resource, role) pair wall, NOT a blanket refusal of time-entry writes: live time_entries.create calls succeeded on 2026-10-21 (pair not recorded; two entries created, read back, 1.0 h total). The authorised pair set has NOT been re-adjudicated by a live probe; if a create fails with the pair-validation text, check the resource's role authorisation (whoAmI / the resource record) and try another pair. createForResource's 10-06 wall is likewise unconfirmed for other pairs. Working reads remain postedWithin / the window helpers (W-D3 pointer note).`,
|
|
10866
|
-
"time_entries.getPosted":
|
|
10867
|
-
"time_entries.getUnposted":
|
|
10866
|
+
"time_entries.getPosted": `W-D3 (ww29 (australia-nz) live 2026-10-04, re-verified live 2026-10-27): this zone's TimeEntry entity exposes NO posted-state field \u2014 reads carry no postedDate/postedOnTime and a postedDate exist/notExist filter fails with SERVER_ERROR "Unable to find postedDate in the TimeEntry Entity". time_entries.getPosted therefore no longer sends any postedDate condition: posted state is derived from billing_items.timeEntryID (an entry is posted when a billing item references it, whether or not billingApprovalDateTime is set \u2014 ww29 never populates it). If a call still fails, the fault is NOT the old postedDate wall: it is a billing_items join/read fault (typed error \u2014 429 RATE_LIMITED included \u2014 propagates, no partial result). The dateWorked window reads time_entries.postedWithin / time_entries.dateWorkedWindow use the same derivation.`,
|
|
10867
|
+
"time_entries.getUnposted": `W-D3 (ww29 (australia-nz) live 2026-10-04, re-verified live 2026-10-27): this zone's TimeEntry entity exposes NO posted-state field \u2014 reads carry no postedDate/postedOnTime and a postedDate exist/notExist filter fails with SERVER_ERROR "Unable to find postedDate in the TimeEntry Entity". time_entries.getUnposted therefore no longer sends any postedDate condition: unposted state is derived from billing_items.timeEntryID (an entry is posted when a billing item references it, whether or not billingApprovalDateTime is set \u2014 ww29 never populates it). If a call still fails, the fault is NOT the old postedDate wall: it is a billing_items join/read fault (typed error \u2014 429 RATE_LIMITED included \u2014 propagates, no partial result). The dateWorked window reads time_entries.postedWithin / time_entries.dateWorkedWindow use the same derivation.`,
|
|
10868
10868
|
"authenticate.get": "W2: authenticate.get is DESIGNATOR-ONLY \u2014 it returns the designator identity, not a tenant data surface; a miss/empty here is not a data-empty signal (no emptyReason is attached by design \u2014 a false reason would be worse than none)"
|
|
10869
10869
|
};
|
|
10870
10870
|
var BLIND_SURFACE_INVENTORY = {
|
|
@@ -16791,6 +16791,20 @@ var HttpClient = class {
|
|
|
16791
16791
|
}
|
|
16792
16792
|
};
|
|
16793
16793
|
|
|
16794
|
+
// src/operations/requiredFields.ts
|
|
16795
|
+
function effectiveRequiredFields(record, zoneFacts) {
|
|
16796
|
+
const prefix = zoneFacts?.createGuidance?.liveProvenPrefix;
|
|
16797
|
+
if (Array.isArray(prefix) && prefix.length > 0) {
|
|
16798
|
+
return { fields: [...prefix], from: "live-proven" };
|
|
16799
|
+
}
|
|
16800
|
+
const zoneSet = zoneFacts?.createRequiredSet;
|
|
16801
|
+
if (Array.isArray(zoneSet) && zoneSet.length > 0) {
|
|
16802
|
+
return { fields: [...zoneSet], from: "zone" };
|
|
16803
|
+
}
|
|
16804
|
+
const spec = record?.requiredFields;
|
|
16805
|
+
return { fields: Array.isArray(spec) ? [...spec] : [], from: "spec" };
|
|
16806
|
+
}
|
|
16807
|
+
|
|
16794
16808
|
// src/pagination.ts
|
|
16795
16809
|
var MAX_PAGES = 1e3;
|
|
16796
16810
|
function clampPageSize(pageSize) {
|
|
@@ -20005,6 +20019,16 @@ var MutationBase = class extends MetaBase {
|
|
|
20005
20019
|
warnings.push(`parent ${parentId} not found; the vendor would reject the create`);
|
|
20006
20020
|
}
|
|
20007
20021
|
}
|
|
20022
|
+
if (isRecord2(data)) {
|
|
20023
|
+
const eff = effectiveRequiredFields(void 0, RELATIONSHIP_MAP[this.config.key]?.zoneFacts ?? null);
|
|
20024
|
+
const missing = eff.fields.filter((f) => f !== this.config.parentField && data[f] === void 0);
|
|
20025
|
+
if (missing.length > 0) {
|
|
20026
|
+
warnings.push(`required field(s) not in the data: ${missing.join(", ")} (${eff.from}); the vendor would likely reject the create`);
|
|
20027
|
+
}
|
|
20028
|
+
}
|
|
20029
|
+
if (this.config.key === "companies") {
|
|
20030
|
+
warnings.push('the vendor auto-creates a "Primary Address" location for a new company (rename it with company_locations.update; it cannot be deleted via the API)');
|
|
20031
|
+
}
|
|
20008
20032
|
return buildDryRunResult({
|
|
20009
20033
|
operation: `${this.config.key}.create`,
|
|
20010
20034
|
method: "POST",
|
|
@@ -20400,6 +20424,7 @@ export {
|
|
|
20400
20424
|
mergePartialBody,
|
|
20401
20425
|
blindStampFor,
|
|
20402
20426
|
decodeFileData,
|
|
20427
|
+
effectiveRequiredFields,
|
|
20403
20428
|
MAX_PAGES,
|
|
20404
20429
|
clampPageSize,
|
|
20405
20430
|
totalPagesFor,
|