node-autotask 0.16.0 → 0.18.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.
Files changed (40) hide show
  1. package/ARCHITECTURE.md +10 -4
  2. package/MCP_TOOL_CATALOG.json +2 -2
  3. package/MCP_TOOL_MANIFEST.md +4 -4
  4. package/N8N_MCP_MANIFEST.json +2 -2
  5. package/N8N_MCP_MANIFEST.md +3 -3
  6. package/README.md +36 -0
  7. package/capabilities.json +1571 -1571
  8. package/dist/capabilities.cjs +2 -2
  9. package/dist/capabilities.js +1 -1
  10. package/dist/{chunk-EWMG3HHU.cjs → chunk-5O5EPYBO.cjs} +1570 -1570
  11. package/dist/{chunk-L3TK4CN5.cjs → chunk-7I3F3AJJ.cjs} +429 -419
  12. package/dist/{chunk-VCGC6YCI.cjs → chunk-G564CHXM.cjs} +135 -135
  13. package/dist/{chunk-NB254T3F.js → chunk-HXOWEYV3.js} +49 -39
  14. package/dist/{chunk-JIDR3NPV.js → chunk-VV2UUW2J.js} +1570 -1570
  15. package/dist/{chunk-U6JUHHMB.js → chunk-VYUZZIEE.js} +66 -32
  16. package/dist/{chunk-GWALLMAM.js → chunk-W2WSZOZA.js} +2 -2
  17. package/dist/{chunk-MAYYTYV5.cjs → chunk-WRWX6WIK.cjs} +68 -34
  18. package/dist/{index-CUsvZndu.d.ts → index-BqPY04ZG.d.ts} +89 -16
  19. package/dist/{index-leMyBJze.d.cts → index-D7x3MkLK.d.cts} +89 -16
  20. package/dist/index.cjs +24 -22
  21. package/dist/index.d.cts +2 -2
  22. package/dist/index.d.ts +2 -2
  23. package/dist/index.js +6 -4
  24. package/dist/operations/index.cjs +178 -105
  25. package/dist/operations/index.d.cts +22 -7
  26. package/dist/operations/index.d.ts +22 -7
  27. package/dist/operations/index.js +77 -4
  28. package/dist/pool.cjs +8 -8
  29. package/dist/pool.d.cts +1 -1
  30. package/dist/pool.d.ts +1 -1
  31. package/dist/pool.js +4 -4
  32. package/dist/resources/index.cjs +4 -4
  33. package/dist/resources/index.d.cts +1 -1
  34. package/dist/resources/index.d.ts +1 -1
  35. package/dist/resources/index.js +3 -3
  36. package/docs/API.md +78 -15
  37. package/examples/basic.ts +2 -2
  38. package/examples/mcp-server-http.ts +5 -4
  39. package/examples/mcp-server.ts +3 -3
  40. package/package.json +3 -2
