node-autotask 0.11.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 +26 -8
- package/MCP_TOOL_MANIFEST.md +12 -11
- package/N8N_MCP_MANIFEST.json +3 -3
- package/N8N_MCP_MANIFEST.md +4 -4
- package/README.md +1 -1
- package/capabilities.json +1352 -1233
- package/dist/capabilities.cjs +2 -2
- package/dist/capabilities.js +1 -1
- package/dist/{chunk-SXHPUQMB.js → chunk-3WIDDEHP.js} +2 -2
- package/dist/{chunk-7L23FDQW.js → chunk-4A6XLQHE.js} +1351 -1232
- package/dist/{chunk-YKEX4SK7.cjs → chunk-5N6DYKXO.cjs} +519 -39
- package/dist/{chunk-LNRN45XS.js → chunk-GD4JRPYF.js} +498 -18
- package/dist/{chunk-T5FLSJOD.cjs → chunk-JKZVCFRY.cjs} +1351 -1232
- package/dist/{chunk-CJONZQ7E.js → chunk-MY7ZSXY3.js} +1075 -6
- package/dist/{chunk-25ZUKHS4.cjs → chunk-SRJI5XUZ.cjs} +135 -135
- package/dist/{chunk-QAX222R6.cjs → chunk-TELBX6HK.cjs} +1462 -393
- package/dist/{index-B_xToSpq.d.ts → index-D8I6taEo.d.cts} +200 -2
- package/dist/{index-Dv_GSZaN.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 +123 -588
- package/dist/operations/index.d.cts +4 -4
- package/dist/operations/index.d.ts +4 -4
- package/dist/operations/index.js +10 -475
- 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
|
@@ -30,26 +30,32 @@
|
|
|
30
30
|
|
|
31
31
|
|
|
32
32
|
|
|
33
|
-
var _chunkYKEX4SK7cjs = require('../chunk-YKEX4SK7.cjs');
|
|
34
33
|
|
|
35
34
|
|
|
36
|
-
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
var _chunk5N6DYKXOcjs = require('../chunk-5N6DYKXO.cjs');
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
var _chunkJKZVCFRYcjs = require('../chunk-JKZVCFRY.cjs');
|
|
37
43
|
|
|
38
44
|
// src/operations/searchAcrossResources.ts
|
|
39
45
|
var DEFAULT_LIMIT = 25;
|
|
40
46
|
function resourceFor(client, key) {
|
|
41
|
-
return client[
|
|
47
|
+
return client[_chunk5N6DYKXOcjs.camelKey.call(void 0, key)];
|
|
42
48
|
}
|
|
43
49
|
async function searchAcrossResources(client, query, opts = {}) {
|
|
44
50
|
const text = query.trim();
|
|
45
51
|
if (text === "") {
|
|
46
|
-
throw new (0,
|
|
52
|
+
throw new (0, _chunk5N6DYKXOcjs.AutotaskConfigError)("searchAcrossResources: query must be a non-empty string");
|
|
47
53
|
}
|
|
48
|
-
const keys = _nullishCoalesce(opts.resources, () => (
|
|
54
|
+
const keys = _nullishCoalesce(opts.resources, () => ( _chunk5N6DYKXOcjs.WORKFLOW_RESOURCES));
|
|
49
55
|
if (keys.length === 0) {
|
|
50
|
-
throw new (0,
|
|
56
|
+
throw new (0, _chunk5N6DYKXOcjs.AutotaskConfigError)("searchAcrossResources: no resources requested");
|
|
51
57
|
}
|
|
52
|
-
const limit =
|
|
58
|
+
const limit = _chunk5N6DYKXOcjs.clampPageSize.call(void 0, _nullishCoalesce(opts.limit, () => ( DEFAULT_LIMIT)));
|
|
53
59
|
const results = [];
|
|
54
60
|
const skipped = [];
|
|
55
61
|
for (const key of keys) {
|
|
@@ -67,7 +73,7 @@ async function searchAcrossResources(client, query, opts = {}) {
|
|
|
67
73
|
|
|
68
74
|
// src/operations/resolveAny.ts
|
|
69
75
|
function resourceFor2(client, key) {
|
|
70
|
-
return client[
|
|
76
|
+
return client[_chunk5N6DYKXOcjs.camelKey.call(void 0, key)];
|
|
71
77
|
}
|
|
72
78
|
var FAULT_CATEGORIES = /* @__PURE__ */ new Set(["auth", "rate_limit", "server", "network", "timeout", "policy"]);
|
|
73
79
|
function missCost(identifier) {
|
|
@@ -76,13 +82,13 @@ function missCost(identifier) {
|
|
|
76
82
|
}
|
|
77
83
|
async function resolveAny(client, identifier, opts = {}) {
|
|
78
84
|
if (typeof identifier === "number") {
|
|
79
|
-
|
|
85
|
+
_chunk5N6DYKXOcjs.parseIdentifier.call(void 0, identifier, "identifier");
|
|
80
86
|
} else if (identifier.trim() === "") {
|
|
81
|
-
throw new (0,
|
|
87
|
+
throw new (0, _chunk5N6DYKXOcjs.AutotaskConfigError)("resolveAny: identifier must be non-empty");
|
|
82
88
|
}
|
|
83
|
-
const keys = _nullishCoalesce(opts.resources, () => (
|
|
89
|
+
const keys = _nullishCoalesce(opts.resources, () => ( _chunk5N6DYKXOcjs.WORKFLOW_RESOURCES));
|
|
84
90
|
if (keys.length === 0) {
|
|
85
|
-
throw new (0,
|
|
91
|
+
throw new (0, _chunk5N6DYKXOcjs.AutotaskConfigError)("resolveAny: no resources requested");
|
|
86
92
|
}
|
|
87
93
|
const results = [];
|
|
88
94
|
for (const key of keys) {
|
|
@@ -112,9 +118,9 @@ async function resolveAny(client, identifier, opts = {}) {
|
|
|
112
118
|
} catch (err) {
|
|
113
119
|
let code;
|
|
114
120
|
let candidates = [];
|
|
115
|
-
if (err instanceof
|
|
121
|
+
if (err instanceof _chunk5N6DYKXOcjs.AutotaskConfigError) {
|
|
116
122
|
code = "CONFIG_ERROR";
|
|
117
|
-
} else if (
|
|
123
|
+
} else if (_chunk5N6DYKXOcjs.isAutotaskError.call(void 0, err)) {
|
|
118
124
|
if (FAULT_CATEGORIES.has(err.category)) throw err;
|
|
119
125
|
code = err.code;
|
|
120
126
|
if (code === "RESOLUTION_AMBIGUOUS" && err.resourceIds !== void 0) {
|
|
@@ -138,357 +144,10 @@ async function resolveAny(client, identifier, opts = {}) {
|
|
|
138
144
|
return { identifier, results, matches };
|
|
139
145
|
}
|
|
140
146
|
|
|
141
|
-
// src/field-sets.ts
|
|
142
|
-
var MODEL_FIELD_SETS = {
|
|
143
|
-
"appointments": ["id", "createDateTime", "creatorResourceID", "description", "endDateTime", "resourceID", "startDateTime", "title", "updateDateTime"],
|
|
144
|
-
"billing_codes": ["id", "afterHoursWorkType", "billingCodeType", "department", "description", "externalNumber", "generalLedgerAccount", "isActive", "isExcludedFromNewContracts", "markupRate", "name", "taxCategoryID", "unitCost", "unitPrice", "useType"],
|
|
145
|
-
"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"],
|
|
146
|
-
"change_request_links": ["id", "changeRequestTicketID", "problemOrIncidentTicketID"],
|
|
147
|
-
"checklist_libraries": ["id", "description", "entityType", "isActive", "name"],
|
|
148
|
-
"checklist_library_checklist_items": ["id", "checklistLibraryID", "isImportant", "itemName", "knowledgebaseArticleID", "position", "soapParentPropertyId"],
|
|
149
|
-
"classification_icons": ["id", "description", "isActive", "isSystem", "name", "relativeUrl"],
|
|
150
|
-
"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"],
|
|
151
|
-
"company_alerts": ["id", "alertText", "alertTypeID", "companyID", "soapParentPropertyId"],
|
|
152
|
-
"company_locations": ["id", "address1", "address2", "alternatePhone1", "alternatePhone2", "city", "companyID", "countryID", "description", "fax", "isActive", "isPrimary", "isTaxExempt", "overrideCompanyTaxSettings", "name", "phone", "postalCode", "roundtripDistance", "state", "taxRegionID", "soapParentPropertyId"],
|
|
153
|
-
"company_notes": ["id", "actionType", "assignedResourceID", "companyID", "completedDateTime", "contactID", "createDateTime", "endDateTime", "impersonatorCreatorResourceID", "impersonatorUpdaterResourceID", "lastModifiedDate", "name", "note", "opportunityID", "startDateTime", "soapParentPropertyId"],
|
|
154
|
-
"company_site_configurations": ["id", "companyID", "locationName", "soapParentPropertyId", "userDefinedFields"],
|
|
155
|
-
"company_webhooks": ["id", "deactivationUrl", "isActive", "isReady", "isSubscribedToCreateEvents", "isSubscribedToDeleteEvents", "isSubscribedToUpdateEvents", "name", "notificationEmailAddress", "ownerResourceID", "secretKey", "sendThresholdExceededNotification", "webhookGUID", "webhookUrl"],
|
|
156
|
-
"configuration_item_billing_product_associations": ["id", "billingProductID", "configurationItemID", "effectiveDate", "expirationDate", "soapParentPropertyId"],
|
|
157
|
-
"configuration_item_categories": ["id", "displayColorRGB", "isActive", "isClientPortalDefault", "isGlobalDefault", "name", "nickname"],
|
|
158
|
-
"configuration_item_category_udf_associations": ["id", "configurationItemCategoryID", "isRequired", "userDefinedFieldDefinitionID", "soapParentPropertyId"],
|
|
159
|
-
"configuration_item_dns_records": ["id", "createDateTime", "data", "installedProductID", "timeToLiveSeconds", "dnsType", "soapParentPropertyId"],
|
|
160
|
-
"configuration_item_notes": ["id", "configurationItemID", "createDateTime", "creatorResourceID", "description", "impersonatorCreatorResourceID", "impersonatorUpdaterResourceID", "lastActivityDate", "noteType", "title", "soapParentPropertyId"],
|
|
161
|
-
"configuration_item_related_items": ["id", "configurationItemID", "relatedConfigurationItemID", "relationship", "soapParentPropertyId"],
|
|
162
|
-
"configuration_item_ssl_subject_alternative_names": ["id", "configurationItemID", "name", "soapParentPropertyId"],
|
|
163
|
-
"configuration_item_types": ["id", "isActive", "name"],
|
|
164
|
-
"configuration_item_webhooks": ["id", "deactivationUrl", "isActive", "isReady", "isSubscribedToCreateEvents", "isSubscribedToDeleteEvents", "isSubscribedToUpdateEvents", "name", "notificationEmailAddress", "ownerResourceID", "secretKey", "sendThresholdExceededNotification", "webhookGUID", "webhookUrl"],
|
|
165
|
-
"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"],
|
|
166
|
-
"contact_group_contacts": ["id", "contactId", "contactGroupId", "soapParentPropertyId"],
|
|
167
|
-
"contact_groups": ["id", "name", "isActive"],
|
|
168
|
-
"contact_webhooks": ["id", "deactivationUrl", "isActive", "isReady", "isSubscribedToCreateEvents", "isSubscribedToDeleteEvents", "isSubscribedToUpdateEvents", "name", "notificationEmailAddress", "ownerResourceID", "secretKey", "sendThresholdExceededNotification", "webhookGUID", "webhookUrl"],
|
|
169
|
-
"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"],
|
|
170
|
-
"contract_billing_rules": ["id", "contractID", "createChargesAsBillable", "dailyProratedCost", "dailyProratedPrice", "determineUnits", "endDate", "executionMethod", "includeItemsInChargeDescription", "invoiceDescription", "isActive", "isDailyProrationEnabled", "maximumUnits", "minimumUnits", "productID", "startDate", "soapParentPropertyId"],
|
|
171
|
-
"contract_block_hour_factors": ["id", "blockHourMultiplier", "contractHourlyRate", "contractID", "internalCurrencyContractHourlyRate", "roleID", "soapParentPropertyId"],
|
|
172
|
-
"contract_blocks": ["id", "contractID", "datePurchased", "endDate", "hourlyRate", "hours", "hoursApproved", "invoiceNumber", "isPaid", "paymentNumber", "paymentType", "startDate", "status", "soapParentPropertyId"],
|
|
173
|
-
"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"],
|
|
174
|
-
"contract_exclusion_billing_codes": ["id", "billingCodeID", "contractID", "soapParentPropertyId"],
|
|
175
|
-
"contract_exclusion_roles": ["id", "contractID", "roleID", "soapParentPropertyId"],
|
|
176
|
-
"contract_exclusion_set_excluded_roles": ["id", "contractExclusionSetID", "excludedRoleID", "soapParentPropertyId"],
|
|
177
|
-
"contract_exclusion_set_excluded_work_types": ["id", "contractExclusionSetID", "excludedWorkTypeID", "soapParentPropertyId"],
|
|
178
|
-
"contract_exclusion_sets": ["id", "description", "isActive", "name"],
|
|
179
|
-
"contract_milestones": ["id", "amount", "billingCodeID", "contractID", "createDate", "creatorResourceID", "dateDue", "description", "internalCurrencyAmount", "isInitialPayment", "organizationalLevelAssociationID", "status", "title", "soapParentPropertyId"],
|
|
180
|
-
"contract_notes": ["id", "contractID", "createDateTime", "creatorResourceID", "description", "impersonatorCreatorResourceID", "impersonatorUpdaterResourceID", "lastActivityDate", "title", "soapParentPropertyId"],
|
|
181
|
-
"contract_rates": ["id", "contractHourlyRate", "contractID", "internalCurrencyContractHourlyRate", "roleID", "soapParentPropertyId"],
|
|
182
|
-
"contract_retainers": ["id", "amount", "amountApproved", "contractID", "datePurchased", "endDate", "internalCurrencyAmount", "internalCurrencyAmountApproved", "invoiceNumber", "isPaid", "paymentID", "paymentNumber", "startDate", "status", "soapParentPropertyId"],
|
|
183
|
-
"contract_role_costs": ["id", "contractID", "rate", "resourceID", "roleID", "soapParentPropertyId"],
|
|
184
|
-
"contract_service_bundle_units": ["id", "approveAndPostDate", "contractID", "contractServiceBundleID", "cost", "endDate", "internalCurrencyPrice", "organizationalLevelAssociationID", "price", "serviceBundleID", "startDate", "units", "soapParentPropertyId"],
|
|
185
|
-
"contract_service_bundles": ["id", "adjustedPrice", "contractID", "internalCurrencyAdjustedPrice", "internalCurrencyUnitPrice", "internalDescription", "invoiceDescription", "quoteItemID", "serviceBundleID", "unitPrice", "soapParentPropertyId"],
|
|
186
|
-
"contract_service_units": ["id", "approveAndPostDate", "contractID", "contractServiceID", "cost", "endDate", "internalCurrencyPrice", "organizationalLevelAssociationID", "price", "serviceID", "startDate", "units", "vendorCompanyID", "soapParentPropertyId"],
|
|
187
|
-
"contract_services": ["id", "contractID", "internalCurrencyAdjustedPrice", "internalCurrencyUnitPrice", "internalDescription", "invoiceDescription", "quoteItemID", "serviceID", "unitCost", "unitPrice", "soapParentPropertyId"],
|
|
188
|
-
"contract_ticket_purchases": ["id", "contractID", "datePurchased", "endDate", "invoiceNumber", "isPaid", "paymentNumber", "paymentType", "perTicketRate", "startDate", "status", "ticketsPurchased", "ticketsUsed", "soapParentPropertyId"],
|
|
189
|
-
"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"],
|
|
190
|
-
"countries": ["id", "addressFormatID", "countryCode", "displayName", "invoiceTemplateID", "isActive", "isDefaultCountry", "name", "purchaseOrderTemplateID", "quoteTemplateID"],
|
|
191
|
-
"departments": ["id", "description", "name", "number", "primaryLocationID"],
|
|
192
|
-
"domain_registrars": ["id", "name", "url"],
|
|
193
|
-
"expense_item_attachments": ["id", "attachDate", "attachedByContactID", "attachedByResourceID", "attachmentType", "contentType", "creatorType", "expenseItemID", "expenseReportID", "fileSize", "fullPath", "impersonatorCreatorResourceID", "opportunityID", "parentID", "publish", "title", "data", "parentType", "soapParentPropertyId", "isTaskAttachment"],
|
|
194
|
-
"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"],
|
|
195
|
-
"expense_reports": ["id", "amountDue", "approvedDate", "approverID", "departmentNumber", "internalCurrencyCashAdvanceAmount", "internalCurrencyExpenseTotal", "name", "organizationalLevelAssociationID", "quickBooksReferenceNumber", "reimbursementCurrencyAmountDue", "reimbursementCurrencyCashAdvanceAmount", "reimbursementCurrencyID", "rejectionReason", "status", "submit", "submitDate", "submitterID", "weekEnding"],
|
|
196
|
-
"holiday_sets": ["id", "holidaySetDescription", "holidaySetName"],
|
|
197
|
-
"holidays": ["id", "holidayDate", "holidayName", "holidaySetID", "soapParentPropertyId"],
|
|
198
|
-
"inventory_products": ["id", "availableUnits", "backOrderQuantity", "bin", "createDateTime", "createdByResourceID", "inventoryLocationID", "onHandUnits", "pickedUnits", "productID", "quantityMaximum", "quantityMinimum", "referenceNumber", "reservedUnits", "unitsOnOrder"],
|
|
199
|
-
"invoices": ["id", "batchID", "comments", "companyID", "createDateTime", "creatorResourceID", "dueDate", "fromDate", "invoiceDateTime", "invoiceEditorTemplateID", "invoiceNumber", "invoiceTotal", "isVoided", "orderNumber", "paidDate", "paymentTerm", "taxGroup", "taxRegionName", "toDate", "totalTaxValue", "voidedByResourceID", "voidedDate", "webServiceDate"],
|
|
200
|
-
"notification_history": ["id", "companyID", "entityNumber", "entityTitle", "initiatingContactID", "initiatingResourceID", "isActive", "isDeleted", "isTemplateJob", "notificationHistoryTypeID", "notificationSentTime", "opportunityID", "projectID", "quoteID", "recipientDisplayName", "recipientEmailAddress", "taskID", "templateName", "ticketID", "timeEntryID"],
|
|
201
|
-
"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"],
|
|
202
|
-
"opportunity_attachments": ["id", "attachDate", "attachedByContactID", "attachedByResourceID", "attachmentType", "contentType", "creatorType", "fileSize", "fullPath", "impersonatorCreatorResourceID", "opportunityID", "parentAttachmentID", "parentID", "publish", "title", "data", "parentType", "soapParentPropertyId", "isTaskAttachment"],
|
|
203
|
-
"opportunity_categories": ["id", "displayColorRGB", "isActive", "isGlobalDefault", "name", "nickname"],
|
|
204
|
-
"phases": ["id", "createDate", "creatorResourceID", "description", "dueDate", "estimatedHours", "externalID", "isScheduled", "lastActivityDateTime", "parentPhaseID", "phaseNumber", "projectID", "startDate", "title", "soapParentPropertyId"],
|
|
205
|
-
"product_vendors": ["id", "isActive", "isDefault", "productID", "vendorCost", "vendorID", "vendorPartNumber", "soapParentPropertyId"],
|
|
206
|
-
"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"],
|
|
207
|
-
"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"],
|
|
208
|
-
"project_notes": ["id", "createDateTime", "createdByContactID", "creatorResourceID", "description", "impersonatorCreatorResourceID", "impersonatorUpdaterResourceID", "isAnnouncement", "lastActivityDate", "noteType", "projectID", "publish", "title", "soapParentPropertyId"],
|
|
209
|
-
"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"],
|
|
210
|
-
"purchase_approvals": ["id", "costType", "isApproved", "rejectNote"],
|
|
211
|
-
"purchase_order_item_receiving": ["id", "purchaseOrderItemID", "quantityBackOrdered", "quantityNowReceiving", "quantityPreviouslyReceived", "receiveDate", "receivedByResourceID", "serialNumber", "vendorInvoiceNumber", "soapParentPropertyId"],
|
|
212
|
-
"purchase_order_items": ["id", "chargeID", "contractID", "estimatedArrivalDate", "internalCurrencyUnitCost", "inventoryLocationID", "memo", "orderID", "productID", "projectID", "quantity", "salesOrderID", "ticketID", "unitCost", "soapParentPropertyId"],
|
|
213
|
-
"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"],
|
|
214
|
-
"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"],
|
|
215
|
-
"quote_locations": ["id", "address1", "address2", "city", "postalCode", "state"],
|
|
216
|
-
"quote_templates": ["id", "calculateTaxSeparately", "createDate", "createdBy", "currencyNegativeFormat", "currencyPositiveFormat", "dateFormat", "description", "displayTaxCategorySuperscripts", "isActive", "lastActivityBy", "lastActivityDate", "name", "numberFormat", "pageLayout", "pageNumberFormat", "showEachTaxInGroup", "showGridHeader", "showTaxCategory", "showVerticalGridLines"],
|
|
217
|
-
"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"],
|
|
218
|
-
"resource_role_queues": ["id", "queueID", "resourceID", "soapParentPropertyId"],
|
|
219
|
-
"resource_roles": ["id", "departmentID", "isActive", "queueID", "resourceID", "roleID", "soapParentPropertyId"],
|
|
220
|
-
"resource_skills": ["id", "resourceID", "skillDescription", "skillID", "skillLevel", "soapParentPropertyId"],
|
|
221
|
-
"resource_time_off_approvers": ["id", "resourceID", "approverResourceID", "approvalLevel", "soapParentPropertyId"],
|
|
222
|
-
"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"],
|
|
223
|
-
"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"],
|
|
224
|
-
"roles": ["id", "description", "hourlyFactor", "hourlyRate", "isActive", "isExcludedFromNewContracts", "isSystemRole", "name", "quoteItemDefaultTaxCategoryId", "roleType"],
|
|
225
|
-
"service_call_task_resources": ["id", "resourceID", "serviceCallTaskID", "soapParentPropertyId"],
|
|
226
|
-
"service_call_tasks": ["id", "serviceCallID", "taskID", "soapParentPropertyId"],
|
|
227
|
-
"service_call_ticket_resources": ["id", "resourceID", "serviceCallTicketID", "soapParentPropertyId"],
|
|
228
|
-
"service_call_tickets": ["id", "serviceCallID", "ticketID", "soapParentPropertyId"],
|
|
229
|
-
"service_calls": ["id", "cancelationNoticeHours", "canceledByResourceID", "canceledDateTime", "companyID", "companyLocationID", "createDateTime", "creatorResourceID", "description", "duration", "endDateTime", "impersonatorCreatorResourceID", "isComplete", "lastModifiedDateTime", "startDateTime", "status"],
|
|
230
|
-
"service_level_agreement_results": ["id", "firstResponseElapsedHours", "firstResponseInitiatingResourceID", "firstResponseResourceID", "isFirstResponseMet", "isResolutionMet", "isResolutionPlanMet", "resolutionElapsedHours", "resolutionPlanElapsedHours", "resolutionPlanResourceID", "resolutionResourceID", "serviceLevelAgreementName", "ticketID", "soapParentPropertyId"],
|
|
231
|
-
"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"],
|
|
232
|
-
"skills": ["id", "categoryID", "description", "isActive", "name"],
|
|
233
|
-
"subscription_periods": ["id", "periodCost", "periodDate", "periodPrice", "postedDate", "purchaseOrderNumber", "subscriptionID", "soapParentPropertyId"],
|
|
234
|
-
"subscriptions": ["id", "configurationItemID", "description", "effectiveDate", "expirationDate", "impersonatorCreatorResourceID", "materialCodeID", "organizationalLevelAssociationID", "periodCost", "periodPrice", "periodType", "purchaseOrderNumber", "status", "subscriptionName", "totalCost", "totalPrice", "vendorID", "userDefinedFields"],
|
|
235
|
-
"survey_results": ["id", "companyID", "companyRating", "completeDate", "contactID", "contactRating", "resourceRating", "sendDate", "surveyID", "surveyRating", "ticketID"],
|
|
236
|
-
"surveys": ["id", "description", "displayName", "name"],
|
|
237
|
-
"tag_aliases": ["id", "alias", "tagID", "soapParentPropertyId"],
|
|
238
|
-
"tag_groups": ["id", "displayColor", "isActive", "isSystem", "label"],
|
|
239
|
-
"tags": ["id", "createDateTime", "isActive", "isExcludedFromAutomaticTagging", "isSystem", "label", "lastModifiedDateTime", "tagGroupID"],
|
|
240
|
-
"task_secondary_resources": ["id", "resourceID", "roleID", "taskID", "soapParentPropertyId"],
|
|
241
|
-
"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"],
|
|
242
|
-
"ticket_additional_configuration_items": ["id", "configurationItemID", "ticketID", "soapParentPropertyId"],
|
|
243
|
-
"ticket_additional_contacts": ["id", "contactID", "ticketID", "soapParentPropertyId"],
|
|
244
|
-
"ticket_attachments": ["id", "attachDate", "attachedByContactID", "attachedByResourceID", "attachmentType", "contentType", "creatorType", "fileSize", "fullPath", "impersonatorCreatorResourceID", "opportunityID", "parentAttachmentID", "parentID", "publish", "ticketID", "ticketNoteID", "timeEntryID", "title", "data", "parentType", "soapParentPropertyId", "isTaskAttachment"],
|
|
245
|
-
"ticket_categories": ["id", "displayColorRGB", "isActive", "isApiOnly", "isGlobalDefault", "name", "nickname"],
|
|
246
|
-
"ticket_category_field_defaults": ["id", "description", "estimatedHours", "issueTypeID", "organizationalLevelAssociationID", "priority", "purchaseOrderNumber", "queueID", "resolution", "serviceLevelAgreementID", "sourceID", "status", "subIssueTypeID", "ticketCategoryID", "ticketTypeID", "title", "workTypeID", "soapParentPropertyId"],
|
|
247
|
-
"ticket_change_request_approvals": ["id", "approveRejectDateTime", "approveRejectNote", "contactID", "isApproved", "resourceID", "ticketID", "soapParentPropertyId"],
|
|
248
|
-
"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"],
|
|
249
|
-
"ticket_checklist_items": ["id", "completedByResourceID", "completedDateTime", "isCompleted", "isImportant", "itemName", "knowledgebaseArticleID", "position", "ticketID", "soapParentPropertyId"],
|
|
250
|
-
"ticket_history": ["id", "action", "date", "detail", "resourceID", "ticketID", "soapParentPropertyId"],
|
|
251
|
-
"ticket_note_attachments": ["id", "attachDate", "attachedByContactID", "attachedByResourceID", "attachmentType", "contentType", "creatorType", "fileSize", "fullPath", "impersonatorCreatorResourceID", "opportunityID", "parentID", "publish", "ticketID", "ticketNoteID", "title", "data", "parentType", "soapParentPropertyId", "isTaskAttachment"],
|
|
252
|
-
"ticket_note_webhooks": ["id", "deactivationUrl", "isActive", "isReady", "isSubscribedToCreateEvents", "isSubscribedToDeleteEvents", "isSubscribedToUpdateEvents", "name", "notificationEmailAddress", "ownerResourceID", "secretKey", "sendThresholdExceededNotification", "webhookGUID", "webhookUrl"],
|
|
253
|
-
"ticket_notes": ["id", "createDateTime", "createdByContactID", "creatorResourceID", "description", "impersonatorCreatorResourceID", "impersonatorUpdaterResourceID", "lastActivityDate", "noteType", "publish", "ticketID", "title", "soapParentPropertyId"],
|
|
254
|
-
"ticket_secondary_resources": ["id", "resourceID", "roleID", "ticketID", "soapParentPropertyId"],
|
|
255
|
-
"ticket_webhooks": ["id", "deactivationUrl", "isActive", "isReady", "isSubscribedToCreateEvents", "isSubscribedToDeleteEvents", "isSubscribedToUpdateEvents", "name", "notificationEmailAddress", "ownerResourceID", "secretKey", "sendThresholdExceededNotification", "webhookGUID", "webhookUrl"],
|
|
256
|
-
"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"],
|
|
257
|
-
"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"],
|
|
258
|
-
"time_entry_attachments": ["id", "attachDate", "attachedByContactID", "attachedByResourceID", "attachmentType", "contentType", "creatorType", "fileSize", "fullPath", "impersonatorCreatorResourceID", "opportunityID", "parentID", "publish", "taskID", "ticketID", "timeEntryID", "title", "data", "parentType", "soapParentPropertyId", "isTaskAttachment"],
|
|
259
|
-
"time_off_requests": ["id", "approvedDateTime", "approveRejectResourceID", "createdByResourceID", "createDateTime", "endTime", "hours", "impersonatorApproveRejectResourceID", "lastModifiedByResourceID", "lastModifiedDateTime", "lastApprovedLevel", "reason", "rejectReason", "requestDate", "resourceID", "startTime", "status", "timeOffRequestType", "soapParentPropertyId"]
|
|
260
|
-
};
|
|
261
|
-
var MODEL_DATE_FIELDS = {
|
|
262
|
-
"appointments": ["createDateTime", "endDateTime", "startDateTime", "updateDateTime"],
|
|
263
|
-
"billing_items": ["itemDate", "postedDate", "postedOnTime", "webServiceDate"],
|
|
264
|
-
"companies": ["createDate", "lastActivityDate", "lastTrackedModifiedDateTime"],
|
|
265
|
-
"company_notes": ["completedDateTime", "createDateTime", "endDateTime", "lastModifiedDate", "startDateTime"],
|
|
266
|
-
"configuration_item_billing_product_associations": ["effectiveDate", "expirationDate"],
|
|
267
|
-
"configuration_item_dns_records": ["createDateTime"],
|
|
268
|
-
"configuration_item_notes": ["createDateTime", "lastActivityDate"],
|
|
269
|
-
"configuration_items": ["createDate", "dattoLastCheckInDateTime", "domainRegistrationDateTime", "domainLastUpdatedDateTime", "domainExpirationDateTime", "installDate", "lastModifiedTime", "sslValidFromDateTime", "sslValidUntilDateTime", "warrantyExpirationDate"],
|
|
270
|
-
"contacts": ["bulkEmailOptOutTime", "createDate", "lastActivityDate", "lastModifiedDate", "solicitationOptOutTime"],
|
|
271
|
-
"contract_billing_rules": ["endDate", "startDate"],
|
|
272
|
-
"contract_blocks": ["datePurchased", "endDate", "startDate"],
|
|
273
|
-
"contract_charges": ["createDate", "datePurchased", "statusLastModifiedDate"],
|
|
274
|
-
"contract_milestones": ["createDate", "dateDue"],
|
|
275
|
-
"contract_notes": ["createDateTime", "lastActivityDate"],
|
|
276
|
-
"contract_retainers": ["datePurchased", "endDate", "startDate"],
|
|
277
|
-
"contract_service_bundle_units": ["approveAndPostDate", "endDate", "startDate"],
|
|
278
|
-
"contract_service_units": ["approveAndPostDate", "endDate", "startDate"],
|
|
279
|
-
"contract_ticket_purchases": ["datePurchased", "endDate", "startDate"],
|
|
280
|
-
"contracts": ["endDate", "lastModifiedDateTime", "startDate"],
|
|
281
|
-
"expense_item_attachments": ["attachDate"],
|
|
282
|
-
"expense_items": ["expenseDate"],
|
|
283
|
-
"expense_reports": ["approvedDate", "submitDate", "weekEnding"],
|
|
284
|
-
"holidays": ["holidayDate"],
|
|
285
|
-
"inventory_products": ["createDateTime"],
|
|
286
|
-
"invoices": ["createDateTime", "dueDate", "fromDate", "invoiceDateTime", "paidDate", "toDate", "voidedDate", "webServiceDate"],
|
|
287
|
-
"notification_history": ["notificationSentTime"],
|
|
288
|
-
"opportunities": ["closedDate", "createDate", "lastActivity", "lostDate", "projectedCloseDate", "promisedFulfillmentDate", "startDate", "throughDate"],
|
|
289
|
-
"opportunity_attachments": ["attachDate"],
|
|
290
|
-
"phases": ["createDate", "dueDate", "lastActivityDateTime", "startDate"],
|
|
291
|
-
"products": ["createdTime"],
|
|
292
|
-
"project_charges": ["createDate", "datePurchased", "statusLastModifiedDate"],
|
|
293
|
-
"project_notes": ["createDateTime", "lastActivityDate"],
|
|
294
|
-
"projects": ["completedDateTime", "createDateTime", "endDateTime", "lastActivityDateTime", "startDateTime", "statusDateTime"],
|
|
295
|
-
"purchase_order_item_receiving": ["receiveDate"],
|
|
296
|
-
"purchase_order_items": ["estimatedArrivalDate"],
|
|
297
|
-
"purchase_orders": ["cancelDateTime", "createDateTime", "latestEstimatedArrivalDate", "shippingDate", "submitDateTime"],
|
|
298
|
-
"quote_templates": ["createDate", "lastActivityDate"],
|
|
299
|
-
"quotes": ["approvalStatusChangedDate", "createDate", "effectiveDate", "expirationDate", "extApprovalResponseDate", "lastActivityDate", "lastPublishedDateTime"],
|
|
300
|
-
"resources": ["hireDate"],
|
|
301
|
-
"service_calls": ["canceledDateTime", "createDateTime", "endDateTime", "lastModifiedDateTime", "startDateTime"],
|
|
302
|
-
"services": ["createDate", "lastModifiedDate"],
|
|
303
|
-
"subscription_periods": ["periodDate", "postedDate"],
|
|
304
|
-
"subscriptions": ["effectiveDate", "expirationDate"],
|
|
305
|
-
"survey_results": ["completeDate", "sendDate"],
|
|
306
|
-
"tags": ["createDateTime", "lastModifiedDateTime"],
|
|
307
|
-
"tasks": ["completedDateTime", "createDateTime", "endDateTime", "lastActivityDateTime", "startDateTime"],
|
|
308
|
-
"ticket_attachments": ["attachDate"],
|
|
309
|
-
"ticket_change_request_approvals": ["approveRejectDateTime"],
|
|
310
|
-
"ticket_charges": ["createDate", "datePurchased", "statusLastModifiedDate"],
|
|
311
|
-
"ticket_checklist_items": ["completedDateTime"],
|
|
312
|
-
"ticket_history": ["date"],
|
|
313
|
-
"ticket_note_attachments": ["attachDate"],
|
|
314
|
-
"ticket_notes": ["createDateTime", "lastActivityDate"],
|
|
315
|
-
"tickets": ["completedDate", "createDate", "dueDateTime", "firstResponseDateTime", "firstResponseDueDateTime", "lastActivityDate", "lastCustomerNotificationDateTime", "lastCustomerVisibleActivityDateTime", "lastTrackedModificationDateTime", "resolutionPlanDateTime", "resolutionPlanDueDateTime", "resolvedDateTime", "resolvedDueDateTime"],
|
|
316
|
-
"time_entries": ["billingApprovalDateTime", "createDateTime", "dateWorked", "endDateTime", "lastModifiedDateTime", "startDateTime"],
|
|
317
|
-
"time_entry_attachments": ["attachDate"],
|
|
318
|
-
"time_off_requests": ["approvedDateTime", "createDateTime", "endTime", "lastModifiedDateTime", "requestDate", "startTime"]
|
|
319
|
-
};
|
|
320
|
-
|
|
321
|
-
// src/operations/fetchMany.ts
|
|
322
|
-
var FETCH_MANY_MAX_ITEMS = 20;
|
|
323
|
-
function validateFetchManyItems(items, cap, opName = "fetchMany", capRef = `FETCH_MANY_MAX_ITEMS = ${FETCH_MANY_MAX_ITEMS}`, validation) {
|
|
324
|
-
if (!Array.isArray(items)) {
|
|
325
|
-
throw new (0, _chunkYKEX4SK7cjs.AutotaskConfigError)(
|
|
326
|
-
`${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})`,
|
|
327
|
-
{
|
|
328
|
-
suggestedAction: 'Pass args = [[{ resource: "tickets", id: 123 }, { resource: "projects", id: 456 }]] \u2014 the items array is the single positional argument.'
|
|
329
|
-
}
|
|
330
|
-
);
|
|
331
|
-
}
|
|
332
|
-
if (items.length === 0) {
|
|
333
|
-
throw new (0, _chunkYKEX4SK7cjs.AutotaskConfigError)(`${opName}: items must not be empty (a zero-item batch is a shape error, not a no-op)`, {
|
|
334
|
-
suggestedAction: "Pass at least one { resource, id } item \u2014 or use the resource's query op for a filtered read."
|
|
335
|
-
});
|
|
336
|
-
}
|
|
337
|
-
if (items.length > cap) {
|
|
338
|
-
throw new (0, _chunkYKEX4SK7cjs.AutotaskConfigError)(
|
|
339
|
-
`${opName}: ${items.length} items over the ${cap}-item cap (${capRef}) \u2014 zero items were fetched (pre-request)`,
|
|
340
|
-
{
|
|
341
|
-
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).`
|
|
342
|
-
}
|
|
343
|
-
);
|
|
344
|
-
}
|
|
345
|
-
const problems = [];
|
|
346
|
-
for (let i = 0; i < items.length; i += 1) {
|
|
347
|
-
const it = items[i];
|
|
348
|
-
const at = `items[${i}]`;
|
|
349
|
-
if (typeof it !== "object" || it === null || Array.isArray(it)) {
|
|
350
|
-
problems.push(`${at}: must be an object { resource: string, id: number, fields?: string[] }`);
|
|
351
|
-
continue;
|
|
352
|
-
}
|
|
353
|
-
const item = it;
|
|
354
|
-
if (typeof item.resource !== "string" || item.resource.trim() === "") {
|
|
355
|
-
problems.push(`${at}.resource: required \u2014 the plan resource key (string, e.g. 'tickets'; see autotask_catalog)`);
|
|
356
|
-
continue;
|
|
357
|
-
}
|
|
358
|
-
const resourceKey = item.resource;
|
|
359
|
-
const fields = MODEL_FIELD_SETS[resourceKey];
|
|
360
|
-
if (fields === void 0) {
|
|
361
|
-
problems.push(
|
|
362
|
-
`${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`
|
|
363
|
-
);
|
|
364
|
-
continue;
|
|
365
|
-
}
|
|
366
|
-
const rel = _chunkYKEX4SK7cjs.RELATIONSHIP_MAP[resourceKey];
|
|
367
|
-
if (rel !== void 0 && rel.parentScoped) {
|
|
368
|
-
problems.push(
|
|
369
|
-
`${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.${_chunkYKEX4SK7cjs.camelKey.call(void 0, resourceKey)}.get(parentId, id))`
|
|
370
|
-
);
|
|
371
|
-
continue;
|
|
372
|
-
}
|
|
373
|
-
try {
|
|
374
|
-
_chunkYKEX4SK7cjs.parseIdentifier.call(void 0, item.id, `${at}.id`);
|
|
375
|
-
} catch (e2) {
|
|
376
|
-
if (typeof item.id === "string") {
|
|
377
|
-
problems.push(
|
|
378
|
-
`${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)`
|
|
379
|
-
);
|
|
380
|
-
} else if (typeof item.id === "number") {
|
|
381
|
-
problems.push(
|
|
382
|
-
`${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)`
|
|
383
|
-
);
|
|
384
|
-
} else {
|
|
385
|
-
problems.push(`${at}.id: required \u2014 the vendor numeric id (safe integer, or the canonical integer string for ids above 2^53)`);
|
|
386
|
-
}
|
|
387
|
-
continue;
|
|
388
|
-
}
|
|
389
|
-
if (item.fields !== void 0) {
|
|
390
|
-
if (!Array.isArray(item.fields) || item.fields.some((f) => typeof f !== "string")) {
|
|
391
|
-
problems.push(`${at}.fields: must be an array of exact vendor field names (discover them via operations.fieldCatalog)`);
|
|
392
|
-
continue;
|
|
393
|
-
}
|
|
394
|
-
if (_optionalChain([validation, 'optionalAccess', _ => _.fieldCheck]) !== false) {
|
|
395
|
-
const authoritative = _nullishCoalesce(_optionalChain([validation, 'optionalAccess', _2 => _2.fieldSetsByResource, 'optionalAccess', _3 => _3.get, 'call', _4 => _4(resourceKey)]), () => ( fields));
|
|
396
|
-
for (const f of item.fields) {
|
|
397
|
-
if (!authoritative.includes(f)) {
|
|
398
|
-
problems.push(
|
|
399
|
-
`${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)`
|
|
400
|
-
);
|
|
401
|
-
}
|
|
402
|
-
}
|
|
403
|
-
}
|
|
404
|
-
}
|
|
405
|
-
}
|
|
406
|
-
if (problems.length > 0) {
|
|
407
|
-
throw new (0, _chunkYKEX4SK7cjs.AutotaskConfigError)(
|
|
408
|
-
`${opName}: ${problems.length} problem(s) found pre-request (zero wire was issued)
|
|
409
|
-
- ` + problems.join("\n- "),
|
|
410
|
-
{ suggestedAction: "Fix every item above and call again \u2014 validation covers the whole batch up-front (one round, zero wire)." }
|
|
411
|
-
);
|
|
412
|
-
}
|
|
413
|
-
}
|
|
414
|
-
function project(value, fields) {
|
|
415
|
-
const out = {};
|
|
416
|
-
for (const f of fields) {
|
|
417
|
-
if (f in value) out[f] = value[f];
|
|
418
|
-
}
|
|
419
|
-
return out;
|
|
420
|
-
}
|
|
421
|
-
async function fetchMany(client, items, opts = {}) {
|
|
422
|
-
if (opts.maxItems !== void 0) {
|
|
423
|
-
if (!Number.isInteger(opts.maxItems) || opts.maxItems < 1) {
|
|
424
|
-
throw new (0, _chunkYKEX4SK7cjs.AutotaskConfigError)(`fetchMany: maxItems must be an integer >= 1 (got ${String(opts.maxItems)})`);
|
|
425
|
-
}
|
|
426
|
-
}
|
|
427
|
-
if (opts.liveFields !== void 0 && typeof opts.liveFields !== "boolean") {
|
|
428
|
-
throw new (0, _chunkYKEX4SK7cjs.AutotaskConfigError)(`fetchMany: liveFields must be a boolean (got ${typeof opts.liveFields})`);
|
|
429
|
-
}
|
|
430
|
-
const cap = Math.min(FETCH_MANY_MAX_ITEMS, _nullishCoalesce(opts.maxItems, () => ( FETCH_MANY_MAX_ITEMS)));
|
|
431
|
-
if (opts.liveFields === true) {
|
|
432
|
-
validateFetchManyItems(items, cap, void 0, void 0, { fieldCheck: false });
|
|
433
|
-
const liveFieldSets = /* @__PURE__ */ new Map();
|
|
434
|
-
for (const item of items) {
|
|
435
|
-
const key = item.resource;
|
|
436
|
-
if (liveFieldSets.has(key)) continue;
|
|
437
|
-
const holder = client[_chunkYKEX4SK7cjs.camelKey.call(void 0, key)];
|
|
438
|
-
if (holder === void 0) {
|
|
439
|
-
throw new (0, _chunkYKEX4SK7cjs.AutotaskConfigError)(`fetchMany: the client exposes no accessor for resource "${key}"`, {
|
|
440
|
-
suggestedAction: "Rebuild the client from the SDK build that ships this registry (the resource set is pinned by the plan)."
|
|
441
|
-
});
|
|
442
|
-
}
|
|
443
|
-
try {
|
|
444
|
-
const rows = await holder.getFieldInfo();
|
|
445
|
-
const names = [];
|
|
446
|
-
for (const row of rows) {
|
|
447
|
-
if (typeof row.name === "string") names.push(row.name);
|
|
448
|
-
}
|
|
449
|
-
liveFieldSets.set(key, names.length > 0 ? names : null);
|
|
450
|
-
} catch (err) {
|
|
451
|
-
if (!_chunkYKEX4SK7cjs.isAutotaskError.call(void 0, err) || err.code === "ABORTED") throw err;
|
|
452
|
-
liveFieldSets.set(key, null);
|
|
453
|
-
}
|
|
454
|
-
}
|
|
455
|
-
validateFetchManyItems(items, cap, void 0, void 0, { fieldSetsByResource: liveFieldSets });
|
|
456
|
-
} else {
|
|
457
|
-
validateFetchManyItems(items, cap);
|
|
458
|
-
}
|
|
459
|
-
const results = [];
|
|
460
|
-
for (const item of items) {
|
|
461
|
-
const key = item.resource;
|
|
462
|
-
const id = _chunkYKEX4SK7cjs.parseIdentifier.call(void 0, item.id, `items[${results.length}].id`);
|
|
463
|
-
const holder = client[_chunkYKEX4SK7cjs.camelKey.call(void 0, key)];
|
|
464
|
-
if (holder === void 0) {
|
|
465
|
-
throw new (0, _chunkYKEX4SK7cjs.AutotaskConfigError)(`fetchMany: the client exposes no accessor for resource "${key}"`, {
|
|
466
|
-
suggestedAction: "Rebuild the client from the SDK build that ships this registry (the resource set is pinned by the plan)."
|
|
467
|
-
});
|
|
468
|
-
}
|
|
469
|
-
try {
|
|
470
|
-
const value = await holder.get(id);
|
|
471
|
-
results.push({ resource: key, id, found: true, value: item.fields !== void 0 ? project(value, item.fields) : value });
|
|
472
|
-
} catch (err) {
|
|
473
|
-
if (err instanceof _chunkYKEX4SK7cjs.NotFoundError) {
|
|
474
|
-
results.push({ resource: key, id, found: false, value: null, error: { code: "NOT_FOUND", message: err.message } });
|
|
475
|
-
} else if (_chunkYKEX4SK7cjs.isAutotaskError.call(void 0, err) && err.code !== "ABORTED") {
|
|
476
|
-
const e = { code: err.code, message: err.message };
|
|
477
|
-
if (err.httpStatus !== void 0) e.httpStatus = err.httpStatus;
|
|
478
|
-
results.push({ resource: key, id, found: false, value: null, error: e });
|
|
479
|
-
} else {
|
|
480
|
-
throw err;
|
|
481
|
-
}
|
|
482
|
-
}
|
|
483
|
-
}
|
|
484
|
-
const ok = results.filter((r) => r.found).length;
|
|
485
|
-
return { results, ok, failed: results.length - ok };
|
|
486
|
-
}
|
|
487
|
-
|
|
488
147
|
// src/operations/aggregate.ts
|
|
489
148
|
var AGGREGATE_TOP_MAX = 100;
|
|
490
149
|
var AGGREGATE_DEFAULT_TOP = 25;
|
|
491
|
-
var AGGREGATE_DEFAULT_LIMIT =
|
|
150
|
+
var AGGREGATE_DEFAULT_LIMIT = _chunk5N6DYKXOcjs.BOUNDED_QUERY_MAX_LIMIT;
|
|
492
151
|
var AGGREGATE_DATE_BUCKETS = ["month", "week", "year"];
|
|
493
152
|
var DATE_ONLY_RE = /^(\d{4})-(\d{2})-(\d{2})$/;
|
|
494
153
|
var DATETIME_RE = /^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})(\.\d{1,9})?(Z|[+-]\d{2}:?\d{2})?$/;
|
|
@@ -545,7 +204,7 @@ function dateBucketLabel(value, bucket) {
|
|
|
545
204
|
}
|
|
546
205
|
var QUERY_RESOURCE_KEYS = (() => {
|
|
547
206
|
const s = /* @__PURE__ */ new Set();
|
|
548
|
-
for (const rec of
|
|
207
|
+
for (const rec of _chunkJKZVCFRYcjs.CAPABILITIES) if (rec.operation === "query") s.add(rec.resource);
|
|
549
208
|
return s;
|
|
550
209
|
})();
|
|
551
210
|
var AGGREGATE_OPT_KEYS = ["groupBy", "sum", "top", "limit"];
|
|
@@ -580,14 +239,14 @@ function validateAggregate(operation, filter, opts) {
|
|
|
580
239
|
conditions = [];
|
|
581
240
|
} else {
|
|
582
241
|
try {
|
|
583
|
-
conditions =
|
|
242
|
+
conditions = _chunk5N6DYKXOcjs.buildFilter.call(void 0, conds).filter;
|
|
584
243
|
} catch (err) {
|
|
585
|
-
problems.push(err instanceof
|
|
244
|
+
problems.push(err instanceof _chunk5N6DYKXOcjs.AutotaskConfigError ? err.message : `filter must be the query-bag filter (13 operators; caps 500 OR-conditions / 1 UDF / 8000 chars); ${String(err)}`);
|
|
586
245
|
}
|
|
587
246
|
}
|
|
588
247
|
}
|
|
589
248
|
if (opts !== void 0 && (typeof opts !== "object" || opts === null || Array.isArray(opts))) {
|
|
590
|
-
throw new (0,
|
|
249
|
+
throw new (0, _chunk5N6DYKXOcjs.AutotaskConfigError)(
|
|
591
250
|
`aggregate: opts must be the options object (got ${Array.isArray(opts) ? "an array" : typeof opts})`,
|
|
592
251
|
{ operation: "operations.aggregate" }
|
|
593
252
|
);
|
|
@@ -597,8 +256,8 @@ function validateAggregate(operation, filter, opts) {
|
|
|
597
256
|
problems.push(`unknown opts key "${key}" \u2014 the bag is closed: ${AGGREGATE_OPT_KEYS.join(", ")}`);
|
|
598
257
|
}
|
|
599
258
|
}
|
|
600
|
-
const fieldSets = resourceKey !== void 0 ? MODEL_FIELD_SETS[resourceKey] : void 0;
|
|
601
|
-
const dateSets = resourceKey !== void 0 ? MODEL_DATE_FIELDS[resourceKey] : void 0;
|
|
259
|
+
const fieldSets = resourceKey !== void 0 ? _chunk5N6DYKXOcjs.MODEL_FIELD_SETS[resourceKey] : void 0;
|
|
260
|
+
const dateSets = resourceKey !== void 0 ? _chunk5N6DYKXOcjs.MODEL_DATE_FIELDS[resourceKey] : void 0;
|
|
602
261
|
const checkFields = (name, fields) => {
|
|
603
262
|
if (fields === void 0) return [];
|
|
604
263
|
if (!Array.isArray(fields) || fields.length === 0 || fields.some((f) => typeof f !== "string" || f.trim() === "")) {
|
|
@@ -662,11 +321,11 @@ function validateAggregate(operation, filter, opts) {
|
|
|
662
321
|
if (!Number.isInteger(opts.limit)) {
|
|
663
322
|
problems.push(`limit must be an integer (got ${String(opts.limit)})`);
|
|
664
323
|
} else {
|
|
665
|
-
limit = Math.min(Math.max(opts.limit, 1),
|
|
324
|
+
limit = Math.min(Math.max(opts.limit, 1), _chunk5N6DYKXOcjs.BOUNDED_QUERY_MAX_LIMIT);
|
|
666
325
|
}
|
|
667
326
|
}
|
|
668
327
|
if (problems.length > 0) {
|
|
669
|
-
throw new (0,
|
|
328
|
+
throw new (0, _chunk5N6DYKXOcjs.AutotaskConfigError)(
|
|
670
329
|
`aggregate: ${problems.length} problem(s) found pre-request (zero wire was issued)
|
|
671
330
|
- ` + problems.join("\n- "),
|
|
672
331
|
{ operation: "operations.aggregate" }
|
|
@@ -676,9 +335,9 @@ function validateAggregate(operation, filter, opts) {
|
|
|
676
335
|
}
|
|
677
336
|
async function aggregate(client, operation, filter, opts = {}) {
|
|
678
337
|
const v = validateAggregate(operation, filter, opts);
|
|
679
|
-
const holder = client[
|
|
338
|
+
const holder = client[_chunk5N6DYKXOcjs.camelKey.call(void 0, v.resourceKey)];
|
|
680
339
|
if (holder === void 0) {
|
|
681
|
-
throw new (0,
|
|
340
|
+
throw new (0, _chunk5N6DYKXOcjs.AutotaskConfigError)(`aggregate: the client exposes no accessor for resource "${v.resourceKey}"`, {
|
|
682
341
|
operation: "operations.aggregate",
|
|
683
342
|
suggestedAction: "Rebuild the client from the SDK build that ships this registry (the resource set is pinned by the plan)."
|
|
684
343
|
});
|
|
@@ -729,148 +388,24 @@ async function aggregate(client, operation, filter, opts = {}) {
|
|
|
729
388
|
return result;
|
|
730
389
|
}
|
|
731
390
|
|
|
732
|
-
// src/operations/fetchByIds.ts
|
|
733
|
-
var FETCH_BY_IDS_MAX_ITEMS = 500;
|
|
734
|
-
var FETCH_BY_IDS_CHUNK_SIZE = 250;
|
|
735
|
-
function project2(value, fields) {
|
|
736
|
-
const out = {};
|
|
737
|
-
for (const f of fields) {
|
|
738
|
-
if (f in value) out[f] = value[f];
|
|
739
|
-
}
|
|
740
|
-
return out;
|
|
741
|
-
}
|
|
742
|
-
function resourcePathOf(key, holder) {
|
|
743
|
-
const path = _optionalChain([holder, 'optionalAccess', _5 => _5.resourcePath]);
|
|
744
|
-
if (typeof path !== "string" || path === "") {
|
|
745
|
-
throw new (0, _chunkYKEX4SK7cjs.AutotaskConfigError)(`fetchByIds: the client exposes no ${key} resource path (registry drift)`, {
|
|
746
|
-
suggestedAction: "Rebuild the client from the SDK build that ships this registry (the resource set is pinned by the plan)."
|
|
747
|
-
});
|
|
748
|
-
}
|
|
749
|
-
return path;
|
|
750
|
-
}
|
|
751
|
-
async function fetchByIds(client, items, opts = {}) {
|
|
752
|
-
if (opts.maxItems !== void 0) {
|
|
753
|
-
if (!Number.isInteger(opts.maxItems) || opts.maxItems < 1) {
|
|
754
|
-
throw new (0, _chunkYKEX4SK7cjs.AutotaskConfigError)(`fetchByIds: maxItems must be an integer >= 1 (got ${String(opts.maxItems)})`);
|
|
755
|
-
}
|
|
756
|
-
}
|
|
757
|
-
const cap = Math.min(FETCH_BY_IDS_MAX_ITEMS, _nullishCoalesce(opts.maxItems, () => ( FETCH_BY_IDS_MAX_ITEMS)));
|
|
758
|
-
validateFetchManyItems(items, cap, "fetchByIds", `FETCH_BY_IDS_MAX_ITEMS = ${FETCH_BY_IDS_MAX_ITEMS}`);
|
|
759
|
-
const groups = /* @__PURE__ */ new Map();
|
|
760
|
-
const canonical = [];
|
|
761
|
-
for (let i = 0; i < items.length; i += 1) {
|
|
762
|
-
const item = items[i];
|
|
763
|
-
const id = _chunkYKEX4SK7cjs.parseIdentifier.call(void 0, item.id, `items[${i}].id`);
|
|
764
|
-
canonical[i] = id;
|
|
765
|
-
const g = _nullishCoalesce(groups.get(item.resource), () => ( { indices: [], fields: /* @__PURE__ */ new Set(), anyFields: false }));
|
|
766
|
-
g.indices.push(i);
|
|
767
|
-
if (item.fields !== void 0) {
|
|
768
|
-
g.anyFields = true;
|
|
769
|
-
for (const f of item.fields) g.fields.add(f);
|
|
770
|
-
}
|
|
771
|
-
groups.set(item.resource, g);
|
|
772
|
-
}
|
|
773
|
-
const byKey = /* @__PURE__ */ new Map();
|
|
774
|
-
for (const [key, group] of groups) {
|
|
775
|
-
const holder = client[_chunkYKEX4SK7cjs.camelKey.call(void 0, key)];
|
|
776
|
-
if (holder === void 0) {
|
|
777
|
-
throw new (0, _chunkYKEX4SK7cjs.AutotaskConfigError)(`fetchByIds: the client exposes no accessor for resource "${key}"`, {
|
|
778
|
-
suggestedAction: "Rebuild the client from the SDK build that ships this registry (the resource set is pinned by the plan)."
|
|
779
|
-
});
|
|
780
|
-
}
|
|
781
|
-
const resourcePath = resourcePathOf(key, holder);
|
|
782
|
-
const unique = [];
|
|
783
|
-
const seen = /* @__PURE__ */ new Set();
|
|
784
|
-
for (const i of group.indices) {
|
|
785
|
-
const k = String(canonical[i]);
|
|
786
|
-
if (!seen.has(k)) {
|
|
787
|
-
seen.add(k);
|
|
788
|
-
unique.push(canonical[i]);
|
|
789
|
-
}
|
|
790
|
-
}
|
|
791
|
-
const includeFields = group.anyFields && group.indices.every((i) => items[i].fields !== void 0) ? [...group.fields] : void 0;
|
|
792
|
-
const kOf = (id) => `${key}:${String(id)}`;
|
|
793
|
-
for (let c = 0; c < unique.length; c += FETCH_BY_IDS_CHUNK_SIZE) {
|
|
794
|
-
const chunk = unique.slice(c, c + FETCH_BY_IDS_CHUNK_SIZE);
|
|
795
|
-
const chunkKeys = new Set(chunk.map((id) => String(id)));
|
|
796
|
-
try {
|
|
797
|
-
const req = _chunkYKEX4SK7cjs.buildQueryRequest.call(void 0, client.http.baseUrl, resourcePath, {
|
|
798
|
-
filter: [{ field: "id", op: "in", value: chunk }],
|
|
799
|
-
maxRecords: FETCH_BY_IDS_CHUNK_SIZE,
|
|
800
|
-
includeFields
|
|
801
|
-
});
|
|
802
|
-
const res = await client.http.request({ ...req, operation: `${key}.fetchByIds` });
|
|
803
|
-
const { items: rows } = _chunkYKEX4SK7cjs.unwrapItems.call(void 0, res, `${key}.fetchByIds`);
|
|
804
|
-
for (const row of rows) {
|
|
805
|
-
const k = String(row.id);
|
|
806
|
-
if (!chunkKeys.has(k)) continue;
|
|
807
|
-
const q = kOf(k);
|
|
808
|
-
if (!byKey.has(q)) byKey.set(q, { found: true, value: row });
|
|
809
|
-
}
|
|
810
|
-
} catch (err) {
|
|
811
|
-
if (_chunkYKEX4SK7cjs.isAutotaskError.call(void 0, err) && err.code !== "ABORTED") {
|
|
812
|
-
const e = { code: err.code, message: err.message };
|
|
813
|
-
if (err.httpStatus !== void 0) e.httpStatus = err.httpStatus;
|
|
814
|
-
for (const u of chunk) {
|
|
815
|
-
const q = kOf(u);
|
|
816
|
-
if (!byKey.has(q)) byKey.set(q, { found: false, value: null, error: e });
|
|
817
|
-
}
|
|
818
|
-
continue;
|
|
819
|
-
}
|
|
820
|
-
throw err;
|
|
821
|
-
}
|
|
822
|
-
}
|
|
823
|
-
for (const id of unique) {
|
|
824
|
-
const k = kOf(id);
|
|
825
|
-
if (byKey.has(k)) continue;
|
|
826
|
-
try {
|
|
827
|
-
const value = await holder.get(id);
|
|
828
|
-
byKey.set(k, { found: true, value });
|
|
829
|
-
} catch (err) {
|
|
830
|
-
if (err instanceof _chunkYKEX4SK7cjs.NotFoundError) {
|
|
831
|
-
byKey.set(k, { found: false, value: null, error: { code: "NOT_FOUND", message: err.message } });
|
|
832
|
-
} else if (_chunkYKEX4SK7cjs.isAutotaskError.call(void 0, err) && err.code !== "ABORTED") {
|
|
833
|
-
const e = { code: err.code, message: err.message };
|
|
834
|
-
if (err.httpStatus !== void 0) e.httpStatus = err.httpStatus;
|
|
835
|
-
byKey.set(k, { found: false, value: null, error: e });
|
|
836
|
-
} else {
|
|
837
|
-
throw err;
|
|
838
|
-
}
|
|
839
|
-
}
|
|
840
|
-
}
|
|
841
|
-
}
|
|
842
|
-
const results = [];
|
|
843
|
-
for (let i = 0; i < items.length; i += 1) {
|
|
844
|
-
const item = items[i];
|
|
845
|
-
const id = canonical[i];
|
|
846
|
-
const out = byKey.get(`${item.resource}:${String(id)}`);
|
|
847
|
-
const value = out.found ? item.fields !== void 0 ? project2(out.value, item.fields) : out.value : null;
|
|
848
|
-
results.push(
|
|
849
|
-
out.found ? { resource: item.resource, id, found: true, value } : { resource: item.resource, id, found: false, value: null, error: out.error }
|
|
850
|
-
);
|
|
851
|
-
}
|
|
852
|
-
const ok = results.filter((r) => r.found).length;
|
|
853
|
-
return { results, ok, failed: results.length - ok };
|
|
854
|
-
}
|
|
855
|
-
|
|
856
391
|
// src/operations/relationshipMap.ts
|
|
857
392
|
async function relationshipMap(client, resourceKey) {
|
|
858
393
|
void client;
|
|
859
394
|
if (typeof resourceKey !== "string" || resourceKey.trim() === "") {
|
|
860
|
-
throw new (0,
|
|
395
|
+
throw new (0, _chunk5N6DYKXOcjs.AutotaskConfigError)(
|
|
861
396
|
`relationshipMap: resourceKey must be a non-empty plan resource key string (e.g. 'tickets'; got ${typeof resourceKey === "string" ? "a blank string" : typeof resourceKey})`,
|
|
862
397
|
{ suggestedAction: "Pass the exact plan resource key (snake_case) from autotask_catalog \u2014 e.g. tickets, companies, configuration_items, ticket_notes." }
|
|
863
398
|
);
|
|
864
399
|
}
|
|
865
400
|
const key = resourceKey.trim();
|
|
866
|
-
const entry =
|
|
401
|
+
const entry = _chunk5N6DYKXOcjs.RELATIONSHIP_MAP[key];
|
|
867
402
|
if (entry === void 0) {
|
|
868
|
-
throw new (0,
|
|
869
|
-
`relationshipMap: unknown resource "${key}" \u2014 the plan has ${Object.keys(
|
|
403
|
+
throw new (0, _chunk5N6DYKXOcjs.AutotaskError)(
|
|
404
|
+
`relationshipMap: unknown resource "${key}" \u2014 the plan has ${Object.keys(_chunk5N6DYKXOcjs.RELATIONSHIP_MAP).length} resources`,
|
|
870
405
|
{
|
|
871
406
|
code: "RESOURCE_UNKNOWN",
|
|
872
407
|
category: "validation",
|
|
873
|
-
suggestedAction: `Pass the exact plan resource key (snake_case) from autotask_catalog (e.g. tickets, companies, configuration_items). Zone facts served are ${
|
|
408
|
+
suggestedAction: `Pass the exact plan resource key (snake_case) from autotask_catalog (e.g. tickets, companies, configuration_items). Zone facts served are ${_chunk5N6DYKXOcjs.RELATIONSHIP_ZONE.label} (${_chunk5N6DYKXOcjs.RELATIONSHIP_ZONE.zone})-verified.`
|
|
874
409
|
}
|
|
875
410
|
);
|
|
876
411
|
}
|
|
@@ -887,24 +422,24 @@ var BLIND_SURFACE_KINDS = [
|
|
|
887
422
|
async function blindSurfaces(client, opts) {
|
|
888
423
|
void client;
|
|
889
424
|
if (opts !== void 0 && (typeof opts !== "object" || opts === null || Array.isArray(opts))) {
|
|
890
|
-
throw new (0,
|
|
425
|
+
throw new (0, _chunk5N6DYKXOcjs.AutotaskConfigError)("blindSurfaces: opts must be an object { resource?: string, kind?: BlindSurfaceKind }");
|
|
891
426
|
}
|
|
892
|
-
const inv =
|
|
427
|
+
const inv = _chunk5N6DYKXOcjs.BLIND_SURFACE_INVENTORY;
|
|
893
428
|
if (inv === null) {
|
|
894
|
-
throw new (0,
|
|
429
|
+
throw new (0, _chunk5N6DYKXOcjs.AutotaskConfigError)("blindSurfaces: the reachability inventory is absent from the generated artifact \u2014 re-run the build");
|
|
895
430
|
}
|
|
896
431
|
let surfaces = inv.surfaces;
|
|
897
|
-
if (_optionalChain([opts, 'optionalAccess',
|
|
432
|
+
if (_optionalChain([opts, 'optionalAccess', _ => _.resource]) !== void 0) {
|
|
898
433
|
const key = typeof opts.resource === "string" ? opts.resource.trim() : "";
|
|
899
434
|
if (key === "") {
|
|
900
|
-
throw new (0,
|
|
435
|
+
throw new (0, _chunk5N6DYKXOcjs.AutotaskConfigError)(
|
|
901
436
|
"blindSurfaces: opts.resource must be a non-empty plan resource key string (e.g. 'tickets')",
|
|
902
437
|
{ suggestedAction: "Pass the exact plan resource key (snake_case) from autotask_catalog \u2014 e.g. tickets, companies, configuration_items." }
|
|
903
438
|
);
|
|
904
439
|
}
|
|
905
440
|
if (!inv.surfaces.some((row) => row.resource === key)) {
|
|
906
|
-
throw new (0,
|
|
907
|
-
`blindSurfaces: unknown resource "${key}" \u2014 the plan has ${Object.keys(
|
|
441
|
+
throw new (0, _chunk5N6DYKXOcjs.AutotaskError)(
|
|
442
|
+
`blindSurfaces: unknown resource "${key}" \u2014 the plan has ${Object.keys(_chunk5N6DYKXOcjs.RELATIONSHIP_MAP).length} resources`,
|
|
908
443
|
{
|
|
909
444
|
code: "RESOURCE_UNKNOWN",
|
|
910
445
|
category: "validation",
|
|
@@ -914,9 +449,9 @@ async function blindSurfaces(client, opts) {
|
|
|
914
449
|
}
|
|
915
450
|
surfaces = surfaces.filter((row) => row.resource === key);
|
|
916
451
|
}
|
|
917
|
-
if (_optionalChain([opts, 'optionalAccess',
|
|
452
|
+
if (_optionalChain([opts, 'optionalAccess', _2 => _2.kind]) !== void 0) {
|
|
918
453
|
if (!BLIND_SURFACE_KINDS.includes(opts.kind)) {
|
|
919
|
-
throw new (0,
|
|
454
|
+
throw new (0, _chunk5N6DYKXOcjs.AutotaskConfigError)(
|
|
920
455
|
`blindSurfaces: unknown kind "${String(opts.kind)}" \u2014 the valid classes are: ${BLIND_SURFACE_KINDS.join(", ")}`,
|
|
921
456
|
{ suggestedAction: `Filter with one of: ${BLIND_SURFACE_KINDS.join(", ")} (or omit kind for the full 116-surface inventory).` }
|
|
922
457
|
);
|
|
@@ -929,51 +464,51 @@ async function blindSurfaces(client, opts) {
|
|
|
929
464
|
// src/operations/probeReachability.ts
|
|
930
465
|
async function probeReachability(client, opts) {
|
|
931
466
|
if (opts !== void 0 && (typeof opts !== "object" || opts === null || Array.isArray(opts))) {
|
|
932
|
-
throw new (0,
|
|
467
|
+
throw new (0, _chunk5N6DYKXOcjs.AutotaskConfigError)("probeReachability: opts must be an object { resources?: string[], limit?: 1|2, maxWireCalls?: number, confirmProbe?: true }");
|
|
933
468
|
}
|
|
934
|
-
const defs =
|
|
935
|
-
if (_optionalChain([opts, 'optionalAccess',
|
|
936
|
-
throw new (0,
|
|
469
|
+
const defs = _chunk5N6DYKXOcjs.REACHABILITY_PROBE_DEFAULTS;
|
|
470
|
+
if (_optionalChain([opts, 'optionalAccess', _3 => _3.confirmProbe]) !== true) {
|
|
471
|
+
throw new (0, _chunk5N6DYKXOcjs.AutotaskConfigError)(
|
|
937
472
|
"probeReachability: confirmProbe: true is required \u2014 the op deliberately fans out read wire across the tenant (one bounded query per surface); pass confirmProbe: true to run it",
|
|
938
473
|
{ suggestedAction: `Re-call with { confirmProbe: true } (plus resources/limit/maxWireCalls as needed). For the ZERO-wire pinned inventory use operations.blindSurfaces.` }
|
|
939
474
|
);
|
|
940
475
|
}
|
|
941
|
-
const limit = _nullishCoalesce(_optionalChain([opts, 'optionalAccess',
|
|
476
|
+
const limit = _nullishCoalesce(_optionalChain([opts, 'optionalAccess', _4 => _4.limit]), () => ( defs.limitDefault));
|
|
942
477
|
if (!Number.isInteger(limit) || limit < 1 || limit > defs.limitMax) {
|
|
943
|
-
throw new (0,
|
|
478
|
+
throw new (0, _chunk5N6DYKXOcjs.AutotaskConfigError)(
|
|
944
479
|
`probeReachability: limit must be an integer 1..${defs.limitMax} (got ${String(limit)}) \u2014 the rows-per-surface bound for the discovery read`
|
|
945
480
|
);
|
|
946
481
|
}
|
|
947
|
-
const cap = _nullishCoalesce(_optionalChain([opts, 'optionalAccess',
|
|
482
|
+
const cap = _nullishCoalesce(_optionalChain([opts, 'optionalAccess', _5 => _5.maxWireCalls]), () => ( defs.defaultCap));
|
|
948
483
|
if (!Number.isInteger(cap) || cap < 1) {
|
|
949
|
-
throw new (0,
|
|
484
|
+
throw new (0, _chunk5N6DYKXOcjs.AutotaskConfigError)(`probeReachability: maxWireCalls must be a positive integer (got ${String(cap)})`);
|
|
950
485
|
}
|
|
951
486
|
if (cap > defs.hardCap) {
|
|
952
|
-
throw new (0,
|
|
487
|
+
throw new (0, _chunk5N6DYKXOcjs.AutotaskConfigError)(
|
|
953
488
|
`probeReachability: maxWireCalls ${cap} exceeds the hard wire cap of ${defs.hardCap} \u2014 the sweep is refused above it (never capped silently)`,
|
|
954
489
|
{ suggestedAction: `Pass maxWireCalls \u2264 ${defs.hardCap} and a resources set no larger than the cap (the refused set is never truncated).` }
|
|
955
490
|
);
|
|
956
491
|
}
|
|
957
|
-
const inv =
|
|
492
|
+
const inv = _chunk5N6DYKXOcjs.BLIND_SURFACE_INVENTORY;
|
|
958
493
|
if (inv === null) {
|
|
959
|
-
throw new (0,
|
|
494
|
+
throw new (0, _chunk5N6DYKXOcjs.AutotaskConfigError)("probeReachability: the reachability inventory is absent from the generated artifact \u2014 re-run the build");
|
|
960
495
|
}
|
|
961
496
|
let targets;
|
|
962
|
-
if (_optionalChain([opts, 'optionalAccess',
|
|
497
|
+
if (_optionalChain([opts, 'optionalAccess', _6 => _6.resources]) === void 0) {
|
|
963
498
|
targets = [...defs.defaultTargets];
|
|
964
499
|
} else {
|
|
965
500
|
if (!Array.isArray(opts.resources) || opts.resources.length === 0) {
|
|
966
|
-
throw new (0,
|
|
501
|
+
throw new (0, _chunk5N6DYKXOcjs.AutotaskConfigError)("probeReachability: opts.resources must be a non-empty string[] of plan resource keys (or omit it for the default non-data-full set)");
|
|
967
502
|
}
|
|
968
503
|
const seen = /* @__PURE__ */ new Set();
|
|
969
504
|
for (const r of opts.resources) {
|
|
970
505
|
if (typeof r !== "string" || r.trim() === "") {
|
|
971
|
-
throw new (0,
|
|
506
|
+
throw new (0, _chunk5N6DYKXOcjs.AutotaskConfigError)(`probeReachability: opts.resources must contain non-empty plan resource key strings (got ${typeof r === "string" && r.trim() === "" ? "a blank string" : typeof r})`);
|
|
972
507
|
}
|
|
973
508
|
const key = r.trim();
|
|
974
509
|
if (!inv.surfaces.some((row) => row.resource === key)) {
|
|
975
510
|
const surfaceCount = new Set(inv.surfaces.map((s) => s.resource)).size;
|
|
976
|
-
throw new (0,
|
|
511
|
+
throw new (0, _chunk5N6DYKXOcjs.AutotaskError)(
|
|
977
512
|
`probeReachability: unknown resource "${key}" \u2014 the inventory has ${surfaceCount} surfaces`,
|
|
978
513
|
{
|
|
979
514
|
code: "RESOURCE_UNKNOWN",
|
|
@@ -987,7 +522,7 @@ async function probeReachability(client, opts) {
|
|
|
987
522
|
targets = [...seen];
|
|
988
523
|
}
|
|
989
524
|
if (targets.length > cap) {
|
|
990
|
-
throw new (0,
|
|
525
|
+
throw new (0, _chunk5N6DYKXOcjs.AutotaskConfigError)(
|
|
991
526
|
`probeReachability: ${targets.length} requested surface(s) exceed the wire cap of ${cap} \u2014 the sweep is refused above its cap (never truncated)`,
|
|
992
527
|
{ suggestedAction: `Raise maxWireCalls (\u2264 ${defs.hardCap}) to cover the set, or pass a smaller resources list.` }
|
|
993
528
|
);
|
|
@@ -997,8 +532,8 @@ async function probeReachability(client, opts) {
|
|
|
997
532
|
for (const resource of targets.sort()) {
|
|
998
533
|
const row = byResource.get(resource);
|
|
999
534
|
if (row === void 0) continue;
|
|
1000
|
-
const holder = client[
|
|
1001
|
-
const probeFn = _optionalChain([holder, 'optionalAccess',
|
|
535
|
+
const holder = client[_chunk5N6DYKXOcjs.camelKey.call(void 0, resource)];
|
|
536
|
+
const probeFn = _optionalChain([holder, 'optionalAccess', _7 => _7.queryBounded]);
|
|
1002
537
|
if (typeof probeFn !== "function") {
|
|
1003
538
|
results.push({
|
|
1004
539
|
...row,
|
|
@@ -1009,14 +544,14 @@ async function probeReachability(client, opts) {
|
|
|
1009
544
|
}
|
|
1010
545
|
try {
|
|
1011
546
|
const res = await probeFn.call(holder, { limit });
|
|
1012
|
-
const items = Array.isArray(_optionalChain([res, 'optionalAccess',
|
|
547
|
+
const items = Array.isArray(_optionalChain([res, 'optionalAccess', _8 => _8.items])) ? res.items : [];
|
|
1013
548
|
results.push({
|
|
1014
549
|
...row,
|
|
1015
550
|
unfilteredRows: items.length,
|
|
1016
551
|
probe: { ok: true, wire: 1, error: null }
|
|
1017
552
|
});
|
|
1018
553
|
} catch (err) {
|
|
1019
|
-
const code =
|
|
554
|
+
const code = _chunk5N6DYKXOcjs.isAutotaskError.call(void 0, err) ? err.code : "NETWORK_ERROR";
|
|
1020
555
|
const message = err instanceof Error ? err.message : String(err);
|
|
1021
556
|
results.push({
|
|
1022
557
|
...row,
|
|
@@ -1044,24 +579,24 @@ var CREATE_BLOCKER_KINDS = [
|
|
|
1044
579
|
async function createGuidance(client, opts) {
|
|
1045
580
|
void client;
|
|
1046
581
|
if (opts !== void 0 && (typeof opts !== "object" || opts === null || Array.isArray(opts))) {
|
|
1047
|
-
throw new (0,
|
|
582
|
+
throw new (0, _chunk5N6DYKXOcjs.AutotaskConfigError)(
|
|
1048
583
|
"createGuidance: opts must be an object { resources?: string[], kind?: CreateBlockerKind }"
|
|
1049
584
|
);
|
|
1050
585
|
}
|
|
1051
|
-
let rows =
|
|
1052
|
-
if (_optionalChain([opts, 'optionalAccess',
|
|
586
|
+
let rows = _chunk5N6DYKXOcjs.CREATE_GUIDANCE.rows;
|
|
587
|
+
if (_optionalChain([opts, 'optionalAccess', _9 => _9.resources]) !== void 0) {
|
|
1053
588
|
if (!Array.isArray(opts.resources) || opts.resources.length === 0) {
|
|
1054
|
-
throw new (0,
|
|
589
|
+
throw new (0, _chunk5N6DYKXOcjs.AutotaskConfigError)("createGuidance: opts.resources must be a non-empty string[] of plan resource keys");
|
|
1055
590
|
}
|
|
1056
591
|
const wanted = /* @__PURE__ */ new Set();
|
|
1057
592
|
for (const r of opts.resources) {
|
|
1058
593
|
if (typeof r !== "string" || r.trim() === "") {
|
|
1059
|
-
throw new (0,
|
|
594
|
+
throw new (0, _chunk5N6DYKXOcjs.AutotaskConfigError)("createGuidance: opts.resources must contain non-empty plan resource key strings");
|
|
1060
595
|
}
|
|
1061
596
|
const key = r.trim();
|
|
1062
|
-
if (!
|
|
1063
|
-
throw new (0,
|
|
1064
|
-
`createGuidance: unknown resource "${key}" \u2014 the catalog has ${
|
|
597
|
+
if (!_chunk5N6DYKXOcjs.CREATE_GUIDANCE.rows.some((row) => row.resource === key)) {
|
|
598
|
+
throw new (0, _chunk5N6DYKXOcjs.AutotaskError)(
|
|
599
|
+
`createGuidance: unknown resource "${key}" \u2014 the catalog has ${_chunk5N6DYKXOcjs.CREATE_GUIDANCE.rows.length} create entities`,
|
|
1065
600
|
{
|
|
1066
601
|
code: "RESOURCE_UNKNOWN",
|
|
1067
602
|
category: "validation",
|
|
@@ -1073,20 +608,20 @@ async function createGuidance(client, opts) {
|
|
|
1073
608
|
}
|
|
1074
609
|
rows = rows.filter((row) => wanted.has(row.resource));
|
|
1075
610
|
}
|
|
1076
|
-
if (_optionalChain([opts, 'optionalAccess',
|
|
611
|
+
if (_optionalChain([opts, 'optionalAccess', _10 => _10.kind]) !== void 0) {
|
|
1077
612
|
if (!CREATE_BLOCKER_KINDS.includes(opts.kind)) {
|
|
1078
|
-
throw new (0,
|
|
613
|
+
throw new (0, _chunk5N6DYKXOcjs.AutotaskConfigError)(
|
|
1079
614
|
`createGuidance: unknown kind "${String(opts.kind)}" \u2014 the valid kinds are: ${CREATE_BLOCKER_KINDS.join(", ")}`
|
|
1080
615
|
);
|
|
1081
616
|
}
|
|
1082
|
-
rows = rows.filter((row) => _optionalChain([row, 'access',
|
|
617
|
+
rows = rows.filter((row) => _optionalChain([row, 'access', _11 => _11.blocker, 'optionalAccess', _12 => _12.kind]) === opts.kind);
|
|
1083
618
|
}
|
|
1084
619
|
return {
|
|
1085
|
-
zone:
|
|
1086
|
-
label:
|
|
1087
|
-
verifiedAt:
|
|
620
|
+
zone: _chunk5N6DYKXOcjs.CREATE_GUIDANCE.zone,
|
|
621
|
+
label: _chunk5N6DYKXOcjs.CREATE_GUIDANCE.label,
|
|
622
|
+
verifiedAt: _chunk5N6DYKXOcjs.CREATE_GUIDANCE.verifiedAt,
|
|
1088
623
|
rows,
|
|
1089
|
-
counts:
|
|
624
|
+
counts: _chunk5N6DYKXOcjs.CREATE_GUIDANCE.counts
|
|
1090
625
|
};
|
|
1091
626
|
}
|
|
1092
627
|
|
|
@@ -1095,7 +630,7 @@ var RECOVERY_CONFIRM = "operations.recovery";
|
|
|
1095
630
|
var RECOVERY_DEFAULT_LIMIT = 25;
|
|
1096
631
|
var RECOVERY_MAX_LIMIT = 100;
|
|
1097
632
|
function configError(message, operation, suggestedAction) {
|
|
1098
|
-
throw new (0,
|
|
633
|
+
throw new (0, _chunk5N6DYKXOcjs.AutotaskConfigError)(message, { operation, suggestedAction });
|
|
1099
634
|
}
|
|
1100
635
|
function parseMatchId(record) {
|
|
1101
636
|
const raw = record.id;
|
|
@@ -1112,7 +647,7 @@ function parseMatchId(record) {
|
|
|
1112
647
|
}
|
|
1113
648
|
async function recovery(client, input, opts = {}) {
|
|
1114
649
|
const operation = RECOVERY_CONFIRM;
|
|
1115
|
-
if (!
|
|
650
|
+
if (!_chunk5N6DYKXOcjs.isRecord.call(void 0, input)) {
|
|
1116
651
|
configError(
|
|
1117
652
|
`recovery: input must be an object { resource, marker, ... } (got ${typeof input})`,
|
|
1118
653
|
operation,
|
|
@@ -1143,10 +678,10 @@ async function recovery(client, input, opts = {}) {
|
|
|
1143
678
|
"Pass action: 'delete' for the destructive path (dry-run-first; the apply requires the confirm string)."
|
|
1144
679
|
);
|
|
1145
680
|
}
|
|
1146
|
-
const entry =
|
|
681
|
+
const entry = _chunk5N6DYKXOcjs.RELATIONSHIP_MAP[resource];
|
|
1147
682
|
if (entry === void 0) {
|
|
1148
|
-
throw new (0,
|
|
1149
|
-
`recovery: unknown resource "${resource}" \u2014 the plan has ${Object.keys(
|
|
683
|
+
throw new (0, _chunk5N6DYKXOcjs.AutotaskError)(
|
|
684
|
+
`recovery: unknown resource "${resource}" \u2014 the plan has ${Object.keys(_chunk5N6DYKXOcjs.RELATIONSHIP_MAP).length} resources`,
|
|
1150
685
|
{
|
|
1151
686
|
code: "RESOURCE_UNKNOWN",
|
|
1152
687
|
category: "validation",
|
|
@@ -1155,7 +690,7 @@ async function recovery(client, input, opts = {}) {
|
|
|
1155
690
|
}
|
|
1156
691
|
);
|
|
1157
692
|
}
|
|
1158
|
-
const holder = client[
|
|
693
|
+
const holder = client[_chunk5N6DYKXOcjs.camelKey.call(void 0, resource)];
|
|
1159
694
|
if (!holder || typeof holder.queryBounded !== "function") {
|
|
1160
695
|
configError(
|
|
1161
696
|
`recovery: ${resource} exposes no bounded query surface \u2014 the marker search cannot run`,
|
|
@@ -1163,7 +698,7 @@ async function recovery(client, input, opts = {}) {
|
|
|
1163
698
|
"Use a resource with a query surface, or address the record by id directly (get/fetchMany)."
|
|
1164
699
|
);
|
|
1165
700
|
}
|
|
1166
|
-
const field = input.field !== void 0 ? String(input.field) :
|
|
701
|
+
const field = input.field !== void 0 ? String(input.field) : _chunk5N6DYKXOcjs.MARKER_FIELDS[resource];
|
|
1167
702
|
if (typeof field !== "string" || field.trim() === "") {
|
|
1168
703
|
configError(
|
|
1169
704
|
`recovery: ${resource} has no plan markerField and no input.field was passed \u2014 the marker search needs a name-like field to filter on`,
|
|
@@ -1199,7 +734,7 @@ async function recovery(client, input, opts = {}) {
|
|
|
1199
734
|
);
|
|
1200
735
|
}
|
|
1201
736
|
for (const c of input.filter) {
|
|
1202
|
-
if (!
|
|
737
|
+
if (!_chunk5N6DYKXOcjs.isRecord.call(void 0, c) || typeof c.op !== "string" || c.op === "and" || c.op === "or") {
|
|
1203
738
|
configError(
|
|
1204
739
|
"recovery: input.filter accepts only plain leaf conditions ({ field, op, value }) \u2014 no grouping",
|
|
1205
740
|
operation,
|
|
@@ -1220,7 +755,7 @@ async function recovery(client, input, opts = {}) {
|
|
|
1220
755
|
}
|
|
1221
756
|
limit = input.limit;
|
|
1222
757
|
}
|
|
1223
|
-
const boundaryNote =
|
|
758
|
+
const boundaryNote = _chunk5N6DYKXOcjs.DELETE_BOUNDARY_NOTES[resource];
|
|
1224
759
|
const boundary = {
|
|
1225
760
|
available: boundaryNote === void 0,
|
|
1226
761
|
reason: _nullishCoalesce(boundaryNote, () => ( null)),
|
|
@@ -1232,7 +767,7 @@ async function recovery(client, input, opts = {}) {
|
|
|
1232
767
|
};
|
|
1233
768
|
const isDelete = action === "delete";
|
|
1234
769
|
if (isDelete && boundaryNote !== void 0) {
|
|
1235
|
-
throw new (0,
|
|
770
|
+
throw new (0, _chunk5N6DYKXOcjs.DeleteBoundaryError)(
|
|
1236
771
|
`recovery: the vendor defines no DELETE for ${resource} \u2014 the delete cannot be issued through the API (zero wire was issued)`,
|
|
1237
772
|
{
|
|
1238
773
|
operation,
|
|
@@ -1241,10 +776,10 @@ async function recovery(client, input, opts = {}) {
|
|
|
1241
776
|
}
|
|
1242
777
|
);
|
|
1243
778
|
}
|
|
1244
|
-
const dryRun = _optionalChain([opts, 'optionalAccess',
|
|
1245
|
-
const confirm = _nullishCoalesce(_optionalChain([opts, 'optionalAccess',
|
|
779
|
+
const dryRun = _optionalChain([opts, 'optionalAccess', _13 => _13.dryRun]) !== false;
|
|
780
|
+
const confirm = _nullishCoalesce(_optionalChain([opts, 'optionalAccess', _14 => _14.confirm]), () => ( input.confirm));
|
|
1246
781
|
if (isDelete && !dryRun && confirm !== RECOVERY_CONFIRM) {
|
|
1247
|
-
throw new (0,
|
|
782
|
+
throw new (0, _chunk5N6DYKXOcjs.ConfirmationRequiredError)(
|
|
1248
783
|
`recovery: action 'delete' apply is destructive and requires its confirmation flag: pass confirm: "${RECOVERY_CONFIRM}"`,
|
|
1249
784
|
{
|
|
1250
785
|
operation: RECOVERY_CONFIRM,
|
|
@@ -1260,7 +795,7 @@ async function recovery(client, input, opts = {}) {
|
|
|
1260
795
|
const query = await holder.queryBounded({ filter: conditions, limit });
|
|
1261
796
|
if (query.hasMore) {
|
|
1262
797
|
const wire = isDelete ? "DELETE wire" : "mutating wire";
|
|
1263
|
-
throw new (0,
|
|
798
|
+
throw new (0, _chunk5N6DYKXOcjs.RecoveryTruncatedError)(
|
|
1264
799
|
`recovery: the marker search on ${resource} TRIPPED its match cap (${limit}) \u2014 more matches exist than were returned (zero ${wire} was issued)`,
|
|
1265
800
|
{
|
|
1266
801
|
operation,
|
|
@@ -1299,7 +834,7 @@ async function recovery(client, input, opts = {}) {
|
|
|
1299
834
|
return { ...base, simulated: true, dryRun: true };
|
|
1300
835
|
}
|
|
1301
836
|
if (unsafeId) {
|
|
1302
|
-
throw new (0,
|
|
837
|
+
throw new (0, _chunk5N6DYKXOcjs.MarkerUnsafeIdError)(
|
|
1303
838
|
`recovery: ${unsafeIds.length} of ${matches.length} match(es) on ${resource} have ids beyond Number.MAX_SAFE_INTEGER \u2014 they CANNOT be addressed through the SDK's typed delete surface (zero DELETE wire was issued)`,
|
|
1304
839
|
{
|
|
1305
840
|
operation,
|
|
@@ -1310,7 +845,7 @@ async function recovery(client, input, opts = {}) {
|
|
|
1310
845
|
}
|
|
1311
846
|
const deleteMethod = holder.delete;
|
|
1312
847
|
if (deleteMethod === void 0) {
|
|
1313
|
-
throw new (0,
|
|
848
|
+
throw new (0, _chunk5N6DYKXOcjs.DeleteBoundaryError)(
|
|
1314
849
|
`recovery: ${resource} has no delete method on the client \u2014 the boundary is marked available in the plan but the typed delete surface is missing`,
|
|
1315
850
|
{
|
|
1316
851
|
operation,
|
|
@@ -1339,14 +874,14 @@ async function recovery(client, input, opts = {}) {
|
|
|
1339
874
|
verify = "still-present";
|
|
1340
875
|
}
|
|
1341
876
|
} catch (err) {
|
|
1342
|
-
if (err instanceof
|
|
877
|
+
if (err instanceof _chunk5N6DYKXOcjs.NotFoundError) verify = "not-found";
|
|
1343
878
|
else {
|
|
1344
879
|
verify = "error";
|
|
1345
|
-
code =
|
|
880
|
+
code = _chunk5N6DYKXOcjs.isAutotaskError.call(void 0, err) ? err.code : "SERVER_ERROR";
|
|
1346
881
|
}
|
|
1347
882
|
}
|
|
1348
883
|
} catch (err) {
|
|
1349
|
-
code =
|
|
884
|
+
code = _chunk5N6DYKXOcjs.isAutotaskError.call(void 0, err) ? err.code : "SERVER_ERROR";
|
|
1350
885
|
}
|
|
1351
886
|
deleted.push({ id, verified: verify === "not-found", code });
|
|
1352
887
|
}
|
|
@@ -1354,13 +889,13 @@ async function recovery(client, input, opts = {}) {
|
|
|
1354
889
|
}
|
|
1355
890
|
|
|
1356
891
|
// src/operations/invoke.ts
|
|
1357
|
-
var RECORDS =
|
|
892
|
+
var RECORDS = _chunkJKZVCFRYcjs.CAPABILITIES;
|
|
1358
893
|
var byId = new Map(RECORDS.map((r) => [r.id, r]));
|
|
1359
894
|
function needsConfirmation(record) {
|
|
1360
895
|
return record.effect === "destructive" || (_nullishCoalesce(record.flags, () => ( []))).includes("requiresApproval");
|
|
1361
896
|
}
|
|
1362
897
|
function refuse(message, operation, suggestedAction) {
|
|
1363
|
-
throw new (0,
|
|
898
|
+
throw new (0, _chunk5N6DYKXOcjs.ConfirmationRequiredError)(message, { operation, suggestedAction });
|
|
1364
899
|
}
|
|
1365
900
|
var MODE_BY_EFFECT = {
|
|
1366
901
|
read: "read",
|
|
@@ -1404,7 +939,7 @@ function looseTypeOk(type, value) {
|
|
|
1404
939
|
case "string[]":
|
|
1405
940
|
return Array.isArray(value) && value.every((v) => typeof v === "string");
|
|
1406
941
|
case "object":
|
|
1407
|
-
return
|
|
942
|
+
return _chunk5N6DYKXOcjs.isRecord.call(void 0, value);
|
|
1408
943
|
default:
|
|
1409
944
|
return true;
|
|
1410
945
|
}
|
|
@@ -1421,7 +956,7 @@ function validateDispatchArgs(record, argsIn) {
|
|
|
1421
956
|
const schema = _nullishCoalesce(record.inputSchema, () => ( {}));
|
|
1422
957
|
const names = Object.keys(schema);
|
|
1423
958
|
if (args.length > names.length) {
|
|
1424
|
-
throw new (0,
|
|
959
|
+
throw new (0, _chunk5N6DYKXOcjs.AutotaskConfigError)(
|
|
1425
960
|
`invoke: "${operation}" declares ${names.length} positional arg(s) (${declaredArgList(record)}) but ${args.length} were passed \u2014 extra args are refused, not dropped (v0.2.0 silently dropped them)`,
|
|
1426
961
|
{
|
|
1427
962
|
operation,
|
|
@@ -1431,7 +966,7 @@ function validateDispatchArgs(record, argsIn) {
|
|
|
1431
966
|
}
|
|
1432
967
|
const required = names.filter((n) => schema[n].required);
|
|
1433
968
|
if (args.length < required.length) {
|
|
1434
|
-
throw new (0,
|
|
969
|
+
throw new (0, _chunk5N6DYKXOcjs.AutotaskConfigError)(
|
|
1435
970
|
`invoke: "${operation}" requires ${required.length} positional arg(s) (${required.map((n) => `${n}: ${schema[n].type}`).join(", ")}) but only ${args.length} were passed \u2014 declared args: ${declaredArgList(record)}`,
|
|
1436
971
|
{ operation }
|
|
1437
972
|
);
|
|
@@ -1442,7 +977,7 @@ function validateDispatchArgs(record, argsIn) {
|
|
|
1442
977
|
const name = names[i];
|
|
1443
978
|
const spec = schema[name];
|
|
1444
979
|
if (!looseTypeOk(spec.type, value)) {
|
|
1445
|
-
throw new (0,
|
|
980
|
+
throw new (0, _chunk5N6DYKXOcjs.AutotaskConfigError)(
|
|
1446
981
|
`invoke: "${operation}" arg ${i + 1} is declared ${name}: ${spec.type} \u2014 the value has the wrong type (pass a ${spec.type} value)`,
|
|
1447
982
|
{ operation }
|
|
1448
983
|
);
|
|
@@ -1493,12 +1028,12 @@ function validateParamsBag(record, args) {
|
|
|
1493
1028
|
if (record.inputSchemaStrict !== true) return;
|
|
1494
1029
|
const valid = PARAMS_BAG_KEYS[record.operation];
|
|
1495
1030
|
if (valid === void 0) return;
|
|
1496
|
-
const bag = _optionalChain([args, 'optionalAccess',
|
|
1497
|
-
if (bag === void 0 || bag === null || !
|
|
1031
|
+
const bag = _optionalChain([args, 'optionalAccess', _15 => _15[0]]);
|
|
1032
|
+
if (bag === void 0 || bag === null || !_chunk5N6DYKXOcjs.isRecord.call(void 0, bag)) return;
|
|
1498
1033
|
const unknown = Object.keys(bag).filter((k) => !valid.includes(k));
|
|
1499
1034
|
if (unknown.length === 0) return;
|
|
1500
1035
|
const suggestions = unknown.map((k) => [k, suggestForKey(k, valid)]).filter((pair) => pair[1] !== null).map(([k, s]) => `"${k}" \u2192 "${s}"`);
|
|
1501
|
-
throw new (0,
|
|
1036
|
+
throw new (0, _chunk5N6DYKXOcjs.AutotaskConfigError)(
|
|
1502
1037
|
`invoke: "${record.id}" params bag has unknown key(s) ${unknown.map((k) => `"${k}"`).join(", ")} \u2014 the bag is closed (valid keys: ${valid.join(", ")})`,
|
|
1503
1038
|
{
|
|
1504
1039
|
operation: record.id,
|
|
@@ -1512,7 +1047,7 @@ function validateInvokeOptions(opts, operation) {
|
|
|
1512
1047
|
const unknown = Object.keys(opts).filter((k) => !INVOKE_OPTION_KEYS.includes(k));
|
|
1513
1048
|
if (unknown.length === 0) return;
|
|
1514
1049
|
const suggestions = unknown.map((k) => [k, suggestForKey(k, ["dryRun", "confirm", "lastModifiedDate"])]).filter((pair) => pair[1] !== null).map(([k, s]) => `"${k}" \u2192 "${s}"`);
|
|
1515
|
-
throw new (0,
|
|
1050
|
+
throw new (0, _chunk5N6DYKXOcjs.AutotaskConfigError)(
|
|
1516
1051
|
`invoke: "${operation}" has unknown option key(s) ${unknown.map((k) => `"${k}"`).join(", ")} \u2014 the options set is closed (valid: dryRun, confirm, lastModifiedDate)`,
|
|
1517
1052
|
{
|
|
1518
1053
|
operation,
|
|
@@ -1525,7 +1060,7 @@ function unknownKeysRefusal(raw, validKeys, subject, operation) {
|
|
|
1525
1060
|
const unknown = Object.keys(raw).filter((k) => !validKeys.includes(k));
|
|
1526
1061
|
if (unknown.length === 0) return null;
|
|
1527
1062
|
const suggestions = unknown.map((k) => [k, suggestForKey(k, [...validKeys])]).filter((pair) => pair[1] !== null).map(([k, s]) => `"${k}" \u2192 "${s}"`);
|
|
1528
|
-
return new (0,
|
|
1063
|
+
return new (0, _chunk5N6DYKXOcjs.AutotaskConfigError)(
|
|
1529
1064
|
`unknown ${subject} ${unknown.map((k) => `"${k}"`).join(", ")} \u2014 the ${subject} set is closed (valid keys: ${validKeys.join(", ")})`,
|
|
1530
1065
|
{
|
|
1531
1066
|
...operation !== void 0 ? { operation } : {},
|
|
@@ -1537,7 +1072,7 @@ async function invokeMode(client, operation, argsIn = [], opts = {}) {
|
|
|
1537
1072
|
const args = _nullishCoalesce(argsIn, () => ( []));
|
|
1538
1073
|
const record = byId.get(operation);
|
|
1539
1074
|
if (record === void 0) {
|
|
1540
|
-
throw new (0,
|
|
1075
|
+
throw new (0, _chunk5N6DYKXOcjs.AutotaskConfigError)(
|
|
1541
1076
|
`invoke: unknown operation "${operation}" \u2014 it is not in the capability registry`,
|
|
1542
1077
|
{ operation, suggestedAction: "List the registry (the ./capabilities subpath) for the exact operation key." }
|
|
1543
1078
|
);
|
|
@@ -1545,17 +1080,17 @@ async function invokeMode(client, operation, argsIn = [], opts = {}) {
|
|
|
1545
1080
|
validateInvokeOptions(opts, operation);
|
|
1546
1081
|
const mode = opts.mode;
|
|
1547
1082
|
if (mode !== void 0 && MODE_BY_EFFECT[record.effect] !== mode) {
|
|
1548
|
-
throw new (0,
|
|
1083
|
+
throw new (0, _chunk5N6DYKXOcjs.AutotaskConfigError)(crossModeRefusal(operation, record.effect, mode), { operation });
|
|
1549
1084
|
}
|
|
1550
1085
|
if (opts.dryRun !== void 0 && typeof opts.dryRun !== "boolean") {
|
|
1551
|
-
throw new (0,
|
|
1086
|
+
throw new (0, _chunk5N6DYKXOcjs.AutotaskConfigError)(
|
|
1552
1087
|
`invoke: dryRun must be a boolean (got ${typeof opts.dryRun}) \u2014 "${operation}" was not issued`,
|
|
1553
1088
|
{ operation, suggestedAction: "Pass dryRun: true (simulate) or dryRun: false (apply) as a real boolean." }
|
|
1554
1089
|
);
|
|
1555
1090
|
}
|
|
1556
1091
|
const isWrite = record.effect !== "read";
|
|
1557
1092
|
if (!isWrite && opts.dryRun === true) {
|
|
1558
|
-
throw new (0,
|
|
1093
|
+
throw new (0, _chunk5N6DYKXOcjs.AutotaskConfigError)(
|
|
1559
1094
|
`invoke: "${operation}" is a read \u2014 dryRun is not applicable (reads issue their request as-is)`,
|
|
1560
1095
|
{ operation }
|
|
1561
1096
|
);
|
|
@@ -1570,15 +1105,15 @@ async function invokeMode(client, operation, argsIn = [], opts = {}) {
|
|
|
1570
1105
|
validateDispatchArgs(record, args);
|
|
1571
1106
|
validateParamsBag(record, args);
|
|
1572
1107
|
const boundedQuery = record.kind === "primitive" && record.operation === "query";
|
|
1573
|
-
let holder = client[
|
|
1108
|
+
let holder = client[_chunk5N6DYKXOcjs.camelKey.call(void 0, record.resource)];
|
|
1574
1109
|
if (typeof holder === "function") {
|
|
1575
|
-
holder = _nullishCoalesce(client[`${
|
|
1110
|
+
holder = _nullishCoalesce(client[`${_chunk5N6DYKXOcjs.camelKey.call(void 0, record.resource)}Resource`], () => ( holder));
|
|
1576
1111
|
}
|
|
1577
1112
|
if (holder === void 0 && record.resource === "operations") {
|
|
1578
1113
|
holder = {
|
|
1579
1114
|
resolveAny: (identifier, opts2) => resolveAny(client, identifier, opts2),
|
|
1580
1115
|
searchAcrossResources: (query, opts2) => searchAcrossResources(client, query, opts2),
|
|
1581
|
-
fetchMany: (items, opts2) => fetchMany(client, items, opts2),
|
|
1116
|
+
fetchMany: (items, opts2) => _chunk5N6DYKXOcjs.fetchMany.call(void 0, client, items, opts2),
|
|
1582
1117
|
// Issue #62: the generic aggregate + the cheap count — the
|
|
1583
1118
|
// groupBy/sum-absent mode is ONE vendor /query/count (the S12-C blind
|
|
1584
1119
|
// sentinel rides through); the group/sum modes walk the named
|
|
@@ -1588,12 +1123,12 @@ async function invokeMode(client, operation, argsIn = [], opts = {}) {
|
|
|
1588
1123
|
// Issue #59 PR-B: the bulk fetch by ids — query-first chunked `id in`
|
|
1589
1124
|
// reads + the per-id `get` fallback (blind-surface-safe; per-item
|
|
1590
1125
|
// typed outcomes reuse the fetchMany shapes).
|
|
1591
|
-
fetchByIds: (items, opts2) => fetchByIds(client, items, opts2),
|
|
1126
|
+
fetchByIds: (items, opts2) => _chunk5N6DYKXOcjs.fetchByIds.call(void 0, client, items, opts2),
|
|
1592
1127
|
// Issue #65: opt-in resource name expansion — per-id resources.get
|
|
1593
1128
|
// reads ONLY (never an id-in query — the resources table can be blind
|
|
1594
1129
|
// to count/query while per-id reads work); blind-marked rows for ids
|
|
1595
1130
|
// the API user cannot resolve; the name cache (default-on).
|
|
1596
|
-
expandResourceNames: (ids, opts2) =>
|
|
1131
|
+
expandResourceNames: (ids, opts2) => _chunk5N6DYKXOcjs.expandResourceNames.call(void 0, client, ids, opts2),
|
|
1597
1132
|
relationshipMap: (resourceKey) => relationshipMap(client, resourceKey),
|
|
1598
1133
|
// Issue #11: the served blind-surface inventory (zero wire) + the
|
|
1599
1134
|
// bounded caller-opted reachability sweep (read-only, confirmProbe-
|
|
@@ -1606,7 +1141,7 @@ async function invokeMode(client, operation, argsIn = [], opts = {}) {
|
|
|
1606
1141
|
// entityInformation GETs (the op's own cap refuses over-cap fan-outs
|
|
1607
1142
|
// pre-request; per-resource failures are recorded on the row and
|
|
1608
1143
|
// never abort the call).
|
|
1609
|
-
fieldCatalog: (opts2) =>
|
|
1144
|
+
fieldCatalog: (opts2) => _chunk5N6DYKXOcjs.fieldCatalog.call(void 0, client, opts2),
|
|
1610
1145
|
// Issue #9: the one-call recovery/cleanup op — effect write in the
|
|
1611
1146
|
// registry (the governor's dry-run-first applies to it); the op's own
|
|
1612
1147
|
// confirm gate makes the destructive action deliberate (the governor
|
|
@@ -1615,7 +1150,7 @@ async function invokeMode(client, operation, argsIn = [], opts = {}) {
|
|
|
1615
1150
|
};
|
|
1616
1151
|
}
|
|
1617
1152
|
if (holder === void 0) {
|
|
1618
|
-
throw new (0,
|
|
1153
|
+
throw new (0, _chunk5N6DYKXOcjs.AutotaskConfigError)(
|
|
1619
1154
|
`invoke: the client exposes no accessor for resource "${record.resource}"`,
|
|
1620
1155
|
{ operation }
|
|
1621
1156
|
);
|
|
@@ -1623,7 +1158,7 @@ async function invokeMode(client, operation, argsIn = [], opts = {}) {
|
|
|
1623
1158
|
const methodName = boundedQuery ? "queryBounded" : record.operation;
|
|
1624
1159
|
const method = holder[methodName];
|
|
1625
1160
|
if (typeof method !== "function") {
|
|
1626
|
-
throw new (0,
|
|
1161
|
+
throw new (0, _chunk5N6DYKXOcjs.AutotaskConfigError)(
|
|
1627
1162
|
`invoke: "${record.resource}.${methodName}" is not a callable method on the client`,
|
|
1628
1163
|
{ operation }
|
|
1629
1164
|
);
|
|
@@ -1727,4 +1262,4 @@ async function invokeDelete(client, operation, args = [], opts = {}) {
|
|
|
1727
1262
|
|
|
1728
1263
|
|
|
1729
1264
|
|
|
1730
|
-
exports.AGGREGATE_DATE_BUCKETS = AGGREGATE_DATE_BUCKETS; exports.AGGREGATE_DEFAULT_LIMIT = AGGREGATE_DEFAULT_LIMIT; exports.AGGREGATE_DEFAULT_TOP = AGGREGATE_DEFAULT_TOP; exports.AGGREGATE_TOP_MAX = AGGREGATE_TOP_MAX; exports.BLIND_SURFACE_KINDS = BLIND_SURFACE_KINDS; exports.CREATE_BLOCKER_KINDS = CREATE_BLOCKER_KINDS; exports.EXPAND_RESOURCE_NAMES_MAX_IDS =
|
|
1265
|
+
exports.AGGREGATE_DATE_BUCKETS = AGGREGATE_DATE_BUCKETS; exports.AGGREGATE_DEFAULT_LIMIT = AGGREGATE_DEFAULT_LIMIT; exports.AGGREGATE_DEFAULT_TOP = AGGREGATE_DEFAULT_TOP; exports.AGGREGATE_TOP_MAX = AGGREGATE_TOP_MAX; exports.BLIND_SURFACE_KINDS = BLIND_SURFACE_KINDS; exports.CREATE_BLOCKER_KINDS = CREATE_BLOCKER_KINDS; exports.EXPAND_RESOURCE_NAMES_MAX_IDS = _chunk5N6DYKXOcjs.EXPAND_RESOURCE_NAMES_MAX_IDS; exports.FETCH_BY_IDS_CHUNK_SIZE = _chunk5N6DYKXOcjs.FETCH_BY_IDS_CHUNK_SIZE; exports.FETCH_BY_IDS_MAX_ITEMS = _chunk5N6DYKXOcjs.FETCH_BY_IDS_MAX_ITEMS; exports.FETCH_MANY_MAX_ITEMS = _chunk5N6DYKXOcjs.FETCH_MANY_MAX_ITEMS; exports.FIELD_CACHE_KINDS = _chunk5N6DYKXOcjs.FIELD_CACHE_KINDS; exports.FIELD_CATALOG_HONESTY_NOTE = _chunk5N6DYKXOcjs.FIELD_CATALOG_HONESTY_NOTE; exports.INVOKE_OPTION_KEYS = INVOKE_OPTION_KEYS; exports.MAX_FIELD_CATALOG_WIRE = _chunk5N6DYKXOcjs.MAX_FIELD_CATALOG_WIRE; exports.PARAMS_BAG_KEYS = PARAMS_BAG_KEYS; exports.PICKLIST_VALUE_NOT_SERVED_NOTE = _chunk5N6DYKXOcjs.PICKLIST_VALUE_NOT_SERVED_NOTE; exports.RECOVERY_CONFIRM = RECOVERY_CONFIRM; exports.RECOVERY_DEFAULT_LIMIT = RECOVERY_DEFAULT_LIMIT; exports.RECOVERY_MAX_LIMIT = RECOVERY_MAX_LIMIT; exports.WORKFLOW_RESOURCES = _chunk5N6DYKXOcjs.WORKFLOW_RESOURCES; exports.aggregate = aggregate; exports.blindSurfaces = blindSurfaces; exports.createGuidance = createGuidance; exports.dateBucketLabel = dateBucketLabel; exports.expandResourceNames = _chunk5N6DYKXOcjs.expandResourceNames; exports.fetchByIds = _chunk5N6DYKXOcjs.fetchByIds; exports.fetchMany = _chunk5N6DYKXOcjs.fetchMany; exports.fieldCatalog = _chunk5N6DYKXOcjs.fieldCatalog; exports.invoke = invoke; exports.invokeDelete = invokeDelete; exports.invokeRead = invokeRead; exports.invokeWrite = invokeWrite; exports.needsConfirmation = needsConfirmation; exports.probeReachability = probeReachability; exports.recovery = recovery; exports.relationshipMap = relationshipMap; exports.resolveAny = resolveAny; exports.searchAcrossResources = searchAcrossResources; exports.unknownKeysRefusal = unknownKeysRefusal; exports.validateDispatchArgs = validateDispatchArgs; exports.validateFetchManyItems = _chunk5N6DYKXOcjs.validateFetchManyItems; exports.validateInvokeOptions = validateInvokeOptions; exports.validateParamsBag = validateParamsBag;
|