node-autotask 0.10.0 → 0.12.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/MCP_TOOL_CATALOG.json +27 -9
- package/MCP_TOOL_MANIFEST.md +13 -12
- package/N8N_MCP_MANIFEST.json +3 -3
- package/N8N_MCP_MANIFEST.md +4 -4
- package/README.md +1 -1
- package/capabilities.json +1460 -1250
- package/dist/capabilities.cjs +2 -2
- package/dist/capabilities.js +1 -1
- package/dist/{chunk-NVJ2PTN3.js → chunk-3WIDDEHP.js} +2 -2
- package/dist/{chunk-6KFP5HV3.js → chunk-4A6XLQHE.js} +1459 -1249
- package/dist/{chunk-WTVLHMZA.cjs → chunk-5N6DYKXO.cjs} +519 -39
- package/dist/{chunk-HWC2WPX2.js → chunk-GD4JRPYF.js} +498 -18
- package/dist/{chunk-WTVD2JZN.cjs → chunk-JKZVCFRY.cjs} +1459 -1249
- package/dist/{chunk-3VB6N44U.js → chunk-MY7ZSXY3.js} +1075 -6
- package/dist/{chunk-QUM74WLQ.cjs → chunk-SRJI5XUZ.cjs} +135 -135
- package/dist/{chunk-S7VMY5KN.cjs → chunk-TELBX6HK.cjs} +1462 -393
- package/dist/{index-DGgMD8aq.d.ts → index-D8I6taEo.d.cts} +200 -2
- package/dist/{index-BOyh7S65.d.cts → index-uAxAcRol.d.ts} +200 -2
- package/dist/index.cjs +19 -19
- package/dist/index.d.cts +4 -4
- package/dist/index.d.ts +4 -4
- package/dist/index.js +4 -4
- package/dist/operations/index.cjs +213 -529
- package/dist/operations/index.d.cts +24 -6
- package/dist/operations/index.d.ts +24 -6
- package/dist/operations/index.js +102 -418
- package/dist/pool.cjs +8 -8
- package/dist/pool.d.cts +2 -2
- package/dist/pool.d.ts +2 -2
- package/dist/pool.js +4 -4
- package/dist/resources/index.cjs +4 -4
- package/dist/resources/index.d.cts +2 -2
- package/dist/resources/index.d.ts +2 -2
- package/dist/resources/index.js +3 -3
- package/dist/types/index.d.cts +1 -1
- package/dist/types/index.d.ts +1 -1
- package/docs/API.md +192 -2
- package/docs/N8N-ADAPTER.md +1 -1
- package/package.json +1 -1
- package/dist/{index-cQ6CRexR.d.cts → index-BXtKN1M5.d.cts} +201 -201
- package/dist/{index-cQ6CRexR.d.ts → index-BXtKN1M5.d.ts} +201 -201
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
CAPABILITIES
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-4A6XLQHE.js";
|
|
4
4
|
|
|
5
5
|
// src/auth.ts
|
|
6
6
|
var AUTH_HEADERS = {
|
|
@@ -2063,7 +2063,7 @@ import { AsyncLocalStorage } from "async_hooks";
|
|
|
2063
2063
|
var RELATIONSHIP_ZONE = {
|
|
2064
2064
|
"zone": "ww29",
|
|
2065
2065
|
"label": "australia-nz",
|
|
2066
|
-
"verifiedAt": "2026-10-
|
|
2066
|
+
"verifiedAt": "2026-10-15"
|
|
2067
2067
|
};
|
|
2068
2068
|
var RELATIONSHIP_MAP = {
|
|
2069
2069
|
"appointments": {
|
|
@@ -5103,8 +5103,8 @@ var RELATIONSHIP_MAP = {
|
|
|
5103
5103
|
"unproven": true,
|
|
5104
5104
|
"blocker": {
|
|
5105
5105
|
"kind": "blind-parent",
|
|
5106
|
-
"message": "vendor 500 (stage-11 apply-matrix, marker FULL100W-1791110339): the create consumed the vendor field ladder and then failed on the parent reference \u2014 the parent table
|
|
5107
|
-
"remedy": "provision a parent record in the Autotask UI first \u2014 the expense_reports
|
|
5106
|
+
"message": "vendor 500 (stage-11 apply-matrix, marker FULL100W-1791110339): the create consumed the vendor field ladder and then failed on the parent reference \u2014 the parent table's LIST surface is visibility-scoped for this API user (0 rows; re-probed 2026-10-15), so no parent id can be enumerated through the API list surface; get-by-id is the authority (it sees through the blind list \u2014 PROVEN 2026-10-15 on resources) (W-A6). The exact final vendor response is preserved verbatim in vendorEvidence (campaign receipt artifact, as recorded on disk).",
|
|
5107
|
+
"remedy": "provision a parent record in the Autotask UI first \u2014 the expense_reports LIST surface is visibility-scoped for this API user (0 rows; re-probed 2026-10-15; W-A6), so no parent id can be read back through the list surface (get-by-id is the authority); then retry the create with the real parent id."
|
|
5108
5108
|
},
|
|
5109
5109
|
"vendorEvidence": [
|
|
5110
5110
|
'{"error":true,"code":"SERVER_ERROR","category":"server","retryable":true,"httpStatus":500,"operation":"expense_items.create","suggestedAction":"Retry with backoff; the server error is transient.","correlationId":"178f9509-d97a-4e69-9e4b-f7af67d98e64","message":"Picklist value [1] does not exist for '
|
|
@@ -5168,7 +5168,7 @@ var RELATIONSHIP_MAP = {
|
|
|
5168
5168
|
"unproven": true,
|
|
5169
5169
|
"blocker": {
|
|
5170
5170
|
"kind": "blind-parent",
|
|
5171
|
-
"message": "vendor 500 (stage-11 apply-matrix, marker FULL100W-1791110339): the create consumed the vendor field ladder and then failed on the parent reference \u2014 the parent table
|
|
5171
|
+
"message": "vendor 500 (stage-11 apply-matrix, marker FULL100W-1791110339): the create consumed the vendor field ladder and then failed on the parent reference \u2014 the parent table's LIST surface is visibility-scoped for this API user (0 rows; re-probed 2026-10-15), so no parent id can be enumerated through the API list surface; get-by-id is the authority (it sees through the blind list \u2014 PROVEN 2026-10-15 on resources) (W-A6). The exact final vendor response is preserved verbatim in vendorEvidence (campaign receipt artifact, as recorded on disk).",
|
|
5172
5172
|
"remedy": "provision a parent record in the Autotask UI first; then retry the create with the real parent id."
|
|
5173
5173
|
},
|
|
5174
5174
|
"vendorEvidence": [
|
|
@@ -6657,7 +6657,7 @@ var RELATIONSHIP_MAP = {
|
|
|
6657
6657
|
"blindSurfaces": null,
|
|
6658
6658
|
"zoneFacts": {
|
|
6659
6659
|
"quirks": [
|
|
6660
|
-
"the resources table is
|
|
6660
|
+
"the resources table's LIST surface is visibility-scoped for this API user: count/query return 0; get-by-id sees through the blind list (PROVEN 2026-10-15: resources.get(31131373), resources.get(29869529) and resources.get(31131505) each returned a full record); the API user's own id is visible via resources.whoAmI (the API-only identity, resource 31131505 'Autotask API')",
|
|
6661
6661
|
"POST /V1.0/Resources 405s at the method level \u2014 no resource creation via REST at all (the registry has no resources.create op)"
|
|
6662
6662
|
]
|
|
6663
6663
|
},
|
|
@@ -7051,7 +7051,7 @@ var RELATIONSHIP_MAP = {
|
|
|
7051
7051
|
"unproven": true,
|
|
7052
7052
|
"blocker": {
|
|
7053
7053
|
"kind": "blind-parent",
|
|
7054
|
-
"message": "vendor 500 (stage-11 apply-matrix, marker FULL100W-1791110339): the create consumed the vendor field ladder and then failed on the parent reference \u2014 the parent table
|
|
7054
|
+
"message": "vendor 500 (stage-11 apply-matrix, marker FULL100W-1791110339): the create consumed the vendor field ladder and then failed on the parent reference \u2014 the parent table's LIST surface is visibility-scoped for this API user (0 rows; re-probed 2026-10-15), so no parent id can be enumerated through the API list surface; get-by-id is the authority (it sees through the blind list \u2014 PROVEN 2026-10-15 on resources) (W-A6). The exact final vendor response is preserved verbatim in vendorEvidence (campaign receipt artifact, as recorded on disk).",
|
|
7055
7055
|
"remedy": "provision a parent record in the Autotask UI first; then retry the create with the real parent id."
|
|
7056
7056
|
},
|
|
7057
7057
|
"vendorEvidence": [
|
|
@@ -9876,21 +9876,21 @@ var EMPTY_REASON_STAMPS = {
|
|
|
9876
9876
|
"count": {
|
|
9877
9877
|
"surface": "resources.count",
|
|
9878
9878
|
"kind": "tenant-empty-for-user",
|
|
9879
|
-
"note": "the
|
|
9879
|
+
"note": "the resources table's LIST surface is visibility-scoped for this API user (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521: 0 rows; re-probed 2026-10-15: count/query still 0) \u2014 the tenant HOLDS resources the list cannot see (get-by-id sees through the blind list \u2014 PROVEN 2026-10-15) \u2014 a 0/empty result here is INCONCLUSIVE (visibility-scoped, not tenant-level absence)",
|
|
9880
9880
|
"authority": "resources.get",
|
|
9881
9881
|
"remedy": "address a record by a known id (resources.get) or verify from a tenant user that owns the table \u2014 do not treat the 0 as tenant-level absence"
|
|
9882
9882
|
},
|
|
9883
9883
|
"query": {
|
|
9884
9884
|
"surface": "resources.query",
|
|
9885
9885
|
"kind": "tenant-empty-for-user",
|
|
9886
|
-
"note": "the
|
|
9886
|
+
"note": "the resources table's LIST surface is visibility-scoped for this API user (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521: 0 rows; re-probed 2026-10-15: count/query still 0) \u2014 the tenant HOLDS resources the list cannot see (get-by-id sees through the blind list \u2014 PROVEN 2026-10-15) \u2014 a 0/empty result here is INCONCLUSIVE (visibility-scoped, not tenant-level absence)",
|
|
9887
9887
|
"authority": "resources.get",
|
|
9888
9888
|
"remedy": "address a record by a known id (resources.get) or verify from a tenant user that owns the table \u2014 do not treat the 0 as tenant-level absence"
|
|
9889
9889
|
},
|
|
9890
9890
|
"update": {
|
|
9891
9891
|
"surface": "resources.update",
|
|
9892
9892
|
"kind": "tenant-empty-for-user",
|
|
9893
|
-
"note": "the
|
|
9893
|
+
"note": "the resources table's LIST surface is visibility-scoped for this API user (ww29 (australia-nz) live sweep 2026-10-04, marker FULL100-SEED-1791096521; re-probed 2026-10-15: list 0 rows) \u2014 the tenant HOLDS resources the list cannot see (get-by-id PROVEN 2026-10-15) \u2014 a resources update target miss here is INCONCLUSIVE (visibility-scoped, not a defect)",
|
|
9894
9894
|
"authority": "resources.get",
|
|
9895
9895
|
"remedy": "address a record by a known id (resources.get) or verify from a tenant user that owns the table \u2014 do not treat the 0 as tenant-level absence"
|
|
9896
9896
|
}
|
|
@@ -10238,8 +10238,8 @@ var EMPTY_REASON_STAMPS = {
|
|
|
10238
10238
|
var POINTER_NOTES = {
|
|
10239
10239
|
"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.`,
|
|
10240
10240
|
"time_entries.create": `W-A3 (ww29 (australia-nz) live 2026-10-04; drift re-verified 2026-10-06): the vendor now refuses ALL time-entry writes for this API-only user with "API-only user cannot be selected for this field" (10-04 text: "The specified AssignedResourceID and AssignedRoleID combination is not currently defined"). UNSATISFIABLE for an API-only integration user: the resources table is blind (0 rows) and the only selectable resource is the user's own API-only record, which the vendor refuses. createForResource \u2014 stage-11 PROVEN (8 live creates, 10-04) \u2014 is walled by the SAME drift (confirm-100 receipt 2026-10-06). Tenant evidence that valid pairs exist: postedWithin rows (resourceID 31131373 / 29869529 with roleID 29682834) \u2014 human resources the API user cannot select.`,
|
|
10241
|
-
"time_entries.getPosted": `W-D3 (ww29 (australia-nz) live 2026-10-04, re-verified 2026-10-
|
|
10242
|
-
"time_entries.getUnposted": `W-D3 (ww29 (australia-nz) live 2026-10-04, re-verified 2026-10-
|
|
10241
|
+
"time_entries.getPosted": `W-D3 (ww29 (australia-nz) live 2026-10-04, re-verified live 2026-10-15): this zone's TimeEntry entity exposes NO posted-state filter field \u2014 the vendor rejects postingStatus, postedDate and status with "Unable to find X in the TimeEntry Entity" (live field-existence oracle 2026-10-04: only dateWorked / resourceID / ticketID / taskID resolve as filter fields). Re-probed 2026-10-15 (ww29 re-probe campaign): time_entries.getPosted live 500, vendor body verbatim 'Unable to find postedDate in the TimeEntry Entity.' \u2014 a vendor endpoint defect on AU03, not a transient fault: posted cannot be filtered server-side on this zone \u2014 use time_entries.postedWithin (the dateWorked window, live-verified working) or read time_entries.query and derive posted-state from the fields your zone's entity exposes`,
|
|
10242
|
+
"time_entries.getUnposted": `W-D3 (ww29 (australia-nz) live 2026-10-04, re-verified live 2026-10-15): this zone's TimeEntry entity exposes NO posted-state filter field \u2014 the vendor rejects postingStatus, postedDate and status with "Unable to find X in the TimeEntry Entity" (live field-existence oracle 2026-10-04: only dateWorked / resourceID / ticketID / taskID resolve as filter fields). Re-probed 2026-10-15 (ww29 re-probe campaign): time_entries.getUnposted live 500, vendor body verbatim 'Unable to find postedDate in the TimeEntry Entity.' \u2014 a vendor endpoint defect on AU03, not a transient fault: unposted cannot be filtered server-side on this zone \u2014 use time_entries.postedWithin (the dateWorked window, live-verified working) or read time_entries.query and derive posted-state from the fields your zone's entity exposes`,
|
|
10243
10243
|
"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)"
|
|
10244
10244
|
};
|
|
10245
10245
|
var BLIND_SURFACE_INVENTORY = {
|
|
@@ -11785,7 +11785,7 @@ var REACHABILITY_PROBE_DEFAULTS = {
|
|
|
11785
11785
|
var CREATE_GUIDANCE = {
|
|
11786
11786
|
"zone": "ww29",
|
|
11787
11787
|
"label": "australia-nz",
|
|
11788
|
-
"verifiedAt": "2026-10-
|
|
11788
|
+
"verifiedAt": "2026-10-15",
|
|
11789
11789
|
"rows": [
|
|
11790
11790
|
{
|
|
11791
11791
|
"resource": "appointments",
|
|
@@ -12835,8 +12835,8 @@ var CREATE_GUIDANCE = {
|
|
|
12835
12835
|
"unproven": true,
|
|
12836
12836
|
"blocker": {
|
|
12837
12837
|
"kind": "blind-parent",
|
|
12838
|
-
"message": "vendor 500 (stage-11 apply-matrix, marker FULL100W-1791110339): the create consumed the vendor field ladder and then failed on the parent reference \u2014 the parent table
|
|
12839
|
-
"remedy": "provision a parent record in the Autotask UI first \u2014 the expense_reports
|
|
12838
|
+
"message": "vendor 500 (stage-11 apply-matrix, marker FULL100W-1791110339): the create consumed the vendor field ladder and then failed on the parent reference \u2014 the parent table's LIST surface is visibility-scoped for this API user (0 rows; re-probed 2026-10-15), so no parent id can be enumerated through the API list surface; get-by-id is the authority (it sees through the blind list \u2014 PROVEN 2026-10-15 on resources) (W-A6). The exact final vendor response is preserved verbatim in vendorEvidence (campaign receipt artifact, as recorded on disk).",
|
|
12839
|
+
"remedy": "provision a parent record in the Autotask UI first \u2014 the expense_reports LIST surface is visibility-scoped for this API user (0 rows; re-probed 2026-10-15; W-A6), so no parent id can be read back through the list surface (get-by-id is the authority); then retry the create with the real parent id."
|
|
12840
12840
|
},
|
|
12841
12841
|
"vendorEvidence": [
|
|
12842
12842
|
'{"error":true,"code":"SERVER_ERROR","category":"server","retryable":true,"httpStatus":500,"operation":"expense_items.create","suggestedAction":"Retry with backoff; the server error is transient.","correlationId":"178f9509-d97a-4e69-9e4b-f7af67d98e64","message":"Picklist value [1] does not exist for '
|
|
@@ -12857,7 +12857,7 @@ var CREATE_GUIDANCE = {
|
|
|
12857
12857
|
"unproven": true,
|
|
12858
12858
|
"blocker": {
|
|
12859
12859
|
"kind": "blind-parent",
|
|
12860
|
-
"message": "vendor 500 (stage-11 apply-matrix, marker FULL100W-1791110339): the create consumed the vendor field ladder and then failed on the parent reference \u2014 the parent table
|
|
12860
|
+
"message": "vendor 500 (stage-11 apply-matrix, marker FULL100W-1791110339): the create consumed the vendor field ladder and then failed on the parent reference \u2014 the parent table's LIST surface is visibility-scoped for this API user (0 rows; re-probed 2026-10-15), so no parent id can be enumerated through the API list surface; get-by-id is the authority (it sees through the blind list \u2014 PROVEN 2026-10-15 on resources) (W-A6). The exact final vendor response is preserved verbatim in vendorEvidence (campaign receipt artifact, as recorded on disk).",
|
|
12861
12861
|
"remedy": "provision a parent record in the Autotask UI first; then retry the create with the real parent id."
|
|
12862
12862
|
},
|
|
12863
12863
|
"vendorEvidence": [
|
|
@@ -13437,7 +13437,7 @@ var CREATE_GUIDANCE = {
|
|
|
13437
13437
|
"unproven": true,
|
|
13438
13438
|
"blocker": {
|
|
13439
13439
|
"kind": "blind-parent",
|
|
13440
|
-
"message": "vendor 500 (stage-11 apply-matrix, marker FULL100W-1791110339): the create consumed the vendor field ladder and then failed on the parent reference \u2014 the parent table
|
|
13440
|
+
"message": "vendor 500 (stage-11 apply-matrix, marker FULL100W-1791110339): the create consumed the vendor field ladder and then failed on the parent reference \u2014 the parent table's LIST surface is visibility-scoped for this API user (0 rows; re-probed 2026-10-15), so no parent id can be enumerated through the API list surface; get-by-id is the authority (it sees through the blind list \u2014 PROVEN 2026-10-15 on resources) (W-A6). The exact final vendor response is preserved verbatim in vendorEvidence (campaign receipt artifact, as recorded on disk).",
|
|
13441
13441
|
"remedy": "provision a parent record in the Autotask UI first; then retry the create with the real parent id."
|
|
13442
13442
|
},
|
|
13443
13443
|
"vendorEvidence": [
|
|
@@ -16315,6 +16315,477 @@ async function resolveCompositeNames(http, plan, opts = {}) {
|
|
|
16315
16315
|
};
|
|
16316
16316
|
}
|
|
16317
16317
|
|
|
16318
|
+
// src/field-sets.ts
|
|
16319
|
+
var MODEL_FIELD_SETS = {
|
|
16320
|
+
"appointments": ["id", "createDateTime", "creatorResourceID", "description", "endDateTime", "resourceID", "startDateTime", "title", "updateDateTime"],
|
|
16321
|
+
"billing_codes": ["id", "afterHoursWorkType", "billingCodeType", "department", "description", "externalNumber", "generalLedgerAccount", "isActive", "isExcludedFromNewContracts", "markupRate", "name", "taxCategoryID", "unitCost", "unitPrice", "useType"],
|
|
16322
|
+
"billing_items": ["id", "accountManagerWhenApprovedID", "billingCodeID", "billingItemType", "companyID", "configurationItemID", "contractBlockID", "contractChargeID", "contractID", "contractServiceAdjustmentID", "contractServiceBundleAdjustmentID", "contractServiceBundleID", "contractServiceBundlePeriodID", "contractServiceID", "contractServicePeriodID", "description", "expenseItemID", "extendedPrice", "internalCurrencyExtendedPrice", "internalCurrencyRate", "internalCurrencyTaxDollars", "internalCurrencyTotalAmount", "invoiceID", "itemApproverID", "itemDate", "itemName", "lineItemFullDescription", "lineItemGroupDescription", "milestoneID", "nonBillable", "organizationalLevelAssociationID", "ourCost", "postedDate", "postedOnTime", "projectChargeID", "projectID", "purchaseOrderNumber", "quantity", "rate", "roleID", "serviceBundleID", "serviceID", "sortOrderID", "subType", "taskID", "taxDollars", "ticketChargeID", "ticketID", "timeEntryID", "totalAmount", "vendorID", "webServiceDate"],
|
|
16323
|
+
"change_request_links": ["id", "changeRequestTicketID", "problemOrIncidentTicketID"],
|
|
16324
|
+
"checklist_libraries": ["id", "description", "entityType", "isActive", "name"],
|
|
16325
|
+
"checklist_library_checklist_items": ["id", "checklistLibraryID", "isImportant", "itemName", "knowledgebaseArticleID", "position", "soapParentPropertyId"],
|
|
16326
|
+
"classification_icons": ["id", "description", "isActive", "isSystem", "name", "relativeUrl"],
|
|
16327
|
+
"companies": ["id", "additionalAddressInformation", "address1", "address2", "alternatePhone1", "alternatePhone2", "apiVendorID", "assetValue", "billToCompanyLocationID", "billToAdditionalAddressInformation", "billingAddress1", "billingAddress2", "billToAddressToUse", "billToAttention", "billToCity", "billToCountryID", "billToState", "billToZipCode", "city", "classification", "companyCategoryID", "companyName", "companyNumber", "companyType", "competitorID", "countryID", "createDate", "createdByResourceID", "currencyID", "fax", "impersonatorCreatorResourceID", "invoiceEmailMessageID", "invoiceMethod", "invoiceNonContractItemsToParentCompany", "invoiceTemplateID", "isActive", "isClientPortalActive", "isEnabledForComanaged", "isSample", "isTaskFireActive", "isTaxExempt", "lastActivityDate", "lastTrackedModifiedDateTime", "marketSegmentID", "ownerResourceID", "parentCompanyID", "phone", "postalCode", "purchaseOrderTemplateID", "quoteEmailMessageID", "quoteTemplateID", "sicCode", "state", "stockMarket", "stockSymbol", "surveyCompanyRating", "taxID", "taxRegionID", "territoryID", "webAddress", "userDefinedFields"],
|
|
16328
|
+
"company_alerts": ["id", "alertText", "alertTypeID", "companyID", "soapParentPropertyId"],
|
|
16329
|
+
"company_locations": ["id", "address1", "address2", "alternatePhone1", "alternatePhone2", "city", "companyID", "countryID", "description", "fax", "isActive", "isPrimary", "isTaxExempt", "overrideCompanyTaxSettings", "name", "phone", "postalCode", "roundtripDistance", "state", "taxRegionID", "soapParentPropertyId"],
|
|
16330
|
+
"company_notes": ["id", "actionType", "assignedResourceID", "companyID", "completedDateTime", "contactID", "createDateTime", "endDateTime", "impersonatorCreatorResourceID", "impersonatorUpdaterResourceID", "lastModifiedDate", "name", "note", "opportunityID", "startDateTime", "soapParentPropertyId"],
|
|
16331
|
+
"company_site_configurations": ["id", "companyID", "locationName", "soapParentPropertyId", "userDefinedFields"],
|
|
16332
|
+
"company_webhooks": ["id", "deactivationUrl", "isActive", "isReady", "isSubscribedToCreateEvents", "isSubscribedToDeleteEvents", "isSubscribedToUpdateEvents", "name", "notificationEmailAddress", "ownerResourceID", "secretKey", "sendThresholdExceededNotification", "webhookGUID", "webhookUrl"],
|
|
16333
|
+
"configuration_item_billing_product_associations": ["id", "billingProductID", "configurationItemID", "effectiveDate", "expirationDate", "soapParentPropertyId"],
|
|
16334
|
+
"configuration_item_categories": ["id", "displayColorRGB", "isActive", "isClientPortalDefault", "isGlobalDefault", "name", "nickname"],
|
|
16335
|
+
"configuration_item_category_udf_associations": ["id", "configurationItemCategoryID", "isRequired", "userDefinedFieldDefinitionID", "soapParentPropertyId"],
|
|
16336
|
+
"configuration_item_dns_records": ["id", "createDateTime", "data", "installedProductID", "timeToLiveSeconds", "dnsType", "soapParentPropertyId"],
|
|
16337
|
+
"configuration_item_notes": ["id", "configurationItemID", "createDateTime", "creatorResourceID", "description", "impersonatorCreatorResourceID", "impersonatorUpdaterResourceID", "lastActivityDate", "noteType", "title", "soapParentPropertyId"],
|
|
16338
|
+
"configuration_item_related_items": ["id", "configurationItemID", "relatedConfigurationItemID", "relationship", "soapParentPropertyId"],
|
|
16339
|
+
"configuration_item_ssl_subject_alternative_names": ["id", "configurationItemID", "name", "soapParentPropertyId"],
|
|
16340
|
+
"configuration_item_types": ["id", "isActive", "name"],
|
|
16341
|
+
"configuration_item_webhooks": ["id", "deactivationUrl", "isActive", "isReady", "isSubscribedToCreateEvents", "isSubscribedToDeleteEvents", "isSubscribedToUpdateEvents", "name", "notificationEmailAddress", "ownerResourceID", "secretKey", "sendThresholdExceededNotification", "webhookGUID", "webhookUrl"],
|
|
16342
|
+
"configuration_items": ["id", "apiVendorID", "configurationItemCategoryID", "companyID", "companyLocationID", "configurationItemType", "contactID", "contractID", "contractServiceBundleID", "contractServiceID", "createDate", "createdByPersonID", "dailyCost", "dattoAvailableKilobytes", "dattoDeviceMemoryMegabytes", "dattoDrivesErrors", "dattoHostname", "dattoInternalIP", "dattoKernelVersionID", "dattoLastCheckInDateTime", "dattoNICSpeedKilobitsPerSecond", "dattoNumberOfAgents", "dattoNumberOfDrives", "dattoNumberOfVolumes", "dattoOffsiteUsedBytes", "dattoOSVersionID", "dattoPercentageUsed", "dattoProtectedKilobytes", "dattoRemoteIP", "dattoSerialNumber", "dattoUptimeSeconds", "dattoUsedKilobytes", "dattoZFSVersionID", "deviceNetworkingID", "domain", "domainRegistrarID", "domainRegistrationDateTime", "domainLastUpdatedDateTime", "domainExpirationDateTime", "hourlyCost", "impersonatorCreatorResourceID", "installDate", "installedByContactID", "installedByID", "isActive", "lastActivityPersonID", "lastActivityPersonType", "lastModifiedTime", "location", "monthlyCost", "notes", "numberOfUsers", "parentConfigurationItemID", "perUseCost", "productID", "referenceNumber", "referenceTitle", "rmmDeviceAuditAntivirusStatusID", "rmmDeviceAuditArchitectureID", "rmmDeviceAuditBackupStatusID", "rmmDeviceAuditDescription", "rmmDeviceAuditDeviceTypeID", "rmmDeviceAuditDisplayAdaptorID", "rmmDeviceAuditDomainID", "rmmDeviceAuditExternalIPAddress", "rmmDeviceAuditHostname", "rmmDeviceAuditIPAddress", "rmmDeviceAuditLastUser", "rmmDeviceAuditMacAddress", "rmmDeviceAuditManufacturerID", "rmmDeviceAuditFirmwareID", "rmmDeviceAuditMemoryBytes", "rmmDeviceAuditMissingPatchCount", "rmmDeviceAuditMobileNetworkOperatorID", "rmmDeviceAuditMobileNumber", "rmmDeviceAuditModelID", "rmmDeviceAuditMotherboardID", "rmmDeviceAuditOperatingSystem", "rmmDeviceAuditPatchStatusID", "rmmDeviceAuditProcessorID", "rmmDeviceAuditServicePackID", "rmmDeviceAuditSNMPContact", "rmmDeviceAuditSNMPLocation", "rmmDeviceAuditSNMPName", "rmmDeviceAuditSoftwareStatusID", "rmmDeviceAuditStorageBytes", "rmmDeviceID", "rmmDeviceUID", "rmmVsaxDeviceID", "rmmOpenAlertCount", "serialNumber", "serviceBundleID", "serviceID", "serviceLevelAgreementID", "setupFee", "sourceChargeID", "sourceChargeType", "sslSource", "sslCommonName", "sslValidFromDateTime", "sslValidUntilDateTime", "sslIssuedBy", "sslOrganization", "sslOrganizationUnit", "sslLocation", "sslSerialNumber", "sslSignatureAlgorithm", "vendorID", "warrantyExpirationDate", "rmmIsInMaintenanceMode", "rmmIsMobileDeviceManagementEnrolled", "rmmDeviceUrl", "userDefinedFields"],
|
|
16343
|
+
"contact_group_contacts": ["id", "contactId", "contactGroupId", "soapParentPropertyId"],
|
|
16344
|
+
"contact_groups": ["id", "name", "isActive"],
|
|
16345
|
+
"contact_webhooks": ["id", "deactivationUrl", "isActive", "isReady", "isSubscribedToCreateEvents", "isSubscribedToDeleteEvents", "isSubscribedToUpdateEvents", "name", "notificationEmailAddress", "ownerResourceID", "secretKey", "sendThresholdExceededNotification", "webhookGUID", "webhookUrl"],
|
|
16346
|
+
"contacts": ["id", "additionalAddressInformation", "addressLine", "addressLine1", "alternatePhone", "apiVendorID", "bulkEmailOptOutTime", "city", "companyID", "companyLocationID", "countryID", "createDate", "emailAddress", "emailAddress2", "emailAddress3", "extension", "externalID", "facebookUrl", "faxNumber", "firstName", "impersonatorCreatorResourceID", "isActive", "isOptedOutFromBulkEmail", "lastActivityDate", "lastModifiedDate", "lastName", "linkedInUrl", "middleInitial", "mobilePhone", "namePrefix", "nameSuffix", "note", "receivesEmailNotifications", "phone", "primaryContact", "roomNumber", "solicitationOptOut", "solicitationOptOutTime", "state", "surveyOptOut", "title", "twitterUrl", "zipCode", "soapParentPropertyId", "userDefinedFields"],
|
|
16347
|
+
"contract_billing_rules": ["id", "contractID", "createChargesAsBillable", "dailyProratedCost", "dailyProratedPrice", "determineUnits", "endDate", "executionMethod", "includeItemsInChargeDescription", "invoiceDescription", "isActive", "isDailyProrationEnabled", "maximumUnits", "minimumUnits", "productID", "startDate", "soapParentPropertyId"],
|
|
16348
|
+
"contract_block_hour_factors": ["id", "blockHourMultiplier", "contractHourlyRate", "contractID", "internalCurrencyContractHourlyRate", "roleID", "soapParentPropertyId"],
|
|
16349
|
+
"contract_blocks": ["id", "contractID", "datePurchased", "endDate", "hourlyRate", "hours", "hoursApproved", "invoiceNumber", "isPaid", "paymentNumber", "paymentType", "startDate", "status", "soapParentPropertyId"],
|
|
16350
|
+
"contract_charges": ["id", "billableAmount", "billingCodeID", "chargeType", "contractID", "contractServiceBundleID", "contractServiceID", "createDate", "creatorResourceID", "datePurchased", "description", "extendedCost", "internalCurrencyBillableAmount", "internalCurrencyUnitPrice", "internalPurchaseOrderNumber", "isBillableToCompany", "isBilled", "name", "notes", "organizationalLevelAssociationID", "productID", "purchaseOrderNumber", "status", "statusLastModifiedBy", "statusLastModifiedDate", "unitCost", "unitPrice", "unitQuantity", "soapParentPropertyId"],
|
|
16351
|
+
"contract_exclusion_billing_codes": ["id", "billingCodeID", "contractID", "soapParentPropertyId"],
|
|
16352
|
+
"contract_exclusion_roles": ["id", "contractID", "roleID", "soapParentPropertyId"],
|
|
16353
|
+
"contract_exclusion_set_excluded_roles": ["id", "contractExclusionSetID", "excludedRoleID", "soapParentPropertyId"],
|
|
16354
|
+
"contract_exclusion_set_excluded_work_types": ["id", "contractExclusionSetID", "excludedWorkTypeID", "soapParentPropertyId"],
|
|
16355
|
+
"contract_exclusion_sets": ["id", "description", "isActive", "name"],
|
|
16356
|
+
"contract_milestones": ["id", "amount", "billingCodeID", "contractID", "createDate", "creatorResourceID", "dateDue", "description", "internalCurrencyAmount", "isInitialPayment", "organizationalLevelAssociationID", "status", "title", "soapParentPropertyId"],
|
|
16357
|
+
"contract_notes": ["id", "contractID", "createDateTime", "creatorResourceID", "description", "impersonatorCreatorResourceID", "impersonatorUpdaterResourceID", "lastActivityDate", "title", "soapParentPropertyId"],
|
|
16358
|
+
"contract_rates": ["id", "contractHourlyRate", "contractID", "internalCurrencyContractHourlyRate", "roleID", "soapParentPropertyId"],
|
|
16359
|
+
"contract_retainers": ["id", "amount", "amountApproved", "contractID", "datePurchased", "endDate", "internalCurrencyAmount", "internalCurrencyAmountApproved", "invoiceNumber", "isPaid", "paymentID", "paymentNumber", "startDate", "status", "soapParentPropertyId"],
|
|
16360
|
+
"contract_role_costs": ["id", "contractID", "rate", "resourceID", "roleID", "soapParentPropertyId"],
|
|
16361
|
+
"contract_service_bundle_units": ["id", "approveAndPostDate", "contractID", "contractServiceBundleID", "cost", "endDate", "internalCurrencyPrice", "organizationalLevelAssociationID", "price", "serviceBundleID", "startDate", "units", "soapParentPropertyId"],
|
|
16362
|
+
"contract_service_bundles": ["id", "adjustedPrice", "contractID", "internalCurrencyAdjustedPrice", "internalCurrencyUnitPrice", "internalDescription", "invoiceDescription", "quoteItemID", "serviceBundleID", "unitPrice", "soapParentPropertyId"],
|
|
16363
|
+
"contract_service_units": ["id", "approveAndPostDate", "contractID", "contractServiceID", "cost", "endDate", "internalCurrencyPrice", "organizationalLevelAssociationID", "price", "serviceID", "startDate", "units", "vendorCompanyID", "soapParentPropertyId"],
|
|
16364
|
+
"contract_services": ["id", "contractID", "internalCurrencyAdjustedPrice", "internalCurrencyUnitPrice", "internalDescription", "invoiceDescription", "quoteItemID", "serviceID", "unitCost", "unitPrice", "soapParentPropertyId"],
|
|
16365
|
+
"contract_ticket_purchases": ["id", "contractID", "datePurchased", "endDate", "invoiceNumber", "isPaid", "paymentNumber", "paymentType", "perTicketRate", "startDate", "status", "ticketsPurchased", "ticketsUsed", "soapParentPropertyId"],
|
|
16366
|
+
"contracts": ["id", "billingPreference", "billToCompanyContactID", "billToCompanyID", "companyID", "contactID", "contactName", "contractCategory", "contractExclusionSetID", "contractName", "contractNumber", "contractPeriodType", "contractType", "description", "endDate", "estimatedCost", "estimatedHours", "estimatedRevenue", "exclusionContractID", "internalCurrencyOverageBillingRate", "internalCurrencySetupFee", "isCompliant", "isDefaultContract", "lastModifiedDateTime", "opportunityID", "organizationalLevelAssociationID", "overageBillingRate", "purchaseOrderNumber", "renewedContractID", "serviceLevelAgreementID", "setupFee", "setupFeeBillingCodeID", "startDate", "status", "timeReportingRequiresStartAndStopTimes", "userDefinedFields"],
|
|
16367
|
+
"countries": ["id", "addressFormatID", "countryCode", "displayName", "invoiceTemplateID", "isActive", "isDefaultCountry", "name", "purchaseOrderTemplateID", "quoteTemplateID"],
|
|
16368
|
+
"departments": ["id", "description", "name", "number", "primaryLocationID"],
|
|
16369
|
+
"domain_registrars": ["id", "name", "url"],
|
|
16370
|
+
"expense_item_attachments": ["id", "attachDate", "attachedByContactID", "attachedByResourceID", "attachmentType", "contentType", "creatorType", "expenseItemID", "expenseReportID", "fileSize", "fullPath", "impersonatorCreatorResourceID", "opportunityID", "parentID", "publish", "title", "data", "parentType", "soapParentPropertyId", "isTaskAttachment"],
|
|
16371
|
+
"expense_items": ["id", "companyID", "description", "destination", "entertainmentLocation", "expenseCategory", "expenseCurrencyExpenseAmount", "expenseCurrencyID", "expenseDate", "expenseReportID", "glCode", "haveReceipt", "internalCurrencyExpenseAmount", "internalCurrencyReimbursementAmount", "isBillableToCompany", "isReimbursable", "isRejected", "miles", "odometerEnd", "odometerStart", "origin", "paymentType", "projectID", "purchaseOrderNumber", "reimbursementCurrencyReimbursementAmount", "taskID", "ticketID", "workType", "soapParentPropertyId"],
|
|
16372
|
+
"expense_reports": ["id", "amountDue", "approvedDate", "approverID", "departmentNumber", "internalCurrencyCashAdvanceAmount", "internalCurrencyExpenseTotal", "name", "organizationalLevelAssociationID", "quickBooksReferenceNumber", "reimbursementCurrencyAmountDue", "reimbursementCurrencyCashAdvanceAmount", "reimbursementCurrencyID", "rejectionReason", "status", "submit", "submitDate", "submitterID", "weekEnding"],
|
|
16373
|
+
"holiday_sets": ["id", "holidaySetDescription", "holidaySetName"],
|
|
16374
|
+
"holidays": ["id", "holidayDate", "holidayName", "holidaySetID", "soapParentPropertyId"],
|
|
16375
|
+
"inventory_products": ["id", "availableUnits", "backOrderQuantity", "bin", "createDateTime", "createdByResourceID", "inventoryLocationID", "onHandUnits", "pickedUnits", "productID", "quantityMaximum", "quantityMinimum", "referenceNumber", "reservedUnits", "unitsOnOrder"],
|
|
16376
|
+
"invoices": ["id", "batchID", "comments", "companyID", "createDateTime", "creatorResourceID", "dueDate", "fromDate", "invoiceDateTime", "invoiceEditorTemplateID", "invoiceNumber", "invoiceTotal", "isVoided", "orderNumber", "paidDate", "paymentTerm", "taxGroup", "taxRegionName", "toDate", "totalTaxValue", "voidedByResourceID", "voidedDate", "webServiceDate"],
|
|
16377
|
+
"notification_history": ["id", "companyID", "entityNumber", "entityTitle", "initiatingContactID", "initiatingResourceID", "isActive", "isDeleted", "isTemplateJob", "notificationHistoryTypeID", "notificationSentTime", "opportunityID", "projectID", "quoteID", "recipientDisplayName", "recipientEmailAddress", "taskID", "templateName", "ticketID", "timeEntryID"],
|
|
16378
|
+
"opportunities": ["id", "advancedField1", "advancedField2", "advancedField3", "advancedField4", "advancedField5", "amount", "assessmentScore", "barriers", "closedDate", "companyID", "contactID", "cost", "createDate", "creatorResourceID", "description", "helpNeeded", "impersonatorCreatorResourceID", "lastActivity", "leadSource", "lossReason", "lossReasonDetail", "lostDate", "market", "monthlyCost", "monthlyRevenue", "nextStep", "onetimeCost", "onetimeRevenue", "opportunityCategoryID", "organizationalLevelAssociationID", "ownerResourceID", "primaryCompetitor", "probability", "productID", "projectedCloseDate", "promisedFulfillmentDate", "promotionName", "quarterlyCost", "quarterlyRevenue", "rating", "relationshipAssessmentScore", "revenueSpread", "revenueSpreadUnit", "salesOrderID", "salesProcessPercentComplete", "semiannualCost", "semiannualRevenue", "stage", "startDate", "status", "technicalAssessmentScore", "throughDate", "title", "totalAmountMonths", "useQuoteTotals", "winReason", "winReasonDetail", "yearlyCost", "yearlyRevenue", "userDefinedFields"],
|
|
16379
|
+
"opportunity_attachments": ["id", "attachDate", "attachedByContactID", "attachedByResourceID", "attachmentType", "contentType", "creatorType", "fileSize", "fullPath", "impersonatorCreatorResourceID", "opportunityID", "parentAttachmentID", "parentID", "publish", "title", "data", "parentType", "soapParentPropertyId", "isTaskAttachment"],
|
|
16380
|
+
"opportunity_categories": ["id", "displayColorRGB", "isActive", "isGlobalDefault", "name", "nickname"],
|
|
16381
|
+
"phases": ["id", "createDate", "creatorResourceID", "description", "dueDate", "estimatedHours", "externalID", "isScheduled", "lastActivityDateTime", "parentPhaseID", "phaseNumber", "projectID", "startDate", "title", "soapParentPropertyId"],
|
|
16382
|
+
"product_vendors": ["id", "isActive", "isDefault", "productID", "vendorCost", "vendorID", "vendorPartNumber", "soapParentPropertyId"],
|
|
16383
|
+
"products": ["id", "billingType", "chargeBillingCodeID", "createdByResourceID", "createdTime", "defaultVendorID", "description", "doesNotRequireProcurement", "externalProductID", "impersonatorCreatorResourceID", "internalProductID", "isActive", "isEligibleForRma", "isSerialized", "link", "manufacturerName", "manufacturerProductName", "markupRate", "msrp", "name", "periodType", "priceCostMethod", "productBillingCodeID", "productCategory", "sku", "unitCost", "unitPrice", "vendorProductNumber", "defaultInstalledProductCategoryID", "userDefinedFields"],
|
|
16384
|
+
"project_charges": ["id", "billableAmount", "billingCodeID", "chargeType", "contractServiceBundleID", "contractServiceID", "createDate", "creatorResourceID", "datePurchased", "description", "estimatedCost", "extendedCost", "internalCurrencyBillableAmount", "internalCurrencyUnitPrice", "internalPurchaseOrderNumber", "isBillableToCompany", "isBilled", "name", "notes", "organizationalLevelAssociationID", "productID", "projectID", "purchaseOrderNumber", "status", "statusLastModifiedBy", "statusLastModifiedDate", "unitCost", "unitPrice", "unitQuantity", "soapParentPropertyId"],
|
|
16385
|
+
"project_notes": ["id", "createDateTime", "createdByContactID", "creatorResourceID", "description", "impersonatorCreatorResourceID", "impersonatorUpdaterResourceID", "isAnnouncement", "lastActivityDate", "noteType", "projectID", "publish", "title", "soapParentPropertyId"],
|
|
16386
|
+
"projects": ["id", "actualBilledHours", "actualHours", "changeOrdersBudget", "changeOrdersRevenue", "companyID", "companyOwnerResourceID", "completedDateTime", "completedPercentage", "contractID", "createDateTime", "creatorResourceID", "department", "description", "duration", "endDateTime", "estimatedSalesCost", "estimatedTime", "extProjectNumber", "extProjectType", "impersonatorCreatorResourceID", "laborEstimatedCosts", "laborEstimatedMarginPercentage", "laborEstimatedRevenue", "lastActivityDateTime", "lastActivityPersonType", "lastActivityResourceID", "opportunityID", "organizationalLevelAssociationID", "originalEstimatedRevenue", "projectCostEstimatedMarginPercentage", "projectCostsBudget", "projectCostsRevenue", "projectLeadResourceID", "projectName", "projectNumber", "projectType", "purchaseOrderNumber", "sgda", "startDateTime", "status", "statusDateTime", "statusDetail", "userDefinedFields"],
|
|
16387
|
+
"purchase_approvals": ["id", "costType", "isApproved", "rejectNote"],
|
|
16388
|
+
"purchase_order_item_receiving": ["id", "purchaseOrderItemID", "quantityBackOrdered", "quantityNowReceiving", "quantityPreviouslyReceived", "receiveDate", "receivedByResourceID", "serialNumber", "vendorInvoiceNumber", "soapParentPropertyId"],
|
|
16389
|
+
"purchase_order_items": ["id", "chargeID", "contractID", "estimatedArrivalDate", "internalCurrencyUnitCost", "inventoryLocationID", "memo", "orderID", "productID", "projectID", "quantity", "salesOrderID", "ticketID", "unitCost", "soapParentPropertyId"],
|
|
16390
|
+
"purchase_orders": ["id", "cancelDateTime", "createDateTime", "creatorResourceID", "externalPONumber", "fax", "freight", "generalMemo", "impersonatorCreatorResourceID", "internalCurrencyFreight", "latestEstimatedArrivalDate", "paymentTerm", "phone", "purchaseForCompanyID", "purchaseOrderNumber", "purchaseOrderTemplateID", "shippingDate", "shippingType", "shipToAddress1", "shipToAddress2", "shipToCity", "shipToName", "shipToPostalCode", "shipToState", "showEachTaxInGroup", "showTaxCategory", "status", "submitDateTime", "taxRegionID", "useItemDescriptionsFrom", "vendorID", "vendorInvoiceNumber", "additionalVendorInvoiceNumbers"],
|
|
16391
|
+
"quote_items": ["id", "averageCost", "chargeID", "description", "expenseID", "highestCost", "internalCurrencyLineDiscount", "internalCurrencyUnitDiscount", "internalCurrencyUnitPrice", "isOptional", "isTaxable", "laborID", "lineDiscount", "markupRate", "name", "percentageDiscount", "periodType", "productID", "quantity", "quoteID", "quoteItemType", "serviceBundleID", "serviceID", "shippingID", "sortOrderID", "taxCategoryID", "totalEffectiveTax", "unitCost", "unitDiscount", "unitPrice", "soapParentPropertyId"],
|
|
16392
|
+
"quote_locations": ["id", "address1", "address2", "city", "postalCode", "state"],
|
|
16393
|
+
"quote_templates": ["id", "calculateTaxSeparately", "createDate", "createdBy", "currencyNegativeFormat", "currencyPositiveFormat", "dateFormat", "description", "displayTaxCategorySuperscripts", "isActive", "lastActivityBy", "lastActivityDate", "name", "numberFormat", "pageLayout", "pageNumberFormat", "showEachTaxInGroup", "showGridHeader", "showTaxCategory", "showVerticalGridLines"],
|
|
16394
|
+
"quotes": ["id", "approvalStatus", "approvalStatusChangedByResourceID", "approvalStatusChangedDate", "billToLocationID", "calculateTaxSeparately", "comment", "companyID", "contactID", "createDate", "creatorResourceID", "description", "effectiveDate", "expirationDate", "extApprovalContactResponse", "extApprovalResponseDate", "extApprovalResponseSignature", "externalQuoteNumber", "groupByID", "impersonatorCreatorResourceID", "isActive", "lastActivityDate", "lastModifiedBy", "lastPublishedByResourceID", "lastPublishedDateTime", "name", "opportunityID", "paymentTerm", "paymentType", "primaryQuote", "proposalProjectID", "purchaseOrderNumber", "quoteNumber", "quoteTemplateID", "shippingType", "shipToLocationID", "showEachTaxInGroup", "showTaxCategory", "soldToLocationID", "taxRegionID"],
|
|
16395
|
+
"resource_role_queues": ["id", "queueID", "resourceID", "soapParentPropertyId"],
|
|
16396
|
+
"resource_roles": ["id", "departmentID", "isActive", "queueID", "resourceID", "roleID", "soapParentPropertyId"],
|
|
16397
|
+
"resource_skills": ["id", "resourceID", "skillDescription", "skillID", "skillLevel", "soapParentPropertyId"],
|
|
16398
|
+
"resource_time_off_approvers": ["id", "resourceID", "approverResourceID", "approvalLevel", "soapParentPropertyId"],
|
|
16399
|
+
"resource_time_off_balances": ["id", "resourceID", "floatingHolidayAnnualAllowance", "floatingHolidayBalance", "floatingHolidayPlanned", "floatingHolidayUsed", "floatingHolidayWaitingApproval", "personalTimeAnnualAllowance", "personalTimeBalance", "personalTimePlanned", "personalTimeUsed", "personalTimeWaitingApproval", "sickTimeAnnualAllowance", "sickTimeBalance", "sickTimePlanned", "sickTimeUsed", "sickTimeWaitingApproval", "vacationTimeAnnualAllowance", "vacationTimeBalance", "vacationTimePlanned", "vacationTimeUsed", "vacationTimeWaitingApproval", "year", "soapParentPropertyId"],
|
|
16400
|
+
"resources": ["id", "accountingReferenceID", "dateFormat", "defaultServiceDeskRoleID", "email", "email2", "email3", "emailTypeCode", "emailTypeCode2", "emailTypeCode3", "firstName", "gender", "greeting", "hireDate", "homePhone", "initials", "internalCost", "isActive", "lastName", "licenseType", "locationID", "middleName", "mobilePhone", "numberFormat", "officeExtension", "officePhone", "payrollIdentifier", "payrollType", "resourceType", "suffix", "surveyResourceRating", "timeFormat", "title", "travelAvailabilityPct", "userName", "userType"],
|
|
16401
|
+
"roles": ["id", "description", "hourlyFactor", "hourlyRate", "isActive", "isExcludedFromNewContracts", "isSystemRole", "name", "quoteItemDefaultTaxCategoryId", "roleType"],
|
|
16402
|
+
"service_call_task_resources": ["id", "resourceID", "serviceCallTaskID", "soapParentPropertyId"],
|
|
16403
|
+
"service_call_tasks": ["id", "serviceCallID", "taskID", "soapParentPropertyId"],
|
|
16404
|
+
"service_call_ticket_resources": ["id", "resourceID", "serviceCallTicketID", "soapParentPropertyId"],
|
|
16405
|
+
"service_call_tickets": ["id", "serviceCallID", "ticketID", "soapParentPropertyId"],
|
|
16406
|
+
"service_calls": ["id", "cancelationNoticeHours", "canceledByResourceID", "canceledDateTime", "companyID", "companyLocationID", "createDateTime", "creatorResourceID", "description", "duration", "endDateTime", "impersonatorCreatorResourceID", "isComplete", "lastModifiedDateTime", "startDateTime", "status"],
|
|
16407
|
+
"service_level_agreement_results": ["id", "firstResponseElapsedHours", "firstResponseInitiatingResourceID", "firstResponseResourceID", "isFirstResponseMet", "isResolutionMet", "isResolutionPlanMet", "resolutionElapsedHours", "resolutionPlanElapsedHours", "resolutionPlanResourceID", "resolutionResourceID", "serviceLevelAgreementName", "ticketID", "soapParentPropertyId"],
|
|
16408
|
+
"services": ["id", "billingCodeID", "createDate", "creatorResourceID", "description", "invoiceDescription", "isActive", "lastModifiedDate", "markupRate", "name", "periodType", "serviceLevelAgreementID", "unitCost", "unitPrice", "updateResourceID", "vendorCompanyID", "manufacturerServiceProvider", "manufacturerServiceProviderProductNumber", "catalogNumberPartNumber", "sku", "internalID", "externalID", "url", "userDefinedFields"],
|
|
16409
|
+
"skills": ["id", "categoryID", "description", "isActive", "name"],
|
|
16410
|
+
"subscription_periods": ["id", "periodCost", "periodDate", "periodPrice", "postedDate", "purchaseOrderNumber", "subscriptionID", "soapParentPropertyId"],
|
|
16411
|
+
"subscriptions": ["id", "configurationItemID", "description", "effectiveDate", "expirationDate", "impersonatorCreatorResourceID", "materialCodeID", "organizationalLevelAssociationID", "periodCost", "periodPrice", "periodType", "purchaseOrderNumber", "status", "subscriptionName", "totalCost", "totalPrice", "vendorID", "userDefinedFields"],
|
|
16412
|
+
"survey_results": ["id", "companyID", "companyRating", "completeDate", "contactID", "contactRating", "resourceRating", "sendDate", "surveyID", "surveyRating", "ticketID"],
|
|
16413
|
+
"surveys": ["id", "description", "displayName", "name"],
|
|
16414
|
+
"tag_aliases": ["id", "alias", "tagID", "soapParentPropertyId"],
|
|
16415
|
+
"tag_groups": ["id", "displayColor", "isActive", "isSystem", "label"],
|
|
16416
|
+
"tags": ["id", "createDateTime", "isActive", "isExcludedFromAutomaticTagging", "isSystem", "label", "lastModifiedDateTime", "tagGroupID"],
|
|
16417
|
+
"task_secondary_resources": ["id", "resourceID", "roleID", "taskID", "soapParentPropertyId"],
|
|
16418
|
+
"tasks": ["id", "assignedResourceID", "assignedResourceRoleID", "billingCodeID", "canClientPortalUserCompleteTask", "companyLocationID", "completedByResourceID", "completedByType", "completedDateTime", "createDateTime", "creatorResourceID", "creatorType", "departmentID", "description", "endDateTime", "estimatedHours", "externalID", "hoursToBeScheduled", "isTaskBillable", "isVisibleInClientPortal", "lastActivityDateTime", "lastActivityPersonType", "lastActivityResourceID", "phaseID", "priority", "priorityLabel", "projectID", "purchaseOrderNumber", "remainingHours", "startDateTime", "status", "taskCategoryID", "taskNumber", "taskType", "title", "soapParentPropertyId", "userDefinedFields"],
|
|
16419
|
+
"ticket_additional_configuration_items": ["id", "configurationItemID", "ticketID", "soapParentPropertyId"],
|
|
16420
|
+
"ticket_additional_contacts": ["id", "contactID", "ticketID", "soapParentPropertyId"],
|
|
16421
|
+
"ticket_attachments": ["id", "attachDate", "attachedByContactID", "attachedByResourceID", "attachmentType", "contentType", "creatorType", "fileSize", "fullPath", "impersonatorCreatorResourceID", "opportunityID", "parentAttachmentID", "parentID", "publish", "ticketID", "ticketNoteID", "timeEntryID", "title", "data", "parentType", "soapParentPropertyId", "isTaskAttachment"],
|
|
16422
|
+
"ticket_categories": ["id", "displayColorRGB", "isActive", "isApiOnly", "isGlobalDefault", "name", "nickname"],
|
|
16423
|
+
"ticket_category_field_defaults": ["id", "description", "estimatedHours", "issueTypeID", "organizationalLevelAssociationID", "priority", "purchaseOrderNumber", "queueID", "resolution", "serviceLevelAgreementID", "sourceID", "status", "subIssueTypeID", "ticketCategoryID", "ticketTypeID", "title", "workTypeID", "soapParentPropertyId"],
|
|
16424
|
+
"ticket_change_request_approvals": ["id", "approveRejectDateTime", "approveRejectNote", "contactID", "isApproved", "resourceID", "ticketID", "soapParentPropertyId"],
|
|
16425
|
+
"ticket_charges": ["id", "billableAmount", "billingCodeID", "chargeType", "contractServiceBundleID", "contractServiceID", "createDate", "creatorResourceID", "datePurchased", "description", "extendedCost", "internalCurrencyBillableAmount", "internalCurrencyUnitPrice", "internalPurchaseOrderNumber", "isBillableToCompany", "isBilled", "name", "notes", "organizationalLevelAssociationID", "productID", "purchaseOrderNumber", "status", "statusLastModifiedBy", "statusLastModifiedDate", "ticketID", "unitCost", "unitPrice", "unitQuantity", "soapParentPropertyId"],
|
|
16426
|
+
"ticket_checklist_items": ["id", "completedByResourceID", "completedDateTime", "isCompleted", "isImportant", "itemName", "knowledgebaseArticleID", "position", "ticketID", "soapParentPropertyId"],
|
|
16427
|
+
"ticket_history": ["id", "action", "date", "detail", "resourceID", "ticketID", "soapParentPropertyId"],
|
|
16428
|
+
"ticket_note_attachments": ["id", "attachDate", "attachedByContactID", "attachedByResourceID", "attachmentType", "contentType", "creatorType", "fileSize", "fullPath", "impersonatorCreatorResourceID", "opportunityID", "parentID", "publish", "ticketID", "ticketNoteID", "title", "data", "parentType", "soapParentPropertyId", "isTaskAttachment"],
|
|
16429
|
+
"ticket_note_webhooks": ["id", "deactivationUrl", "isActive", "isReady", "isSubscribedToCreateEvents", "isSubscribedToDeleteEvents", "isSubscribedToUpdateEvents", "name", "notificationEmailAddress", "ownerResourceID", "secretKey", "sendThresholdExceededNotification", "webhookGUID", "webhookUrl"],
|
|
16430
|
+
"ticket_notes": ["id", "createDateTime", "createdByContactID", "creatorResourceID", "description", "impersonatorCreatorResourceID", "impersonatorUpdaterResourceID", "lastActivityDate", "noteType", "publish", "ticketID", "title", "soapParentPropertyId"],
|
|
16431
|
+
"ticket_secondary_resources": ["id", "resourceID", "roleID", "ticketID", "soapParentPropertyId"],
|
|
16432
|
+
"ticket_webhooks": ["id", "deactivationUrl", "isActive", "isReady", "isSubscribedToCreateEvents", "isSubscribedToDeleteEvents", "isSubscribedToUpdateEvents", "name", "notificationEmailAddress", "ownerResourceID", "secretKey", "sendThresholdExceededNotification", "webhookGUID", "webhookUrl"],
|
|
16433
|
+
"tickets": ["id", "apiVendorID", "assignedResourceID", "assignedResourceRoleID", "billingCodeID", "changeApprovalBoard", "changeApprovalStatus", "changeApprovalType", "changeInfoField1", "changeInfoField2", "changeInfoField3", "changeInfoField4", "changeInfoField5", "companyID", "companyLocationID", "completedByResourceID", "completedDate", "configurationItemID", "contactID", "contractID", "contractServiceBundleID", "contractServiceID", "createDate", "createdByContactID", "creatorResourceID", "creatorType", "currentServiceThermometerRating", "description", "dueDateTime", "estimatedHours", "externalID", "firstResponseAssignedResourceID", "firstResponseDateTime", "firstResponseDueDateTime", "firstResponseInitiatingResourceID", "hoursToBeScheduled", "impersonatorCreatorResourceID", "isAssignedToComanaged", "issueType", "isVisibleToComanaged", "lastActivityDate", "lastActivityPersonType", "lastActivityResourceID", "lastCustomerNotificationDateTime", "lastCustomerVisibleActivityDateTime", "lastTrackedModificationDateTime", "monitorID", "monitorTypeID", "opportunityID", "organizationalLevelAssociationID", "previousServiceThermometerRating", "priority", "problemTicketId", "projectID", "purchaseOrderNumber", "queueID", "resolution", "resolutionPlanDateTime", "resolutionPlanDueDateTime", "resolvedDateTime", "resolvedDueDateTime", "rmaStatus", "rmaType", "rmmAlertID", "serviceLevelAgreementHasBeenMet", "serviceLevelAgreementID", "serviceLevelAgreementPausedNextEventHours", "serviceThermometerTemperature", "source", "status", "subIssueType", "ticketCategory", "ticketNumber", "ticketType", "title", "userDefinedFields"],
|
|
16434
|
+
"time_entries": ["id", "billingApprovalDateTime", "billingApprovalLevelMostRecent", "billingApprovalResourceID", "billingCodeID", "contractID", "contractServiceBundleID", "contractServiceID", "createDateTime", "creatorUserID", "dateWorked", "endDateTime", "hoursToBill", "hoursWorked", "impersonatorCreatorResourceID", "impersonatorUpdaterResourceID", "internalBillingCodeID", "internalNotes", "isInternalNotesVisibleToComanaged", "isNonBillable", "lastModifiedDateTime", "lastModifiedUserID", "offsetHours", "resourceID", "roleID", "showOnInvoice", "startDateTime", "summaryNotes", "taskID", "ticketID", "timeEntryType"],
|
|
16435
|
+
"time_entry_attachments": ["id", "attachDate", "attachedByContactID", "attachedByResourceID", "attachmentType", "contentType", "creatorType", "fileSize", "fullPath", "impersonatorCreatorResourceID", "opportunityID", "parentID", "publish", "taskID", "ticketID", "timeEntryID", "title", "data", "parentType", "soapParentPropertyId", "isTaskAttachment"],
|
|
16436
|
+
"time_off_requests": ["id", "approvedDateTime", "approveRejectResourceID", "createdByResourceID", "createDateTime", "endTime", "hours", "impersonatorApproveRejectResourceID", "lastModifiedByResourceID", "lastModifiedDateTime", "lastApprovedLevel", "reason", "rejectReason", "requestDate", "resourceID", "startTime", "status", "timeOffRequestType", "soapParentPropertyId"]
|
|
16437
|
+
};
|
|
16438
|
+
var MODEL_DATE_FIELDS = {
|
|
16439
|
+
"appointments": ["createDateTime", "endDateTime", "startDateTime", "updateDateTime"],
|
|
16440
|
+
"billing_items": ["itemDate", "postedDate", "postedOnTime", "webServiceDate"],
|
|
16441
|
+
"companies": ["createDate", "lastActivityDate", "lastTrackedModifiedDateTime"],
|
|
16442
|
+
"company_notes": ["completedDateTime", "createDateTime", "endDateTime", "lastModifiedDate", "startDateTime"],
|
|
16443
|
+
"configuration_item_billing_product_associations": ["effectiveDate", "expirationDate"],
|
|
16444
|
+
"configuration_item_dns_records": ["createDateTime"],
|
|
16445
|
+
"configuration_item_notes": ["createDateTime", "lastActivityDate"],
|
|
16446
|
+
"configuration_items": ["createDate", "dattoLastCheckInDateTime", "domainRegistrationDateTime", "domainLastUpdatedDateTime", "domainExpirationDateTime", "installDate", "lastModifiedTime", "sslValidFromDateTime", "sslValidUntilDateTime", "warrantyExpirationDate"],
|
|
16447
|
+
"contacts": ["bulkEmailOptOutTime", "createDate", "lastActivityDate", "lastModifiedDate", "solicitationOptOutTime"],
|
|
16448
|
+
"contract_billing_rules": ["endDate", "startDate"],
|
|
16449
|
+
"contract_blocks": ["datePurchased", "endDate", "startDate"],
|
|
16450
|
+
"contract_charges": ["createDate", "datePurchased", "statusLastModifiedDate"],
|
|
16451
|
+
"contract_milestones": ["createDate", "dateDue"],
|
|
16452
|
+
"contract_notes": ["createDateTime", "lastActivityDate"],
|
|
16453
|
+
"contract_retainers": ["datePurchased", "endDate", "startDate"],
|
|
16454
|
+
"contract_service_bundle_units": ["approveAndPostDate", "endDate", "startDate"],
|
|
16455
|
+
"contract_service_units": ["approveAndPostDate", "endDate", "startDate"],
|
|
16456
|
+
"contract_ticket_purchases": ["datePurchased", "endDate", "startDate"],
|
|
16457
|
+
"contracts": ["endDate", "lastModifiedDateTime", "startDate"],
|
|
16458
|
+
"expense_item_attachments": ["attachDate"],
|
|
16459
|
+
"expense_items": ["expenseDate"],
|
|
16460
|
+
"expense_reports": ["approvedDate", "submitDate", "weekEnding"],
|
|
16461
|
+
"holidays": ["holidayDate"],
|
|
16462
|
+
"inventory_products": ["createDateTime"],
|
|
16463
|
+
"invoices": ["createDateTime", "dueDate", "fromDate", "invoiceDateTime", "paidDate", "toDate", "voidedDate", "webServiceDate"],
|
|
16464
|
+
"notification_history": ["notificationSentTime"],
|
|
16465
|
+
"opportunities": ["closedDate", "createDate", "lastActivity", "lostDate", "projectedCloseDate", "promisedFulfillmentDate", "startDate", "throughDate"],
|
|
16466
|
+
"opportunity_attachments": ["attachDate"],
|
|
16467
|
+
"phases": ["createDate", "dueDate", "lastActivityDateTime", "startDate"],
|
|
16468
|
+
"products": ["createdTime"],
|
|
16469
|
+
"project_charges": ["createDate", "datePurchased", "statusLastModifiedDate"],
|
|
16470
|
+
"project_notes": ["createDateTime", "lastActivityDate"],
|
|
16471
|
+
"projects": ["completedDateTime", "createDateTime", "endDateTime", "lastActivityDateTime", "startDateTime", "statusDateTime"],
|
|
16472
|
+
"purchase_order_item_receiving": ["receiveDate"],
|
|
16473
|
+
"purchase_order_items": ["estimatedArrivalDate"],
|
|
16474
|
+
"purchase_orders": ["cancelDateTime", "createDateTime", "latestEstimatedArrivalDate", "shippingDate", "submitDateTime"],
|
|
16475
|
+
"quote_templates": ["createDate", "lastActivityDate"],
|
|
16476
|
+
"quotes": ["approvalStatusChangedDate", "createDate", "effectiveDate", "expirationDate", "extApprovalResponseDate", "lastActivityDate", "lastPublishedDateTime"],
|
|
16477
|
+
"resources": ["hireDate"],
|
|
16478
|
+
"service_calls": ["canceledDateTime", "createDateTime", "endDateTime", "lastModifiedDateTime", "startDateTime"],
|
|
16479
|
+
"services": ["createDate", "lastModifiedDate"],
|
|
16480
|
+
"subscription_periods": ["periodDate", "postedDate"],
|
|
16481
|
+
"subscriptions": ["effectiveDate", "expirationDate"],
|
|
16482
|
+
"survey_results": ["completeDate", "sendDate"],
|
|
16483
|
+
"tags": ["createDateTime", "lastModifiedDateTime"],
|
|
16484
|
+
"tasks": ["completedDateTime", "createDateTime", "endDateTime", "lastActivityDateTime", "startDateTime"],
|
|
16485
|
+
"ticket_attachments": ["attachDate"],
|
|
16486
|
+
"ticket_change_request_approvals": ["approveRejectDateTime"],
|
|
16487
|
+
"ticket_charges": ["createDate", "datePurchased", "statusLastModifiedDate"],
|
|
16488
|
+
"ticket_checklist_items": ["completedDateTime"],
|
|
16489
|
+
"ticket_history": ["date"],
|
|
16490
|
+
"ticket_note_attachments": ["attachDate"],
|
|
16491
|
+
"ticket_notes": ["createDateTime", "lastActivityDate"],
|
|
16492
|
+
"tickets": ["completedDate", "createDate", "dueDateTime", "firstResponseDateTime", "firstResponseDueDateTime", "lastActivityDate", "lastCustomerNotificationDateTime", "lastCustomerVisibleActivityDateTime", "lastTrackedModificationDateTime", "resolutionPlanDateTime", "resolutionPlanDueDateTime", "resolvedDateTime", "resolvedDueDateTime"],
|
|
16493
|
+
"time_entries": ["billingApprovalDateTime", "createDateTime", "dateWorked", "endDateTime", "lastModifiedDateTime", "startDateTime"],
|
|
16494
|
+
"time_entry_attachments": ["attachDate"],
|
|
16495
|
+
"time_off_requests": ["approvedDateTime", "createDateTime", "endTime", "lastModifiedDateTime", "requestDate", "startTime"]
|
|
16496
|
+
};
|
|
16497
|
+
|
|
16498
|
+
// src/operations/fetchMany.ts
|
|
16499
|
+
var FETCH_MANY_MAX_ITEMS = 20;
|
|
16500
|
+
function validateFetchManyItems(items, cap, opName = "fetchMany", capRef = `FETCH_MANY_MAX_ITEMS = ${FETCH_MANY_MAX_ITEMS}`, validation) {
|
|
16501
|
+
if (!Array.isArray(items)) {
|
|
16502
|
+
throw new AutotaskConfigError(
|
|
16503
|
+
`${opName}: items must be the items ARRAY \u2014 one positional arg, [{ resource: string, id: number, fields?: string[] }] (got ${Array.isArray(items) ? "an array" : typeof items})`,
|
|
16504
|
+
{
|
|
16505
|
+
suggestedAction: 'Pass args = [[{ resource: "tickets", id: 123 }, { resource: "projects", id: 456 }]] \u2014 the items array is the single positional argument.'
|
|
16506
|
+
}
|
|
16507
|
+
);
|
|
16508
|
+
}
|
|
16509
|
+
if (items.length === 0) {
|
|
16510
|
+
throw new AutotaskConfigError(`${opName}: items must not be empty (a zero-item batch is a shape error, not a no-op)`, {
|
|
16511
|
+
suggestedAction: "Pass at least one { resource, id } item \u2014 or use the resource's query op for a filtered read."
|
|
16512
|
+
});
|
|
16513
|
+
}
|
|
16514
|
+
if (items.length > cap) {
|
|
16515
|
+
throw new AutotaskConfigError(
|
|
16516
|
+
`${opName}: ${items.length} items over the ${cap}-item cap (${capRef}) \u2014 zero items were fetched (pre-request)`,
|
|
16517
|
+
{
|
|
16518
|
+
suggestedAction: `Split the batch into groups of <= ${cap} items \u2014 or, for more than ${cap} records / a filtered set, use the resource's bounded query op (<resource>.query).`
|
|
16519
|
+
}
|
|
16520
|
+
);
|
|
16521
|
+
}
|
|
16522
|
+
const problems = [];
|
|
16523
|
+
for (let i = 0; i < items.length; i += 1) {
|
|
16524
|
+
const it = items[i];
|
|
16525
|
+
const at = `items[${i}]`;
|
|
16526
|
+
if (typeof it !== "object" || it === null || Array.isArray(it)) {
|
|
16527
|
+
problems.push(`${at}: must be an object { resource: string, id: number, fields?: string[] }`);
|
|
16528
|
+
continue;
|
|
16529
|
+
}
|
|
16530
|
+
const item = it;
|
|
16531
|
+
if (typeof item.resource !== "string" || item.resource.trim() === "") {
|
|
16532
|
+
problems.push(`${at}.resource: required \u2014 the plan resource key (string, e.g. 'tickets'; see autotask_catalog)`);
|
|
16533
|
+
continue;
|
|
16534
|
+
}
|
|
16535
|
+
const resourceKey = item.resource;
|
|
16536
|
+
const fields = MODEL_FIELD_SETS[resourceKey];
|
|
16537
|
+
if (fields === void 0) {
|
|
16538
|
+
problems.push(
|
|
16539
|
+
`${at}.resource: "${resourceKey}" is not a single-record GETtable resource (${Object.keys(MODEL_FIELD_SETS).length} known) \u2014 see autotask_catalog for the exact plan keys`
|
|
16540
|
+
);
|
|
16541
|
+
continue;
|
|
16542
|
+
}
|
|
16543
|
+
const rel = RELATIONSHIP_MAP[resourceKey];
|
|
16544
|
+
if (rel !== void 0 && rel.parentScoped) {
|
|
16545
|
+
problems.push(
|
|
16546
|
+
`${at}.resource: "${resourceKey}" is a parent-scoped child \u2014 its get needs (parentId, id); fetchMany takes single numeric ids of TOP-LEVEL records (scoped reads: client.${camelKey(resourceKey)}.get(parentId, id))`
|
|
16547
|
+
);
|
|
16548
|
+
continue;
|
|
16549
|
+
}
|
|
16550
|
+
try {
|
|
16551
|
+
parseIdentifier(item.id, `${at}.id`);
|
|
16552
|
+
} catch {
|
|
16553
|
+
if (typeof item.id === "string") {
|
|
16554
|
+
problems.push(
|
|
16555
|
+
`${at}.id: "${item.id}" is not a vendor numeric id \u2014 non-numeric string identifiers are autotask_resolve_any territory (resolveAny / the resource's findBy* helpers)`
|
|
16556
|
+
);
|
|
16557
|
+
} else if (typeof item.id === "number") {
|
|
16558
|
+
problems.push(
|
|
16559
|
+
`${at}.id: ${item.id} is not a non-negative safe integer (a JS number this large is already corrupted \u2014 pass the canonical integer string form)`
|
|
16560
|
+
);
|
|
16561
|
+
} else {
|
|
16562
|
+
problems.push(`${at}.id: required \u2014 the vendor numeric id (safe integer, or the canonical integer string for ids above 2^53)`);
|
|
16563
|
+
}
|
|
16564
|
+
continue;
|
|
16565
|
+
}
|
|
16566
|
+
if (item.fields !== void 0) {
|
|
16567
|
+
if (!Array.isArray(item.fields) || item.fields.some((f) => typeof f !== "string")) {
|
|
16568
|
+
problems.push(`${at}.fields: must be an array of exact vendor field names (discover them via operations.fieldCatalog)`);
|
|
16569
|
+
continue;
|
|
16570
|
+
}
|
|
16571
|
+
if (validation?.fieldCheck !== false) {
|
|
16572
|
+
const authoritative = validation?.fieldSetsByResource?.get(resourceKey) ?? fields;
|
|
16573
|
+
for (const f of item.fields) {
|
|
16574
|
+
if (!authoritative.includes(f)) {
|
|
16575
|
+
problems.push(
|
|
16576
|
+
`${at}.fields: "${f}" is not a field of ${resourceKey} \u2014 a hallucinated field is a shape error, not a silent projection-miss (exact vendor field names via operations.fieldCatalog)`
|
|
16577
|
+
);
|
|
16578
|
+
}
|
|
16579
|
+
}
|
|
16580
|
+
}
|
|
16581
|
+
}
|
|
16582
|
+
}
|
|
16583
|
+
if (problems.length > 0) {
|
|
16584
|
+
throw new AutotaskConfigError(
|
|
16585
|
+
`${opName}: ${problems.length} problem(s) found pre-request (zero wire was issued)
|
|
16586
|
+
- ` + problems.join("\n- "),
|
|
16587
|
+
{ suggestedAction: "Fix every item above and call again \u2014 validation covers the whole batch up-front (one round, zero wire)." }
|
|
16588
|
+
);
|
|
16589
|
+
}
|
|
16590
|
+
}
|
|
16591
|
+
function project(value, fields) {
|
|
16592
|
+
const out = {};
|
|
16593
|
+
for (const f of fields) {
|
|
16594
|
+
if (f in value) out[f] = value[f];
|
|
16595
|
+
}
|
|
16596
|
+
return out;
|
|
16597
|
+
}
|
|
16598
|
+
async function fetchMany(client, items, opts = {}) {
|
|
16599
|
+
if (opts.maxItems !== void 0) {
|
|
16600
|
+
if (!Number.isInteger(opts.maxItems) || opts.maxItems < 1) {
|
|
16601
|
+
throw new AutotaskConfigError(`fetchMany: maxItems must be an integer >= 1 (got ${String(opts.maxItems)})`);
|
|
16602
|
+
}
|
|
16603
|
+
}
|
|
16604
|
+
if (opts.liveFields !== void 0 && typeof opts.liveFields !== "boolean") {
|
|
16605
|
+
throw new AutotaskConfigError(`fetchMany: liveFields must be a boolean (got ${typeof opts.liveFields})`);
|
|
16606
|
+
}
|
|
16607
|
+
const cap = Math.min(FETCH_MANY_MAX_ITEMS, opts.maxItems ?? FETCH_MANY_MAX_ITEMS);
|
|
16608
|
+
if (opts.liveFields === true) {
|
|
16609
|
+
validateFetchManyItems(items, cap, void 0, void 0, { fieldCheck: false });
|
|
16610
|
+
const liveFieldSets = /* @__PURE__ */ new Map();
|
|
16611
|
+
for (const item of items) {
|
|
16612
|
+
const key = item.resource;
|
|
16613
|
+
if (liveFieldSets.has(key)) continue;
|
|
16614
|
+
const holder = client[camelKey(key)];
|
|
16615
|
+
if (holder === void 0) {
|
|
16616
|
+
throw new AutotaskConfigError(`fetchMany: the client exposes no accessor for resource "${key}"`, {
|
|
16617
|
+
suggestedAction: "Rebuild the client from the SDK build that ships this registry (the resource set is pinned by the plan)."
|
|
16618
|
+
});
|
|
16619
|
+
}
|
|
16620
|
+
try {
|
|
16621
|
+
const rows = await holder.getFieldInfo();
|
|
16622
|
+
const names = [];
|
|
16623
|
+
for (const row of rows) {
|
|
16624
|
+
if (typeof row.name === "string") names.push(row.name);
|
|
16625
|
+
}
|
|
16626
|
+
liveFieldSets.set(key, names.length > 0 ? names : null);
|
|
16627
|
+
} catch (err) {
|
|
16628
|
+
if (!isAutotaskError(err) || err.code === "ABORTED") throw err;
|
|
16629
|
+
liveFieldSets.set(key, null);
|
|
16630
|
+
}
|
|
16631
|
+
}
|
|
16632
|
+
validateFetchManyItems(items, cap, void 0, void 0, { fieldSetsByResource: liveFieldSets });
|
|
16633
|
+
} else {
|
|
16634
|
+
validateFetchManyItems(items, cap);
|
|
16635
|
+
}
|
|
16636
|
+
const results = [];
|
|
16637
|
+
for (const item of items) {
|
|
16638
|
+
const key = item.resource;
|
|
16639
|
+
const id = parseIdentifier(item.id, `items[${results.length}].id`);
|
|
16640
|
+
const holder = client[camelKey(key)];
|
|
16641
|
+
if (holder === void 0) {
|
|
16642
|
+
throw new AutotaskConfigError(`fetchMany: the client exposes no accessor for resource "${key}"`, {
|
|
16643
|
+
suggestedAction: "Rebuild the client from the SDK build that ships this registry (the resource set is pinned by the plan)."
|
|
16644
|
+
});
|
|
16645
|
+
}
|
|
16646
|
+
try {
|
|
16647
|
+
const value = await holder.get(id);
|
|
16648
|
+
results.push({ resource: key, id, found: true, value: item.fields !== void 0 ? project(value, item.fields) : value });
|
|
16649
|
+
} catch (err) {
|
|
16650
|
+
if (err instanceof NotFoundError) {
|
|
16651
|
+
results.push({ resource: key, id, found: false, value: null, error: { code: "NOT_FOUND", message: err.message } });
|
|
16652
|
+
} else if (isAutotaskError(err) && err.code !== "ABORTED") {
|
|
16653
|
+
const e = { code: err.code, message: err.message };
|
|
16654
|
+
if (err.httpStatus !== void 0) e.httpStatus = err.httpStatus;
|
|
16655
|
+
results.push({ resource: key, id, found: false, value: null, error: e });
|
|
16656
|
+
} else {
|
|
16657
|
+
throw err;
|
|
16658
|
+
}
|
|
16659
|
+
}
|
|
16660
|
+
}
|
|
16661
|
+
const ok = results.filter((r) => r.found).length;
|
|
16662
|
+
return { results, ok, failed: results.length - ok };
|
|
16663
|
+
}
|
|
16664
|
+
|
|
16665
|
+
// src/operations/fetchByIds.ts
|
|
16666
|
+
var FETCH_BY_IDS_MAX_ITEMS = 500;
|
|
16667
|
+
var FETCH_BY_IDS_CHUNK_SIZE = 250;
|
|
16668
|
+
function project2(value, fields) {
|
|
16669
|
+
const out = {};
|
|
16670
|
+
for (const f of fields) {
|
|
16671
|
+
if (f in value) out[f] = value[f];
|
|
16672
|
+
}
|
|
16673
|
+
return out;
|
|
16674
|
+
}
|
|
16675
|
+
function resourcePathOf(key, holder) {
|
|
16676
|
+
const path = holder?.resourcePath;
|
|
16677
|
+
if (typeof path !== "string" || path === "") {
|
|
16678
|
+
throw new AutotaskConfigError(`fetchByIds: the client exposes no ${key} resource path (registry drift)`, {
|
|
16679
|
+
suggestedAction: "Rebuild the client from the SDK build that ships this registry (the resource set is pinned by the plan)."
|
|
16680
|
+
});
|
|
16681
|
+
}
|
|
16682
|
+
return path;
|
|
16683
|
+
}
|
|
16684
|
+
async function fetchByIds(client, items, opts = {}) {
|
|
16685
|
+
if (opts.maxItems !== void 0) {
|
|
16686
|
+
if (!Number.isInteger(opts.maxItems) || opts.maxItems < 1) {
|
|
16687
|
+
throw new AutotaskConfigError(`fetchByIds: maxItems must be an integer >= 1 (got ${String(opts.maxItems)})`);
|
|
16688
|
+
}
|
|
16689
|
+
}
|
|
16690
|
+
const cap = Math.min(FETCH_BY_IDS_MAX_ITEMS, opts.maxItems ?? FETCH_BY_IDS_MAX_ITEMS);
|
|
16691
|
+
validateFetchManyItems(items, cap, "fetchByIds", `FETCH_BY_IDS_MAX_ITEMS = ${FETCH_BY_IDS_MAX_ITEMS}`);
|
|
16692
|
+
const groups = /* @__PURE__ */ new Map();
|
|
16693
|
+
const canonical = [];
|
|
16694
|
+
for (let i = 0; i < items.length; i += 1) {
|
|
16695
|
+
const item = items[i];
|
|
16696
|
+
const id = parseIdentifier(item.id, `items[${i}].id`);
|
|
16697
|
+
canonical[i] = id;
|
|
16698
|
+
const g = groups.get(item.resource) ?? { indices: [], fields: /* @__PURE__ */ new Set(), anyFields: false };
|
|
16699
|
+
g.indices.push(i);
|
|
16700
|
+
if (item.fields !== void 0) {
|
|
16701
|
+
g.anyFields = true;
|
|
16702
|
+
for (const f of item.fields) g.fields.add(f);
|
|
16703
|
+
}
|
|
16704
|
+
groups.set(item.resource, g);
|
|
16705
|
+
}
|
|
16706
|
+
const byKey = /* @__PURE__ */ new Map();
|
|
16707
|
+
for (const [key, group] of groups) {
|
|
16708
|
+
const holder = client[camelKey(key)];
|
|
16709
|
+
if (holder === void 0) {
|
|
16710
|
+
throw new AutotaskConfigError(`fetchByIds: the client exposes no accessor for resource "${key}"`, {
|
|
16711
|
+
suggestedAction: "Rebuild the client from the SDK build that ships this registry (the resource set is pinned by the plan)."
|
|
16712
|
+
});
|
|
16713
|
+
}
|
|
16714
|
+
const resourcePath = resourcePathOf(key, holder);
|
|
16715
|
+
const unique = [];
|
|
16716
|
+
const seen = /* @__PURE__ */ new Set();
|
|
16717
|
+
for (const i of group.indices) {
|
|
16718
|
+
const k = String(canonical[i]);
|
|
16719
|
+
if (!seen.has(k)) {
|
|
16720
|
+
seen.add(k);
|
|
16721
|
+
unique.push(canonical[i]);
|
|
16722
|
+
}
|
|
16723
|
+
}
|
|
16724
|
+
const includeFields = group.anyFields && group.indices.every((i) => items[i].fields !== void 0) ? [...group.fields] : void 0;
|
|
16725
|
+
const kOf = (id) => `${key}:${String(id)}`;
|
|
16726
|
+
for (let c = 0; c < unique.length; c += FETCH_BY_IDS_CHUNK_SIZE) {
|
|
16727
|
+
const chunk = unique.slice(c, c + FETCH_BY_IDS_CHUNK_SIZE);
|
|
16728
|
+
const chunkKeys = new Set(chunk.map((id) => String(id)));
|
|
16729
|
+
try {
|
|
16730
|
+
const req = buildQueryRequest(client.http.baseUrl, resourcePath, {
|
|
16731
|
+
filter: [{ field: "id", op: "in", value: chunk }],
|
|
16732
|
+
maxRecords: FETCH_BY_IDS_CHUNK_SIZE,
|
|
16733
|
+
includeFields
|
|
16734
|
+
});
|
|
16735
|
+
const res = await client.http.request({ ...req, operation: `${key}.fetchByIds` });
|
|
16736
|
+
const { items: rows } = unwrapItems(res, `${key}.fetchByIds`);
|
|
16737
|
+
for (const row of rows) {
|
|
16738
|
+
const k = String(row.id);
|
|
16739
|
+
if (!chunkKeys.has(k)) continue;
|
|
16740
|
+
const q = kOf(k);
|
|
16741
|
+
if (!byKey.has(q)) byKey.set(q, { found: true, value: row });
|
|
16742
|
+
}
|
|
16743
|
+
} catch (err) {
|
|
16744
|
+
if (isAutotaskError(err) && err.code !== "ABORTED") {
|
|
16745
|
+
const e = { code: err.code, message: err.message };
|
|
16746
|
+
if (err.httpStatus !== void 0) e.httpStatus = err.httpStatus;
|
|
16747
|
+
for (const u of chunk) {
|
|
16748
|
+
const q = kOf(u);
|
|
16749
|
+
if (!byKey.has(q)) byKey.set(q, { found: false, value: null, error: e });
|
|
16750
|
+
}
|
|
16751
|
+
continue;
|
|
16752
|
+
}
|
|
16753
|
+
throw err;
|
|
16754
|
+
}
|
|
16755
|
+
}
|
|
16756
|
+
for (const id of unique) {
|
|
16757
|
+
const k = kOf(id);
|
|
16758
|
+
if (byKey.has(k)) continue;
|
|
16759
|
+
try {
|
|
16760
|
+
const value = await holder.get(id);
|
|
16761
|
+
byKey.set(k, { found: true, value });
|
|
16762
|
+
} catch (err) {
|
|
16763
|
+
if (err instanceof NotFoundError) {
|
|
16764
|
+
byKey.set(k, { found: false, value: null, error: { code: "NOT_FOUND", message: err.message } });
|
|
16765
|
+
} else if (isAutotaskError(err) && err.code !== "ABORTED") {
|
|
16766
|
+
const e = { code: err.code, message: err.message };
|
|
16767
|
+
if (err.httpStatus !== void 0) e.httpStatus = err.httpStatus;
|
|
16768
|
+
byKey.set(k, { found: false, value: null, error: e });
|
|
16769
|
+
} else {
|
|
16770
|
+
throw err;
|
|
16771
|
+
}
|
|
16772
|
+
}
|
|
16773
|
+
}
|
|
16774
|
+
}
|
|
16775
|
+
const results = [];
|
|
16776
|
+
for (let i = 0; i < items.length; i += 1) {
|
|
16777
|
+
const item = items[i];
|
|
16778
|
+
const id = canonical[i];
|
|
16779
|
+
const out = byKey.get(`${item.resource}:${String(id)}`);
|
|
16780
|
+
const value = out.found ? item.fields !== void 0 ? project2(out.value, item.fields) : out.value : null;
|
|
16781
|
+
results.push(
|
|
16782
|
+
out.found ? { resource: item.resource, id, found: true, value } : { resource: item.resource, id, found: false, value: null, error: out.error }
|
|
16783
|
+
);
|
|
16784
|
+
}
|
|
16785
|
+
const ok = results.filter((r) => r.found).length;
|
|
16786
|
+
return { results, ok, failed: results.length - ok };
|
|
16787
|
+
}
|
|
16788
|
+
|
|
16318
16789
|
// src/resources/base.ts
|
|
16319
16790
|
var BOUNDED_QUERY_DEFAULT_LIMIT = 500;
|
|
16320
16791
|
var BOUNDED_QUERY_MAX_LIMIT = 2500;
|
|
@@ -18160,6 +18631,7 @@ export {
|
|
|
18160
18631
|
BLIND_SURFACE_STAMPS,
|
|
18161
18632
|
DELETE_BOUNDARY_NOTES,
|
|
18162
18633
|
MARKER_FIELDS,
|
|
18634
|
+
EMPTY_REASON_STAMPS,
|
|
18163
18635
|
BLIND_SURFACE_INVENTORY,
|
|
18164
18636
|
REACHABILITY_PROBE_DEFAULTS,
|
|
18165
18637
|
CREATE_GUIDANCE,
|
|
@@ -18203,5 +18675,13 @@ export {
|
|
|
18203
18675
|
createNamePlan,
|
|
18204
18676
|
addNameSibling,
|
|
18205
18677
|
addLabelSibling,
|
|
18206
|
-
resolveCompositeNames
|
|
18678
|
+
resolveCompositeNames,
|
|
18679
|
+
MODEL_FIELD_SETS,
|
|
18680
|
+
MODEL_DATE_FIELDS,
|
|
18681
|
+
FETCH_MANY_MAX_ITEMS,
|
|
18682
|
+
validateFetchManyItems,
|
|
18683
|
+
fetchMany,
|
|
18684
|
+
FETCH_BY_IDS_MAX_ITEMS,
|
|
18685
|
+
FETCH_BY_IDS_CHUNK_SIZE,
|
|
18686
|
+
fetchByIds
|
|
18207
18687
|
};
|