package/ARCHITECTURE.md CHANGED
@@ -396,8 +396,13 @@ The only total is `count()` (`/query/count`); "more rows exist" is `nextPageUrl
396
396
  The node follows `pageDetails.nextPageUrl` (an absolute vendor URL, POSTing the
397
397
  filter to it), and the SDK does the same: the walk is the fetcher
398
398
  (`BaseResource.fetchPage`), which POSTs the `QueryModel` body to
399
- `/V1.0/<E>/query` for page 1 (`MaxRecords = pageSize`) and POSTs the preserved
400
- filter to the ABSOLUTE cursor for every later page. The cursor is rebased to
399
+ `/V1.0/<E>/query` for page 1 (`MaxRecords = pageSize`) and POSTs the SAME body
400
+ (`buildQueryBody` — `MaxRecords`, `IncludeFields` with the `id` append, the
401
+ preserved `filter`) to the ABSOLUTE cursor for every later page (issue #118:
402
+ before the fix the continuation carried `{ filter }` alone and returned the
403
+ full vendor model). Live-verified 2026-10-19: the vendor HONOURS
404
+ `IncludeFields` on a continuation and IGNORES `MaxRecords` (its own 500-row
405
+ page; the walk slices to its limit). The cursor is rebased to
401
406
  the client base URL (`cursorToPath`): same-origin cursors are stripped of the
402
407
  base and used verbatim, cross-origin ones are re-based onto the client base —
403
408
  mirroring the node's custom-zone behaviour. A page reports `hasMore` when
@@ -993,8 +998,9 @@ export const NoopLogger: Logger = {};
993
998
  envelope pass-through, per-envelope unwrap errors, error mapping per status (vendor error
994
999
  body formatting), retry/backoff on 429 with `Retry-After`, `Itgenatr005` as retryable
995
1000
  `RateLimitError`, `AbortSignal` timeout, concurrency guard.
996
- - **Pagination (`pagination.test.ts`)**: multi-page cursor-follow walk (POST the filter
997
- to the absolute `nextPageUrl`, rebased to the client base URL), early stop on short
1001
+ - **Pagination (`pagination.test.ts`)**: multi-page cursor-follow walk (POST the same
1002
+ `QueryModel` body to the absolute `nextPageUrl`, rebased to the client base URL;
1003
+ issue #118 pins the continuation's `IncludeFields`/`MaxRecords`), early stop on short
998
1004
  page, **1000-page guard** (`PaginationLimitError`), `collectAll` equivalence.
999
1005
  - **Query (`query.test.ts`)**: filter builder (13 operators, and/or wrapping, UDF flag),
1000
1006
  cap enforcement (500 OR-conditions, 1 UDF/query), GET-length measurement.
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "generatedBy": "scripts/build-tool-catalog.mjs",
3
- "generatedAt": "2026-10-17T13:48:44.078Z",
4
- "planHash": "bd88648453f58ede018062ce66acefacb672fecaa450af89f421057809971e14",
3
+ "generatedAt": "2026-10-19T05:26:26.501Z",
4
+ "planHash": "5176d37fc9bae34139c151ae0ea8336dab63a30382f04acbcaed0e24cdd71d5f",
5
5
  "metaTools": [
6
6
  {
7
7
  "name": "autotask_catalog",
@@ -1,6 +1,6 @@
1
1
  # MCP Tool Manifest — node-autotask
2
2
 
3
- <!-- GENERATED by scripts/project-mcp-tools.mjs at 2026-10-17T13:48:43.787Z — do not hand-edit. -->
3
+ <!-- GENERATED by scripts/project-mcp-tools.mjs at 2026-10-19T05:26:26.653Z — do not hand-edit. -->
4
4
 
5
5
  Mechanical MCP projection of the capability registry (generator-design section 7, ARCHITECTURE section 19.5).
6
6
  Tool names are the plan `mcpTool` columns (entity-first `autotask_<entity>_<verb>`); descriptions are the
@@ -8,7 +8,7 @@ registry `purpose` + a mechanical bounds/flags sentence; annotations derive from
8
8
  Curation edits live ONLY in `MCP_TOOL_OVERRIDES.json` (records `{ tool, field, newValue, reason }`).
9
9
 
10
10
  Registry: 1213 operations; projected tools: 850 (one per registry op with a non-null `mcpTool`);
11
- not projected (catalog/describe material): 363. planHash: `bd88648453f58ede…`
11
+ not projected (catalog/describe material): 363. planHash: `5176d37fc9bae341…`
12
12
 
13
13
  ## Always-on core tier (CORE_RULE — computed, never a hand list)
14
14
 
@@ -947,8 +947,8 @@ singleton, so no helper tier is expected there; G8, 2026-09-26.)
947
947
 
948
948
  ## Meta
949
949
 
950
- - generatedAt: 2026-10-17T13:48:43.787Z
951
- - planHash: bd88648453f58ede018062ce66acefacb672fecaa450af89f421057809971e14
950
+ - generatedAt: 2026-10-19T05:26:26.653Z
951
+ - planHash: 5176d37fc9bae34139c151ae0ea8336dab63a30382f04acbcaed0e24cdd71d5f
952
952
  - registry records: 1213
953
953
  - projected tools: 850
954
954
  - core tier: 15
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "schema": "node-autotask n8n consumer mcp projection v1",
3
- "generatedAt": "2026-10-17T13:48:43.907Z",
3
+ "generatedAt": "2026-10-19T05:26:26.775Z",
4
4
  "generator": "scripts/project-n8n-mcp.mjs",
5
5
  "inputs": {
6
6
  "capabilities": "capabilities.json (the capability registry — the single source of truth)",
@@ -3667,6 +3667,6 @@
3667
3667
  "approvalGatedWrites": 2,
3668
3668
  "destructiveExcluded": 3
3669
3669
  },
3670
- "capabilitiesHash": "fd92667b96dd9c74d9bbda2a34bf50b9791e2f236a6d2bb50b50a02a1d064882",
3670
+ "capabilitiesHash": "d30f65bc49ac2898667865b753c0f0cd3f0c951c337a1036b48b049e8c32c61a",
3671
3671
  "curationHash": "e19117ce73e38d9aded3be7e7f077a4e185d2e10294622b76c17d67f63cf9e3b"
3672
3672
  }
@@ -1,6 +1,6 @@
1
1
  # N8N MCP Manifest — node-autotask (consumer projection)
2
2
 
3
- <!-- GENERATED by scripts/project-n8n-mcp.mjs at 2026-10-17T13:48:43.907Z — do not hand-edit. -->
3
+ <!-- GENERATED by scripts/project-n8n-mcp.mjs at 2026-10-19T05:26:26.775Z — do not hand-edit. -->
4
4
 
5
5
  The n8n CONSUMER projection of the capability registry: the canonical source for what the
6
6
  n8n-side MCP tools must expose. The SDK is canonical — this is a projection of it, never a
@@ -282,6 +282,6 @@ only via a recorded change to `n8n-mcp.curation.json`.
282
282
 
283
283
  ## Meta
284
284
 
285
- - generatedAt: 2026-10-17T13:48:43.907Z
286
- - capabilitiesHash: fd92667b96dd9c74d9bbda2a34bf50b9791e2f236a6d2bb50b50a02a1d064882
285
+ - generatedAt: 2026-10-19T05:26:26.775Z
286
+ - capabilitiesHash: d30f65bc49ac2898667865b753c0f0cd3f0c951c337a1036b48b049e8c32c61a
287
287
  - curationHash: e19117ce73e38d9aded3be7e7f077a4e185d2e10294622b76c17d67f63cf9e3b
package/README.md CHANGED
@@ -147,6 +147,42 @@ length and a two-character prefix per value — never a full value. See
147
147
  [`docs/LIVE-TESTING.md`](./docs/LIVE-TESTING.md) §0b.
148
148
 
149
149
 
150
+ ### The full variable set
151
+
152
+ `.env.example` is the committed template; `.env*` is gitignored, so real values never enter git.
153
+
154
+ ```sh
155
+ cp .env.example .env # then fill in the three credentials
156
+ ```
157
+
158
+ Optional settings are **commented out with a sample value** — uncomment a line to set it. For example
159
+ `AUTOTASK_PROFILE=agent` selects the conservative agent profile (page 25, 8,000/hr, 20 s timeout,
160
+ 1 retry, 3 concurrent), and `AUTOTASK_MAX_RETRIES=1` is that profile's retry budget. Leave the five
161
+ server-layer overrides unset rather than blank: an empty value is *invalid* for them by design
162
+ (fail-closed), so a stray `AUTOTASK_MAX_RETRIES=` stops startup with an error naming the variable.
163
+
164
+ | variable | read by | meaning |
165
+ |---|---|---|
166
+ | `AUTOTASK_TRACKING_IDENTIFIER` | `bin/doctor.js`, examples, live scripts | API tracking identifier (aliases: `AUTOTASK_API_CODE`, `AUTOTASK_API_INTEGRATION_CODE`) |
167
+ | `AUTOTASK_USERNAME` | same | API user (alias: `AUTOTASK_USER`) |
168
+ | `AUTOTASK_SECRET` | same | secret — see the single-quote contract above |
169
+ | `AUTOTASK_ZONE` | doctor, examples, live scripts | **catalog name**, not a host (default `old-australian` = webservices6); `other` requires a base URL — the template lists all 23 |
170
+ | `AUTOTASK_BASE_URL` | doctor, examples, live scripts | explicit REST base; **wins** over the zone; include `/atservicesrest` |
171
+ | `AUTOTASK_IMPERSONATION_ID` | doctor, examples | optional `ImpersonationResourceId` header |
172
+ | `AUTOTASK_PROFILE` | reference MCP servers | `library` (default) / `agent` — the agent profile's numbers are compared in the template and in *Agent profile* above |
173
+ | `AUTOTASK_RATE_LIMIT_PER_HOUR` | reference MCP servers | hourly limiter: a positive integer, or `0` / `off` to disable |
174
+ | `AUTOTASK_MAX_CONCURRENT` | reference MCP servers | concurrency guard (vendor max 10) |
175
+ | `AUTOTASK_TIMEOUT_MS` | reference MCP servers | whole-call timeout |
176
+ | `AUTOTASK_MAX_RETRIES` | reference MCP servers | retry budget (`0` disables) |
177
+ | `AUTOTASK_UNTRUSTED_WRAP` | MCP servers | `on` (default) / `off` — the `<untrusted_content>` projection |
178
+ | `AUTOTASK_GATEWAY_MODE` | `examples/mcp-server-http.ts` | `on` for multi-tenant gateway mode (per-request credentials) |
179
+ | `PORT` | `examples/mcp-server-http.ts` | listen port (default 7437) |
180
+ | `AUTOTASK_ENV_FILE` | live scripts | alternate `.env` path (shell variables always win) |
181
+
182
+ The SDK itself never reads `process.env`: pass `apiIntegrationCode` / `userName` / `secret`
183
+ explicitly, or call `loadAutotaskCredentialsFromEnv()`.
184
+
185
+
150
186
  ## Agent profile (conservative limits for LLM-driven servers)
151
187
 
152
188
  `profile: 'agent'` on the config switches the SDK to conservative limits for