node-autotask 0.21.0 → 0.23.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (56) hide show
  1. package/ARCHITECTURE.md +44 -21
  2. package/CHANGELOG.md +31 -0
  3. package/MCP_TOOL_CATALOG.json +69 -10
  4. package/MCP_TOOL_MANIFEST.md +20 -17
  5. package/MCP_TOOL_OVERRIDES.json +6 -6
  6. package/N8N_MCP_MANIFEST.json +20 -4
  7. package/N8N_MCP_MANIFEST.md +6 -5
  8. package/README.md +9 -9
  9. package/capabilities.json +2898 -7412
  10. package/capabilities.schema.json +0 -12
  11. package/dist/capabilities.cjs +2 -2
  12. package/dist/capabilities.d.cts +0 -2
  13. package/dist/capabilities.d.ts +0 -2
  14. package/dist/capabilities.js +1 -1
  15. package/dist/{chunk-KD6LOSAK.js → chunk-B5SNZ3TZ.js} +3473 -3084
  16. package/dist/{chunk-QWAWNQEZ.cjs → chunk-D5TVBI4U.cjs} +3021 -2632
  17. package/dist/{chunk-CBUY3MKB.cjs → chunk-JUO3URUI.cjs} +2897 -7411
  18. package/dist/{chunk-HEW4WJLC.cjs → chunk-N27NUB4R.cjs} +2466 -1745
  19. package/dist/{chunk-DM67SXCO.js → chunk-OGNUI3UR.js} +2897 -7411
  20. package/dist/{chunk-GBVUXAUA.js → chunk-PVUUOM5G.js} +2092 -1371
  21. package/dist/{chunk-PMPFQDVM.cjs → chunk-TTQB537V.cjs} +135 -135
  22. package/dist/{chunk-JRSU6PKP.js → chunk-VYFO2N5F.js} +2 -2
  23. package/dist/{index-BXtKN1M5.d.cts → index-BVtycq-6.d.cts} +1 -1
  24. package/dist/{index-BXtKN1M5.d.ts → index-BVtycq-6.d.ts} +1 -1
  25. package/dist/{index-DSnuyiTr.d.ts → index-DBoX-Dnk.d.ts} +430 -957
  26. package/dist/{index-ByWYfNog.d.cts → index-NC-x-bYl.d.cts} +430 -957
  27. package/dist/index.cjs +91 -62
  28. package/dist/index.d.cts +360 -5
  29. package/dist/index.d.ts +360 -5
  30. package/dist/index.js +74 -45
  31. package/dist/operations/index.cjs +462 -462
  32. package/dist/operations/index.d.cts +78 -84
  33. package/dist/operations/index.d.ts +78 -84
  34. package/dist/operations/index.js +382 -382
  35. package/dist/pool.cjs +8 -8
  36. package/dist/pool.d.cts +2 -2
  37. package/dist/pool.d.ts +2 -2
  38. package/dist/pool.js +4 -4
  39. package/dist/resources/index.cjs +4 -4
  40. package/dist/resources/index.d.cts +2 -2
  41. package/dist/resources/index.d.ts +2 -2
  42. package/dist/resources/index.js +3 -3
  43. package/dist/types/index.d.cts +1 -1
  44. package/dist/types/index.d.ts +1 -1
  45. package/docs/API.md +133 -41
  46. package/docs/N8N-ADAPTER.md +3 -3
  47. package/examples/mcp/errors.ts +135 -0
  48. package/examples/mcp/manifest.ts +168 -0
  49. package/examples/mcp/register.ts +66 -0
  50. package/examples/mcp/schemas.ts +203 -0
  51. package/examples/mcp/tools-meta.ts +120 -0
  52. package/examples/mcp/tools-mode.ts +177 -0
  53. package/examples/mcp/tools-read.ts +264 -0
  54. package/examples/mcp/types.ts +34 -0
  55. package/examples/mcp-register.ts +9 -1074
  56. package/package.json +1 -1
@@ -1,4 +1,62 @@
1
- import { I as Identifier, g as AuditEvent, a as FilterCondition, ez as ResolutionCaps, Q as QueryParams, dD as PagingModel, dn as OperationResult, dC as Page, cE as EmptyReasonInfo, cG as EntityInformationModel, cW as FieldInformationModel, cU as Field, cD as DryRunResult, ey as Resolution, c as Appointment, d as AppointmentCreate, f as AppointmentUpdate, e as AppointmentSummary, h as AuthTokenResultModel, B as BillingCode, j as BillingCodeCreate, l as BillingCodeUpdate, k as BillingCodeSummary, m as BillingItems, n as BillingItemsCreate, p as BillingItemsUpdate, o as BillingItemsSummary, C as ChangeRequestLink, q as ChangeRequestLinkCreate, s as ChangeRequestLinkUpdate, r as ChangeRequestLinkSummary, t as ChecklistLibrary, y as ChecklistLibraryCreate, D as ChecklistLibraryUpdate, z as ChecklistLibrarySummary, u as ChecklistLibraryChecklistItem, v as ChecklistLibraryChecklistItemCreate, x as ChecklistLibraryChecklistItemUpdate, w as ChecklistLibraryChecklistItemSummary, E as ClassificationIcon, G as ClassificationIconCreate, J as ClassificationIconUpdate, H as ClassificationIconSummary, K as Company, S as CompanyLocation, aN as Contact, W as CompanyNote, g9 as Ticket, dR as Project, hq as CompositeNamesSection, ha as TimeEntry, R as CompanyCreate, a3 as CompanyUpdate, a2 as CompanySummary, P as CompanyContext, L as CompanyAlert, M as CompanyAlertCreate, O as CompanyAlertUpdate, N as CompanyAlertSummary, T as CompanyLocationCreate, V as CompanyLocationUpdate, U as CompanyLocationSummary, X as CompanyNoteCreate, Z as CompanyNoteUpdate, Y as CompanyNoteSummary, _ as CompanySiteConfigurations, $ as CompanySiteConfigurationsCreate, a1 as CompanySiteConfigurationsUpdate, a0 as CompanySiteConfigurationsSummary, a4 as CompanyWebhook, a5 as CompanyWebhookCreate, a7 as CompanyWebhookUpdate, a6 as CompanyWebhookSummary, a9 as ConfigurationItemBillingProductAssociations, aa as ConfigurationItemBillingProductAssociationsCreate, ac as ConfigurationItemBillingProductAssociationsUpdate, ab as ConfigurationItemBillingProductAssociationsSummary, ad as ConfigurationItemCategory, ae as ConfigurationItemCategoryCreate, ak as ConfigurationItemCategoryUpdate, af as ConfigurationItemCategorySummary, ag as ConfigurationItemCategoryUdfAssociation, ah as ConfigurationItemCategoryUdfAssociationCreate, aj as ConfigurationItemCategoryUdfAssociationUpdate, ai as ConfigurationItemCategoryUdfAssociationSummary, an as ConfigurationItemDnsRecord, ao as ConfigurationItemDnsRecordCreate, aq as ConfigurationItemDnsRecordUpdate, ap as ConfigurationItemDnsRecordSummary, ar as ConfigurationItemNote, as as ConfigurationItemNoteCreate, au as ConfigurationItemNoteUpdate, at as ConfigurationItemNoteSummary, av as ConfigurationItemRelatedItem, aw as ConfigurationItemRelatedItemCreate, ay as ConfigurationItemRelatedItemUpdate, ax as ConfigurationItemRelatedItemSummary, a8 as ConfigurationItem, aE as ConfigurationItemType, am as ConfigurationItemCreate, aI as ConfigurationItemUpdate, aD as ConfigurationItemSummary, al as ConfigurationItemContext, az as ConfigurationItemSslSubjectAlternativeName, aA as ConfigurationItemSslSubjectAlternativeNameCreate, aC as ConfigurationItemSslSubjectAlternativeNameUpdate, aB as ConfigurationItemSslSubjectAlternativeNameSummary, aF as ConfigurationItemTypeCreate, aH as ConfigurationItemTypeUpdate, aG as ConfigurationItemTypeSummary, aJ as ConfigurationItemWebhook, aK as ConfigurationItemWebhookCreate, aM as ConfigurationItemWebhookUpdate, aL as ConfigurationItemWebhookSummary, aQ as ContactGroupContacts, aR as ContactGroupContactsCreate, aT as ContactGroupContactsUpdate, aS as ContactGroupContactsSummary, aU as ContactGroups, aV as ContactGroupsCreate, aX as ContactGroupsUpdate, aW as ContactGroupsSummary, aY as ContactSummary, aP as ContactCreate, aZ as ContactUpdate, aO as ContactContext, a_ as ContactWebhook, a$ as ContactWebhookCreate, b1 as ContactWebhookUpdate, b0 as ContactWebhookSummary, b3 as ContractBillingRule, b4 as ContractBillingRuleCreate, b6 as ContractBillingRuleUpdate, b5 as ContractBillingRuleSummary, b9 as ContractBlockHourFactor, ba as ContractBlockHourFactorCreate, bc as ContractBlockHourFactorUpdate, bb as ContractBlockHourFactorSummary, b7 as ContractBlock, b8 as ContractBlockCreate, be as ContractBlockUpdate, bd as ContractBlockSummary, bf as ContractCharge, bg as ContractChargeCreate, bi as ContractChargeUpdate, bh as ContractChargeSummary, bk as ContractExclusionBillingCode, bl as ContractExclusionBillingCodeCreate, bn as ContractExclusionBillingCodeUpdate, bm as ContractExclusionBillingCodeSummary, bo as ContractExclusionRoles, bp as ContractExclusionRolesCreate, br as ContractExclusionRolesUpdate, bq as ContractExclusionRolesSummary, bs as ContractExclusionSetExcludedRoles, bt as ContractExclusionSetExcludedRolesCreate, bv as ContractExclusionSetExcludedRolesUpdate, bu as ContractExclusionSetExcludedRolesSummary, bw as ContractExclusionSetExcludedWorkTypes, bx as ContractExclusionSetExcludedWorkTypesCreate, bz as ContractExclusionSetExcludedWorkTypesUpdate, by as ContractExclusionSetExcludedWorkTypesSummary, bA as ContractExclusionSets, bB as ContractExclusionSetsCreate, bD as ContractExclusionSetsUpdate, bC as ContractExclusionSetsSummary, bE as ContractMilestone, bF as ContractMilestoneCreate, bH as ContractMilestoneUpdate, bG as ContractMilestoneSummary, bI as ContractNote, bJ as ContractNoteCreate, bL as ContractNoteUpdate, bK as ContractNoteSummary, bM as ContractRate, bN as ContractRateCreate, bP as ContractRateUpdate, bO as ContractRateSummary, bQ as ContractRetainers, bR as ContractRetainersCreate, bT as ContractRetainersUpdate, bS as ContractRetainersSummary, bU as ContractRoleCosts, bV as ContractRoleCostsCreate, bX as ContractRoleCostsUpdate, bW as ContractRoleCostsSummary, bZ as ContractServiceAdjustment, b_ as ContractServiceAdjustmentCreate, c0 as ContractServiceAdjustmentUpdate, b$ as ContractServiceAdjustmentSummary, c2 as ContractServiceBundleAdjustment, c3 as ContractServiceBundleAdjustmentCreate, c5 as ContractServiceBundleAdjustmentUpdate, c4 as ContractServiceBundleAdjustmentSummary, c1 as ContractServiceBundle, c6 as ContractServiceBundleCreate, cc as ContractServiceBundleUpdate, c7 as ContractServiceBundleSummary, c8 as ContractServiceBundleUnit, c9 as ContractServiceBundleUnitCreate, cb as ContractServiceBundleUnitUpdate, ca as ContractServiceBundleUnitSummary, bY as ContractService, cd as ContractServiceCreate, cj as ContractServiceUpdate, ce as ContractServiceSummary, cf as ContractServiceUnit, cg as ContractServiceUnitCreate, ci as ContractServiceUnitUpdate, ch as ContractServiceUnitSummary, b2 as Contract, dc as Invoice, eA as Resource, cI as ExpenseItem, fA as Subscription, bj as ContractCreate, cp as ContractUpdate, ck as ContractSummary, cl as ContractTicketPurchases, cm as ContractTicketPurchasesCreate, co as ContractTicketPurchasesUpdate, cn as ContractTicketPurchasesSummary, cq as Country, cr as CountryCreate, ct as CountryUpdate, cs as CountrySummary, cu as Department, cv as DepartmentCreate, cx as DepartmentUpdate, cw as DepartmentSummary, cz as DomainRegistrar, cA as DomainRegistrarCreate, cC as DomainRegistrarUpdate, cB as DomainRegistrarSummary, cY as GlobalEntityInformationResultModel, cJ as ExpenseItemAttachment, cK as ExpenseItemAttachmentCreate, cM as ExpenseItemAttachmentUpdate, cL as ExpenseItemAttachmentSummary, cN as ExpenseItemCreate, cP as ExpenseItemUpdate, cO as ExpenseItemSummary, cQ as ExpenseReport, cR as ExpenseReportCreate, cT as ExpenseReportUpdate, cS as ExpenseReportSummary, c$ as HolidaySet, d0 as HolidaySetCreate, d2 as HolidaySetUpdate, d1 as HolidaySetSummary, cZ as Holiday, c_ as HolidayCreate, d4 as HolidayUpdate, d3 as HolidaySummary, d5 as InventoryProduct, d6 as InventoryProductCreate, d8 as InventoryProductUpdate, d7 as InventoryProductSummary, d9 as InventoryStockedItemAdd, da as InventoryStockedItemRemove, db as InventoryStockedItemTransfer, dd as InvoiceCreate, df as InvoiceUpdate, de as InvoiceSummary, dh as ModuleAccessResultModel, di as NotificationHistory, dj as NotificationHistoryCreate, dl as NotificationHistoryUpdate, dk as NotificationHistorySummary, dq as Opportunity, dz as OpportunityCreate, dB as OpportunityUpdate, dA as OpportunitySummary, dr as OpportunityAttachment, ds as OpportunityAttachmentCreate, du as OpportunityAttachmentUpdate, dt as OpportunityAttachmentSummary, dv as OpportunityCategory, dw as OpportunityCategoryCreate, dy as OpportunityCategoryUpdate, dx as OpportunityCategorySummary, dE as Phase, dF as PhaseCreate, dH as PhaseUpdate, dG as PhaseSummary, dJ as Product, dK as ProductCreate, dM as ProductUpdate, dL as ProductSummary, dN as ProductVendors, dO as ProductVendorsCreate, dQ as ProductVendorsUpdate, dP as ProductVendorsSummary, dS as ProjectCharge, dT as ProjectChargeCreate, dV as ProjectChargeUpdate, dU as ProjectChargeSummary, dY as ProjectNote, dZ as ProjectNoteCreate, d$ as ProjectNoteUpdate, d_ as ProjectNoteSummary, dX as ProjectCreate, e1 as ProjectUpdate, e0 as ProjectSummary, hr as CompositeContextOptions, dW as ProjectContext, e2 as PurchaseApprovals, e3 as PurchaseApprovalsCreate, e5 as PurchaseApprovalsUpdate, e4 as PurchaseApprovalsSummary, e6 as PurchaseOrderItemReceiving, e7 as PurchaseOrderItemReceivingCreate, e9 as PurchaseOrderItemReceivingUpdate, e8 as PurchaseOrderItemReceivingSummary, ea as PurchaseOrderItems, eb as PurchaseOrderItemsCreate, ed as PurchaseOrderItemsUpdate, ec as PurchaseOrderItemsSummary, ee as PurchaseOrders, ef as PurchaseOrdersCreate, eh as PurchaseOrdersUpdate, eg as PurchaseOrdersSummary, ek as QuoteItem, el as QuoteItemCreate, en as QuoteItemUpdate, em as QuoteItemSummary, eo as QuoteLocation, ep as QuoteLocationCreate, er as QuoteLocationUpdate, eq as QuoteLocationSummary, ei as Quote, ej as QuoteCreate, ex as QuoteUpdate, es as QuoteSummary, et as QuoteTemplate, eu as QuoteTemplateCreate, ew as QuoteTemplateUpdate, ev as QuoteTemplateSummary, eE as ResourceRoleQueue, eF as ResourceRoleQueueCreate, eH as ResourceRoleQueueUpdate, eG as ResourceRoleQueueSummary, eC as ResourceRole, eD as ResourceRoleCreate, eJ as ResourceRoleUpdate, eI as ResourceRoleSummary, eK as ResourceSkill, eL as ResourceSkillCreate, eN as ResourceSkillUpdate, eM as ResourceSkillSummary, eB as ResourceCreate, e$ as ResourceUpdate, eO as ResourceSummary, eP as ResourceTimeOffAdditional, eQ as ResourceTimeOffAdditionalCreate, eS as ResourceTimeOffAdditionalUpdate, eR as ResourceTimeOffAdditionalSummary, eT as ResourceTimeOffApprover, eU as ResourceTimeOffApproverCreate, eW as ResourceTimeOffApproverUpdate, eV as ResourceTimeOffApproverSummary, eX as ResourceTimeOffBalance, eY as ResourceTimeOffBalanceCreate, e_ as ResourceTimeOffBalanceUpdate, eZ as ResourceTimeOffBalanceSummary, f0 as Role, f1 as RoleCreate, f3 as RoleUpdate, f2 as RoleSummary, f5 as ServiceCall, f6 as ServiceCallCreate, fo as ServiceCallUpdate, f7 as ServiceCallSummary, fa as ServiceCallTaskResource, fb as ServiceCallTaskResourceCreate, fd as ServiceCallTaskResourceUpdate, fc as ServiceCallTaskResourceSummary, f8 as ServiceCallTask, f9 as ServiceCallTaskCreate, ff as ServiceCallTaskUpdate, fe as ServiceCallTaskSummary, fi as ServiceCallTicketResource, fj as ServiceCallTicketResourceCreate, fl as ServiceCallTicketResourceUpdate, fk as ServiceCallTicketResourceSummary, fg as ServiceCallTicket, fh as ServiceCallTicketCreate, fn as ServiceCallTicketUpdate, fm as ServiceCallTicketSummary, fq as ServiceLevelAgreementResults, fr as ServiceLevelAgreementResultsCreate, ft as ServiceLevelAgreementResultsUpdate, fs as ServiceLevelAgreementResultsSummary, f4 as Service, fp as ServiceCreate, fv as ServiceUpdate, fu as ServiceSummary, fw as Skill, fx as SkillCreate, fz as SkillUpdate, fy as SkillSummary, fC as SubscriptionPeriod, fD as SubscriptionPeriodCreate, fF as SubscriptionPeriodUpdate, fE as SubscriptionPeriodSummary, fB as SubscriptionCreate, fH as SubscriptionUpdate, fG as SubscriptionSummary, fK as SurveyResults, fL as SurveyResultsCreate, fN as SurveyResultsUpdate, fM as SurveyResultsSummary, fI as Survey, fJ as SurveyCreate, fP as SurveyUpdate, fO as SurveySummary, fR as TagAlias, fS as TagAliasCreate, fU as TagAliasUpdate, fT as TagAliasSummary, fW as TagGroup, fX as TagGroupCreate, fZ as TagGroupUpdate, fY as TagGroupSummary, fQ as Tag, fV as TagCreate, f$ as TagUpdate, f_ as TagSummary, g2 as TaskSecondaryResource, g3 as TaskSecondaryResourceCreate, g5 as TaskSecondaryResourceUpdate, g4 as TaskSecondaryResourceSummary, g0 as Task, g1 as TaskCreate, g7 as TaskUpdate, g6 as TaskSummary, g8 as ThresholdStatusResultModel, ga as TicketAdditionalConfigurationItem, gb as TicketAdditionalConfigurationItemCreate, gd as TicketAdditionalConfigurationItemUpdate, gc as TicketAdditionalConfigurationItemSummary, ge as TicketAdditionalContact, gf as TicketAdditionalContactCreate, gh as TicketAdditionalContactUpdate, gg as TicketAdditionalContactSummary, gi as TicketAttachment, gj as TicketAttachmentCreate, gl as TicketAttachmentUpdate, gk as TicketAttachmentSummary, gm as TicketCategory, gn as TicketCategoryCreate, gt as TicketCategoryUpdate, gs as TicketCategorySummary, go as TicketCategoryFieldDefault, gp as TicketCategoryFieldDefaultCreate, gr as TicketCategoryFieldDefaultUpdate, gq as TicketCategoryFieldDefaultSummary, gu as TicketChangeRequestApproval, gv as TicketChangeRequestApprovalCreate, gx as TicketChangeRequestApprovalUpdate, gw as TicketChangeRequestApprovalSummary, gy as TicketCharge, gz as TicketChargeCreate, gB as TicketChargeUpdate, gA as TicketChargeSummary, gC as TicketChecklistItem, gD as TicketChecklistItemCreate, gF as TicketChecklistItemUpdate, gE as TicketChecklistItemSummary, gG as TicketChecklistLibrary, gH as TicketChecklistLibraryCreate, gJ as TicketChecklistLibraryUpdate, gI as TicketChecklistLibrarySummary, gM as TicketHistory, gN as TicketHistoryCreate, gP as TicketHistoryUpdate, gO as TicketHistorySummary, gR as TicketNoteAttachment, gS as TicketNoteAttachmentCreate, gU as TicketNoteAttachmentUpdate, gT as TicketNoteAttachmentSummary, gQ as TicketNote, gV as TicketNoteCreate, gX as TicketNoteUpdate, gW as TicketNoteSummary, gY as TicketNoteWebhook, gZ as TicketNoteWebhookCreate, g$ as TicketNoteWebhookUpdate, g_ as TicketNoteWebhookSummary, h0 as TicketSecondaryResource, h1 as TicketSecondaryResourceCreate, h3 as TicketSecondaryResourceUpdate, h2 as TicketSecondaryResourceSummary, gL as TicketCreate, h5 as TicketUpdate, h4 as TicketSummary, gK as TicketContext, h6 as TicketWebhook, h7 as TicketWebhookCreate, h9 as TicketWebhookUpdate, h8 as TicketWebhookSummary, hf as TimeEntryCreate, hh as TimeEntryUpdate, hg as TimeEntrySummary, hb as TimeEntryAttachment, hc as TimeEntryAttachmentCreate, he as TimeEntryAttachmentUpdate, hd as TimeEntryAttachmentSummary, hi as TimeOffRequest, hj as TimeOffRequestCreate, hm as TimeOffRequestUpdate, hl as TimeOffRequestSummary, A as ApiVersionResultModel, i as AutotaskVersionResultModel, ho as ZoneInformationResultModel } from './index-BXtKN1M5.js';
1
+ import { I as Identifier, g as AuditEvent, a as FilterCondition, ez as ResolutionCaps, Q as QueryParams, cG as EmptyReasonInfo, ey as Resolution, dD as Page, cI as EntityInformationModel, cY as FieldInformationModel, cW as Field, O as OperationResult, cF as DryRunResult, c as Appointment, d as AppointmentCreate, f as AppointmentUpdate, e as AppointmentSummary, h as AuthTokenResultModel, B as BillingCode, j as BillingCodeCreate, l as BillingCodeUpdate, k as BillingCodeSummary, m as BillingItems, n as BillingItemsCreate, p as BillingItemsUpdate, o as BillingItemsSummary, C as ChangeRequestLink, q as ChangeRequestLinkCreate, s as ChangeRequestLinkUpdate, r as ChangeRequestLinkSummary, t as ChecklistLibrary, y as ChecklistLibraryCreate, D as ChecklistLibraryUpdate, z as ChecklistLibrarySummary, u as ChecklistLibraryChecklistItem, v as ChecklistLibraryChecklistItemCreate, x as ChecklistLibraryChecklistItemUpdate, w as ChecklistLibraryChecklistItemSummary, E as ClassificationIcon, G as ClassificationIconCreate, J as ClassificationIconUpdate, H as ClassificationIconSummary, K as Company, U as CompanyLocation, aP as Contact, Y as CompanyNote, g9 as Ticket, dR as Project, hq as CompositeNamesSection, ha as TimeEntry, T as CompanyCreate, a5 as CompanyUpdate, a4 as CompanySummary, S as CompanyContext, L as CompanyAlert, M as CompanyAlertCreate, R as CompanyAlertUpdate, N as CompanyAlertSummary, V as CompanyLocationCreate, X as CompanyLocationUpdate, W as CompanyLocationSummary, Z as CompanyNoteCreate, $ as CompanyNoteUpdate, _ as CompanyNoteSummary, a0 as CompanySiteConfigurations, a1 as CompanySiteConfigurationsCreate, a3 as CompanySiteConfigurationsUpdate, a2 as CompanySiteConfigurationsSummary, a6 as CompanyWebhook, a7 as CompanyWebhookCreate, a9 as CompanyWebhookUpdate, a8 as CompanyWebhookSummary, ab as ConfigurationItemBillingProductAssociations, ac as ConfigurationItemBillingProductAssociationsCreate, ae as ConfigurationItemBillingProductAssociationsUpdate, ad as ConfigurationItemBillingProductAssociationsSummary, af as ConfigurationItemCategory, ag as ConfigurationItemCategoryCreate, am as ConfigurationItemCategoryUpdate, ah as ConfigurationItemCategorySummary, ai as ConfigurationItemCategoryUdfAssociation, aj as ConfigurationItemCategoryUdfAssociationCreate, al as ConfigurationItemCategoryUdfAssociationUpdate, ak as ConfigurationItemCategoryUdfAssociationSummary, ap as ConfigurationItemDnsRecord, aq as ConfigurationItemDnsRecordCreate, as as ConfigurationItemDnsRecordUpdate, ar as ConfigurationItemDnsRecordSummary, at as ConfigurationItemNote, au as ConfigurationItemNoteCreate, aw as ConfigurationItemNoteUpdate, av as ConfigurationItemNoteSummary, ax as ConfigurationItemRelatedItem, ay as ConfigurationItemRelatedItemCreate, aA as ConfigurationItemRelatedItemUpdate, az as ConfigurationItemRelatedItemSummary, aa as ConfigurationItem, aG as ConfigurationItemType, ao as ConfigurationItemCreate, aK as ConfigurationItemUpdate, aF as ConfigurationItemSummary, an as ConfigurationItemContext, aB as ConfigurationItemSslSubjectAlternativeName, aC as ConfigurationItemSslSubjectAlternativeNameCreate, aE as ConfigurationItemSslSubjectAlternativeNameUpdate, aD as ConfigurationItemSslSubjectAlternativeNameSummary, aH as ConfigurationItemTypeCreate, aJ as ConfigurationItemTypeUpdate, aI as ConfigurationItemTypeSummary, aL as ConfigurationItemWebhook, aM as ConfigurationItemWebhookCreate, aO as ConfigurationItemWebhookUpdate, aN as ConfigurationItemWebhookSummary, aS as ContactGroupContacts, aT as ContactGroupContactsCreate, aV as ContactGroupContactsUpdate, aU as ContactGroupContactsSummary, aW as ContactGroups, aX as ContactGroupsCreate, aZ as ContactGroupsUpdate, aY as ContactGroupsSummary, a_ as ContactSummary, aR as ContactCreate, a$ as ContactUpdate, aQ as ContactContext, b0 as ContactWebhook, b1 as ContactWebhookCreate, b3 as ContactWebhookUpdate, b2 as ContactWebhookSummary, b5 as ContractBillingRule, b6 as ContractBillingRuleCreate, b8 as ContractBillingRuleUpdate, b7 as ContractBillingRuleSummary, bb as ContractBlockHourFactor, bc as ContractBlockHourFactorCreate, be as ContractBlockHourFactorUpdate, bd as ContractBlockHourFactorSummary, b9 as ContractBlock, ba as ContractBlockCreate, bg as ContractBlockUpdate, bf as ContractBlockSummary, bh as ContractCharge, bi as ContractChargeCreate, bk as ContractChargeUpdate, bj as ContractChargeSummary, bm as ContractExclusionBillingCode, bn as ContractExclusionBillingCodeCreate, bp as ContractExclusionBillingCodeUpdate, bo as ContractExclusionBillingCodeSummary, bq as ContractExclusionRoles, br as ContractExclusionRolesCreate, bt as ContractExclusionRolesUpdate, bs as ContractExclusionRolesSummary, bu as ContractExclusionSetExcludedRoles, bv as ContractExclusionSetExcludedRolesCreate, bx as ContractExclusionSetExcludedRolesUpdate, bw as ContractExclusionSetExcludedRolesSummary, by as ContractExclusionSetExcludedWorkTypes, bz as ContractExclusionSetExcludedWorkTypesCreate, bB as ContractExclusionSetExcludedWorkTypesUpdate, bA as ContractExclusionSetExcludedWorkTypesSummary, bC as ContractExclusionSets, bD as ContractExclusionSetsCreate, bF as ContractExclusionSetsUpdate, bE as ContractExclusionSetsSummary, bG as ContractMilestone, bH as ContractMilestoneCreate, bJ as ContractMilestoneUpdate, bI as ContractMilestoneSummary, bK as ContractNote, bL as ContractNoteCreate, bN as ContractNoteUpdate, bM as ContractNoteSummary, bO as ContractRate, bP as ContractRateCreate, bR as ContractRateUpdate, bQ as ContractRateSummary, bS as ContractRetainers, bT as ContractRetainersCreate, bV as ContractRetainersUpdate, bU as ContractRetainersSummary, bW as ContractRoleCosts, bX as ContractRoleCostsCreate, bZ as ContractRoleCostsUpdate, bY as ContractRoleCostsSummary, b$ as ContractServiceAdjustment, c0 as ContractServiceAdjustmentCreate, c2 as ContractServiceAdjustmentUpdate, c1 as ContractServiceAdjustmentSummary, c4 as ContractServiceBundleAdjustment, c5 as ContractServiceBundleAdjustmentCreate, c7 as ContractServiceBundleAdjustmentUpdate, c6 as ContractServiceBundleAdjustmentSummary, c3 as ContractServiceBundle, c8 as ContractServiceBundleCreate, ce as ContractServiceBundleUpdate, c9 as ContractServiceBundleSummary, ca as ContractServiceBundleUnit, cb as ContractServiceBundleUnitCreate, cd as ContractServiceBundleUnitUpdate, cc as ContractServiceBundleUnitSummary, b_ as ContractService, cf as ContractServiceCreate, cl as ContractServiceUpdate, cg as ContractServiceSummary, ch as ContractServiceUnit, ci as ContractServiceUnitCreate, ck as ContractServiceUnitUpdate, cj as ContractServiceUnitSummary, b4 as Contract, de as Invoice, eA as Resource, cK as ExpenseItem, fA as Subscription, bl as ContractCreate, cr as ContractUpdate, cm as ContractSummary, cn as ContractTicketPurchases, co as ContractTicketPurchasesCreate, cq as ContractTicketPurchasesUpdate, cp as ContractTicketPurchasesSummary, cs as Country, ct as CountryCreate, cv as CountryUpdate, cu as CountrySummary, cw as Department, cx as DepartmentCreate, cz as DepartmentUpdate, cy as DepartmentSummary, cB as DomainRegistrar, cC as DomainRegistrarCreate, cE as DomainRegistrarUpdate, cD as DomainRegistrarSummary, c_ as GlobalEntityInformationResultModel, cL as ExpenseItemAttachment, cM as ExpenseItemAttachmentCreate, cO as ExpenseItemAttachmentUpdate, cN as ExpenseItemAttachmentSummary, cP as ExpenseItemCreate, cR as ExpenseItemUpdate, cQ as ExpenseItemSummary, cS as ExpenseReport, cT as ExpenseReportCreate, cV as ExpenseReportUpdate, cU as ExpenseReportSummary, d1 as HolidaySet, d2 as HolidaySetCreate, d4 as HolidaySetUpdate, d3 as HolidaySetSummary, c$ as Holiday, d0 as HolidayCreate, d6 as HolidayUpdate, d5 as HolidaySummary, d7 as InventoryProduct, d8 as InventoryProductCreate, da as InventoryProductUpdate, d9 as InventoryProductSummary, db as InventoryStockedItemAdd, dc as InventoryStockedItemRemove, dd as InventoryStockedItemTransfer, df as InvoiceCreate, dh as InvoiceUpdate, dg as InvoiceSummary, dj as ModuleAccessResultModel, dk as NotificationHistory, dl as NotificationHistoryCreate, dn as NotificationHistoryUpdate, dm as NotificationHistorySummary, dr as Opportunity, dA as OpportunityCreate, dC as OpportunityUpdate, dB as OpportunitySummary, ds as OpportunityAttachment, dt as OpportunityAttachmentCreate, dv as OpportunityAttachmentUpdate, du as OpportunityAttachmentSummary, dw as OpportunityCategory, dx as OpportunityCategoryCreate, dz as OpportunityCategoryUpdate, dy as OpportunityCategorySummary, dE as Phase, dF as PhaseCreate, dH as PhaseUpdate, dG as PhaseSummary, dJ as Product, dK as ProductCreate, dM as ProductUpdate, dL as ProductSummary, dN as ProductVendors, dO as ProductVendorsCreate, dQ as ProductVendorsUpdate, dP as ProductVendorsSummary, dS as ProjectCharge, dT as ProjectChargeCreate, dV as ProjectChargeUpdate, dU as ProjectChargeSummary, dY as ProjectNote, dZ as ProjectNoteCreate, d$ as ProjectNoteUpdate, d_ as ProjectNoteSummary, dX as ProjectCreate, e1 as ProjectUpdate, e0 as ProjectSummary, hr as CompositeContextOptions, dW as ProjectContext, e2 as PurchaseApprovals, e3 as PurchaseApprovalsCreate, e5 as PurchaseApprovalsUpdate, e4 as PurchaseApprovalsSummary, e6 as PurchaseOrderItemReceiving, e7 as PurchaseOrderItemReceivingCreate, e9 as PurchaseOrderItemReceivingUpdate, e8 as PurchaseOrderItemReceivingSummary, ea as PurchaseOrderItems, eb as PurchaseOrderItemsCreate, ed as PurchaseOrderItemsUpdate, ec as PurchaseOrderItemsSummary, ee as PurchaseOrders, ef as PurchaseOrdersCreate, eh as PurchaseOrdersUpdate, eg as PurchaseOrdersSummary, ek as QuoteItem, el as QuoteItemCreate, en as QuoteItemUpdate, em as QuoteItemSummary, eo as QuoteLocation, ep as QuoteLocationCreate, er as QuoteLocationUpdate, eq as QuoteLocationSummary, ei as Quote, ej as QuoteCreate, ex as QuoteUpdate, es as QuoteSummary, et as QuoteTemplate, eu as QuoteTemplateCreate, ew as QuoteTemplateUpdate, ev as QuoteTemplateSummary, eE as ResourceRoleQueue, eF as ResourceRoleQueueCreate, eH as ResourceRoleQueueUpdate, eG as ResourceRoleQueueSummary, eC as ResourceRole, eD as ResourceRoleCreate, eJ as ResourceRoleUpdate, eI as ResourceRoleSummary, eK as ResourceSkill, eL as ResourceSkillCreate, eN as ResourceSkillUpdate, eM as ResourceSkillSummary, eB as ResourceCreate, e$ as ResourceUpdate, eO as ResourceSummary, eP as ResourceTimeOffAdditional, eQ as ResourceTimeOffAdditionalCreate, eS as ResourceTimeOffAdditionalUpdate, eR as ResourceTimeOffAdditionalSummary, eT as ResourceTimeOffApprover, eU as ResourceTimeOffApproverCreate, eW as ResourceTimeOffApproverUpdate, eV as ResourceTimeOffApproverSummary, eX as ResourceTimeOffBalance, eY as ResourceTimeOffBalanceCreate, e_ as ResourceTimeOffBalanceUpdate, eZ as ResourceTimeOffBalanceSummary, f0 as Role, f1 as RoleCreate, f3 as RoleUpdate, f2 as RoleSummary, f5 as ServiceCall, f6 as ServiceCallCreate, fo as ServiceCallUpdate, f7 as ServiceCallSummary, fa as ServiceCallTaskResource, fb as ServiceCallTaskResourceCreate, fd as ServiceCallTaskResourceUpdate, fc as ServiceCallTaskResourceSummary, f8 as ServiceCallTask, f9 as ServiceCallTaskCreate, ff as ServiceCallTaskUpdate, fe as ServiceCallTaskSummary, fi as ServiceCallTicketResource, fj as ServiceCallTicketResourceCreate, fl as ServiceCallTicketResourceUpdate, fk as ServiceCallTicketResourceSummary, fg as ServiceCallTicket, fh as ServiceCallTicketCreate, fn as ServiceCallTicketUpdate, fm as ServiceCallTicketSummary, fq as ServiceLevelAgreementResults, fr as ServiceLevelAgreementResultsCreate, ft as ServiceLevelAgreementResultsUpdate, fs as ServiceLevelAgreementResultsSummary, f4 as Service, fp as ServiceCreate, fv as ServiceUpdate, fu as ServiceSummary, fw as Skill, fx as SkillCreate, fz as SkillUpdate, fy as SkillSummary, fC as SubscriptionPeriod, fD as SubscriptionPeriodCreate, fF as SubscriptionPeriodUpdate, fE as SubscriptionPeriodSummary, fB as SubscriptionCreate, fH as SubscriptionUpdate, fG as SubscriptionSummary, fK as SurveyResults, fL as SurveyResultsCreate, fN as SurveyResultsUpdate, fM as SurveyResultsSummary, fI as Survey, fJ as SurveyCreate, fP as SurveyUpdate, fO as SurveySummary, fR as TagAlias, fS as TagAliasCreate, fU as TagAliasUpdate, fT as TagAliasSummary, fW as TagGroup, fX as TagGroupCreate, fZ as TagGroupUpdate, fY as TagGroupSummary, fQ as Tag, fV as TagCreate, f$ as TagUpdate, f_ as TagSummary, g2 as TaskSecondaryResource, g3 as TaskSecondaryResourceCreate, g5 as TaskSecondaryResourceUpdate, g4 as TaskSecondaryResourceSummary, g0 as Task, g1 as TaskCreate, g7 as TaskUpdate, g6 as TaskSummary, g8 as ThresholdStatusResultModel, ga as TicketAdditionalConfigurationItem, gb as TicketAdditionalConfigurationItemCreate, gd as TicketAdditionalConfigurationItemUpdate, gc as TicketAdditionalConfigurationItemSummary, ge as TicketAdditionalContact, gf as TicketAdditionalContactCreate, gh as TicketAdditionalContactUpdate, gg as TicketAdditionalContactSummary, gi as TicketAttachment, gj as TicketAttachmentCreate, gl as TicketAttachmentUpdate, gk as TicketAttachmentSummary, gm as TicketCategory, gn as TicketCategoryCreate, gt as TicketCategoryUpdate, gs as TicketCategorySummary, go as TicketCategoryFieldDefault, gp as TicketCategoryFieldDefaultCreate, gr as TicketCategoryFieldDefaultUpdate, gq as TicketCategoryFieldDefaultSummary, gu as TicketChangeRequestApproval, gv as TicketChangeRequestApprovalCreate, gx as TicketChangeRequestApprovalUpdate, gw as TicketChangeRequestApprovalSummary, gy as TicketCharge, gz as TicketChargeCreate, gB as TicketChargeUpdate, gA as TicketChargeSummary, gC as TicketChecklistItem, gD as TicketChecklistItemCreate, gF as TicketChecklistItemUpdate, gE as TicketChecklistItemSummary, gG as TicketChecklistLibrary, gH as TicketChecklistLibraryCreate, gJ as TicketChecklistLibraryUpdate, gI as TicketChecklistLibrarySummary, gM as TicketHistory, gN as TicketHistoryCreate, gP as TicketHistoryUpdate, gO as TicketHistorySummary, gR as TicketNoteAttachment, gS as TicketNoteAttachmentCreate, gU as TicketNoteAttachmentUpdate, gT as TicketNoteAttachmentSummary, gQ as TicketNote, gV as TicketNoteCreate, gX as TicketNoteUpdate, gW as TicketNoteSummary, gY as TicketNoteWebhook, gZ as TicketNoteWebhookCreate, g$ as TicketNoteWebhookUpdate, g_ as TicketNoteWebhookSummary, h0 as TicketSecondaryResource, h1 as TicketSecondaryResourceCreate, h3 as TicketSecondaryResourceUpdate, h2 as TicketSecondaryResourceSummary, gL as TicketCreate, h5 as TicketUpdate, h4 as TicketSummary, gK as TicketContext, h6 as TicketWebhook, h7 as TicketWebhookCreate, h9 as TicketWebhookUpdate, h8 as TicketWebhookSummary, hf as TimeEntryCreate, hh as TimeEntryUpdate, hg as TimeEntrySummary, hb as TimeEntryAttachment, hc as TimeEntryAttachmentCreate, he as TimeEntryAttachmentUpdate, hd as TimeEntryAttachmentSummary, hi as TimeOffRequest, hj as TimeOffRequestCreate, hm as TimeOffRequestUpdate, hl as TimeOffRequestSummary, A as ApiVersionResultModel, i as AutotaskVersionResultModel, ho as ZoneInformationResultModel } from './index-BVtycq-6.js';
2
+
3
+ /** The 23 named zones (catalog pinned from the node credential definition, G1 api-behavior section 2). */
4
+ type ZoneName = 'pre-release' | 'pre-release-uk' | 'limited-release' | 'limited-release-uk' | 'america-east' | 'america-east-2' | 'america-east-3' | 'america-west' | 'america-west-2' | 'america-west-3' | 'america-west-4' | 'uk' | 'uk2' | 'uk3' | 'old-australian' | 'australia-nz' | 'australia-2' | 'pre-release-de' | 'pre-release-es' | 'german' | 'eu1' | 'spanish' | 'other';
5
+ /**
6
+ * Zone catalog: zone name -> base URL including the `/atservicesrest` version
7
+ * path (lowercase on every zone). `other` has no catalog URL — a user-supplied
8
+ * `baseUrl` is required.
9
+ */
10
+ declare const ZONE_CATALOG: Readonly<Record<ZoneName, string | null>>;
11
+ /** All zone names, in catalog order (includes `'other'`). */
12
+ declare const ZONES: readonly ZoneName[];
13
+ /** Default zone — 'old-australian' (webservices6). */
14
+ declare const DEFAULT_ZONE: ZoneName;
15
+ /** Catalog URL for a named zone. Throws `AutotaskConfigError` for `'other'`. */
16
+ declare function zoneUrl(zone: ZoneName): string;
17
+ /**
18
+ * `baseUrl ?? zoneUrl(zone ?? 'old-australian')` — one resolved base URL for
19
+ * the whole client (no zone logic leaks into resources).
20
+ */
21
+ declare function resolveBaseUrl(partial: {
22
+ baseUrl?: string;
23
+ zone?: ZoneName;
24
+ }): string;
25
+
26
+ /** The named config profiles (issue #4). `library` is the default and changes nothing. */
27
+ type ConfigProfile = 'library' | 'agent';
28
+ /**
29
+ * Conservative limits for LLM-driven (agent) workloads (issue #4) — plain
30
+ * data, exported for inspection and pinning. A looping agent can use up the
31
+ * tenant's ~10,000 req/hour vendor budget, hold all 10 concurrent threads
32
+ * (starving other integrations), and every retry spends budget, because the
33
+ * limiter counts each attempt. The hourly limit is 80% of the vendor cap —
34
+ * 2,000/hr stay available for the other integrations on the tenant.
35
+ *
36
+ * Resolution order: EXPLICIT config > profile > library default (the
37
+ * existing validation runs on the final values). In agent mode the page size
38
+ * is additionally CAPPED at `maxPageSize` (an explicit value above the cap
39
+ * is clamped, not rejected).
40
+ */
41
+ declare const AGENT_PROFILE: {
42
+ /** 80% of the 10,000/hr vendor cap. */
43
+ readonly rateLimit: {
44
+ readonly perHour: 8000;
45
+ };
46
+ /** Default page size in agent mode. */
47
+ readonly pageSize: 25;
48
+ /** Agent-mode page-size cap (explicit values above it are clamped). */
49
+ readonly maxPageSize: 100;
50
+ readonly timeoutMs: 20000;
51
+ readonly maxRetries: 1;
52
+ readonly maxConcurrent: 3;
53
+ /** 4 MiB — an agent should not pull a 64 MiB body. */
54
+ readonly maxResponseBytes: number;
55
+ readonly resolution: {
56
+ readonly maxScanRecords: 200;
57
+ readonly maxScanPages: 2;
58
+ };
59
+ };
2
60
 
3
61
  /**
4
62
  * A read-through TTL cache (lazy purge on read; expiry is `Date.now()`
@@ -291,221 +349,6 @@ declare class AutotaskError extends Error {
291
349
  declare class AutotaskConfigError extends AutotaskError {
292
350
  constructor(message: string, options?: AutotaskErrorOptions);
293
351
  }
294
- declare class AutotaskNetworkError extends AutotaskError {
295
- constructor(message: string, options?: AutotaskErrorOptions);
296
- }
297
- declare class AutotaskTimeoutError extends AutotaskError {
298
- constructor(message: string, options?: AutotaskErrorOptions);
299
- }
300
- /** The caller's `AbortSignal` fired: distinct from a timeout, never retried. */
301
- declare class AutotaskAbortError extends AutotaskError {
302
- constructor(message: string, options?: AutotaskErrorOptions);
303
- }
304
- /** A response (or redirect) the transport refuses by policy: non-retryable. */
305
- declare class ResponseRejectedError extends AutotaskError {
306
- constructor(message: string, options?: AutotaskErrorOptions);
307
- }
308
- declare class BadRequestError extends AutotaskError {
309
- constructor(message: string, options?: AutotaskErrorOptions);
310
- }
311
- declare class UnauthorizedError extends AutotaskError {
312
- constructor(message: string, options?: AutotaskErrorOptions);
313
- }
314
- declare class ForbiddenError extends AutotaskError {
315
- constructor(message: string, options?: AutotaskErrorOptions);
316
- }
317
- declare class NotFoundError extends AutotaskError {
318
- constructor(message: string, options?: AutotaskErrorOptions);
319
- }
320
- declare class ConflictError extends AutotaskError {
321
- constructor(message: string, options?: AutotaskErrorOptions);
322
- }
323
- declare class UnprocessableEntityError extends AutotaskError {
324
- constructor(message: string, options?: AutotaskErrorOptions);
325
- }
326
- declare class RateLimitError extends AutotaskError {
327
- /** Seconds the server asked the client to wait (`Retry-After`), when present. */
328
- retryAfter?: number;
329
- /** True when the call was refused locally (the tenant cooldown gate) and never sent. */
330
- notSent?: boolean;
331
- constructor(message: string, options?: AutotaskErrorOptions);
332
- }
333
- declare class ServerError extends AutotaskError {
334
- constructor(message: string, options?: AutotaskErrorOptions);
335
- }
336
- /**
337
- * Issue #24: a 2xx whose body does not parse as JSON and whose `Content-Type`
338
- * is NOT a JSON media type (the vendor maintenance / edge HTML page). The
339
- * vendor never processed the request — `retryable` is advisory (the transport
340
- * retries it per policy on idempotent methods only). The raw, HOST-SOURCED
341
- * free text lives ONLY in `details.bodySnippet` (the first 256 bytes,
342
- * truncation-only — name-based redaction is a no-op on free text; untrusted
343
- * host content for the served surface). A JSON-ish header
344
- * (`application/json*` or a plus-json suffix media type) or an ABSENT
345
- * header keeps `INVALID_RESPONSE` (the #13/W-A7 shape-drift key); JSON
346
- * under any other header still decodes (the decode attempt is
347
- * unconditional).
348
- */
349
- declare class UnexpectedContentTypeError extends AutotaskError {
350
- constructor(message: string, options?: AutotaskErrorOptions);
351
- }
352
- /**
353
- * Issue #25: a 2xx with an EMPTY body where a result was expected (the
354
- * transport's `expectBody` contract — non-DELETE by default; DELETE and 204
355
- * keep returning `undefined`). A blank 200 from a proxy or maintenance edge
356
- * is a transport fault, not "no data". `retryable` is advisory (true for
357
- * non-DELETE reads — the loop never retries 2xx). `details = { httpStatus,
358
- * method }`. The transport attaches the typed empty-reason details (issue
359
- * #14) on it before throwing, so a pinned blind surface keeps its stamp.
360
- */
361
- declare class EmptyResponseError extends AutotaskError {
362
- constructor(message: string, options?: AutotaskErrorOptions);
363
- }
364
- /**
365
- * Issue #26: the host circuit breaker is OPEN and the call was refused
366
- * LOCALLY (pre-send — zero upstream calls, no hourly-limiter stamp, the
367
- * #6 cooldown gate's slot). `retryable: true` is a DELIBERATE divergence
368
- * from #6's `RATE_LIMITED_COOLDOWN` (`retryable: false`): the open period
369
- * is bounded and advertised via `retryAfter`, so retrying the SAME call
370
- * after the wait is the correct caller behaviour (service health, not
371
- * request shape — no narrowing needed). `notSent: true` is the shared
372
- * local-refusal marker. `details = { state: 'open' | 'half-open',
373
- * retryAfterMs, failureCount }` rides the error (and the MCP served
374
- * payload) verbatim.
375
- */
376
- declare class CircuitBreakerError extends AutotaskError {
377
- /** Seconds remaining in the open period (absent when the half-open probe budget is in flight). */
378
- retryAfter?: number;
379
- /** True when the call was refused locally (the circuit is open) and never sent. */
380
- notSent?: boolean;
381
- constructor(message: string, options?: AutotaskErrorOptions);
382
- }
383
- /**
384
- * Skill 3.5.0 / L2 (finding A1): an opt-in `hostPolicy` bound refused the
385
- * configured (or discovery-provided) host at CONFIG resolution — a typed
386
- * config error, thrown BEFORE any wire activity (zero fetch; the issue-#43
387
- * re-point never happens and the original 401 propagates untouched).
388
- * `retryable: false` (the same contract as the #6 cooldown refusal): the
389
- * bound is a caller policy, not service health, so retrying the identical
390
- * call cannot succeed. `details = { bound: 'private' | 'allowlist',
391
- * origin }` rides the error verbatim and names the offending canonical
392
- * origin.
393
- */
394
- declare class HostPolicyDeniedError extends AutotaskError {
395
- constructor(message: string, options?: AutotaskErrorOptions);
396
- }
397
- declare class ResolutionError extends AutotaskError {
398
- constructor(message: string, options?: AutotaskErrorOptions);
399
- }
400
- declare class PaginationLimitError extends AutotaskError {
401
- constructor(message: string, options?: AutotaskErrorOptions);
402
- }
403
- declare class QueryTooLongError extends AutotaskError {
404
- constructor(message: string, options?: AutotaskErrorOptions);
405
- }
406
- /** One vendor field rejection, parsed from the error body. */
407
- interface VendorFieldError {
408
- message?: string;
409
- field?: string;
410
- code?: string;
411
- }
412
- declare function parseVendorErrors(body: unknown): VendorFieldError[] | undefined;
413
- /**
414
- * #23: true when the parsed vendor `errors[]` entries of a 500 name a known
415
- * deterministic field-validation phrase (case-insensitive, over every
416
- * entry's message — string and object entries alike; `parseVendorErrors`
417
- * normalises both). The shared signal for the transport's no-retry decision
418
- * and the #26 breaker predicate (key on this, never on INVALID_RESPONSE).
419
- */
420
- declare function isDeterministicVendor500(entries: VendorFieldError[] | undefined): boolean;
421
- /**
422
- * The vendor detail line: entries joined with ` | `, or the top-level vendor
423
- * `message`, or undefined when the body names nothing.
424
- */
425
- declare function formatVendorDetail(body: unknown): string | undefined;
426
- /**
427
- * What the transport knows about the credential values it actually put on the wire for the failed
428
- * attempt. Only the header NAMES are carried — a value never leaves the transport.
429
- */
430
- interface CredentialShapeExpectation {
431
- /** Credential header names whose values were sent. */
432
- headerNames: readonly string[];
433
- /** True when EVERY one of those values had a clean shape. */
434
- allValuesClean: boolean;
435
- /** The shape artifact found, when one was found (never the value itself). */
436
- problem?: string;
437
- }
438
- /** The pointer a 401's shape diagnostic carries to the canonical env load. */
439
- declare const CREDENTIAL_SHAPE_POINTER: string;
440
- /**
441
- * Merge the extras a 401 already carries (the issue-#43 `zoneRecovery` detail, the issue-#14
442
- * pointer/emptyReason) with the C3 credential diagnostic, field by field. Later fields win.
443
- */
444
- declare function mergeDetails(base: Record<string, unknown> | undefined, extra: Record<string, unknown> | undefined): Record<string, unknown> | undefined;
445
- /**
446
- * Map an HTTP status + raw vendor body to the typed error (ARCHITECTURE
447
- * section 10). Keeps the raw body under `vendorError` and adopts a vendor
448
- * `code` that looks like a stable machine code (top-level, then the first
449
- * entry's) — otherwise the status-derived code is kept.
450
- *
451
- * The INV-A1 hotfix (second site): the vendor body is deep-redacted ONCE,
452
- * before anything is derived from it — so `vendorError` and the adopted
453
- * message (computed from the redacted body) never carry a pinned field value
454
- * (a 4xx that echoes a request body which carried a secret would otherwise
455
- * leak through the error path). `redactPersonalData` (default true) gates
456
- * the PII/CONFIDENTIAL classes; the SECRET class is always redacted.
457
- *
458
- * When the body names nothing (no `errors[]` entry, no top-level `message`),
459
- * the default status message gains a `: <body>` suffix — the redacted body
460
- * (parsed → JSON text, raw → text) truncated to 200 chars — so 4xx/5xx
461
- * triage sees the vendor text in the message itself.
462
- */
463
- declare function errorFromStatus(status: number, body: unknown, url?: string, operation?: string, redactPersonalData?: boolean, credential?: CredentialShapeExpectation): AutotaskError;
464
- /**
465
- * Stale-object protection (ARCHITECTURE section 19.3): the caller-supplied
466
- * `lastModifiedDate` no longer matches the vendor's current value. No
467
- * `If-Match`/ETag exists in the API — the plan's `staleCheck` field is the
468
- * comparison.
469
- */
470
- declare class StaleObjectError extends AutotaskError {
471
- constructor(message: string, options?: AutotaskErrorOptions);
472
- }
473
- /**
474
- * A deliberate-act refusal (section 19.5 R4): a destructive or
475
- * approval-gated operation was invoked without its exact confirmation flag.
476
- */
477
- declare class ConfirmationRequiredError extends AutotaskError {
478
- constructor(message: string, options?: AutotaskErrorOptions);
479
- }
480
- /**
481
- * Issue #9 (P1): the vendor defines no DELETE for the requested resource —
482
- * a `recovery` delete refused PRE-SEARCH (zero wire). The note carries the
483
- * spec-derived boundary sentence (plan.deleteBoundaries) + the UI-only
484
- * cleanup remedy. Never a raw vendor 405: the boundary is known locally
485
- * (the vendored spec audit) and the refusal happens before any request.
486
- */
487
- declare class DeleteBoundaryError extends AutotaskError {
488
- constructor(message: string, options?: AutotaskErrorOptions);
489
- }
490
- /**
491
- * Issue #9 (P1): a matched record's id is NOT representable as a safe JS
492
- * integer (beyond Number.MAX_SAFE_INTEGER) — the match CANNOT be addressed
493
- * through the SDK's typed delete surface. Never a silent skip: the op
494
- * refuses with this code (delete) or marks the match id null (find) so the
495
- * caller sees the unaddressable record and can clean it up via the UI.
496
- */
497
- declare class MarkerUnsafeIdError extends AutotaskError {
498
- constructor(message: string, options?: AutotaskErrorOptions);
499
- }
500
- /**
501
- * Issue #9: the recovery's bounded search TRIPPED its match cap (more
502
- * matches exist than `limit`) — the op refuses instead of returning a
503
- * silently truncated (or silently empty) result. Retry with a higher
504
- * `limit` (max 100) or a narrower `marker` / `filter`.
505
- */
506
- declare class RecoveryTruncatedError extends AutotaskError {
507
- constructor(message: string, options?: AutotaskErrorOptions);
508
- }
509
352
  /** Type guard for the hierarchy. */
510
353
  declare function isAutotaskError(err: unknown): err is AutotaskError;
511
354
 
@@ -777,79 +620,6 @@ declare function isCredentialHeaderName(name: string, extraSecretKeys?: readonly
777
620
  */
778
621
  declare function redactRecord(value: unknown, extraSecretKeys?: readonly string[]): unknown;
779
622
 
780
- /** The 23 named zones (catalog pinned from the node credential definition, G1 api-behavior section 2). */
781
- type ZoneName = 'pre-release' | 'pre-release-uk' | 'limited-release' | 'limited-release-uk' | 'america-east' | 'america-east-2' | 'america-east-3' | 'america-west' | 'america-west-2' | 'america-west-3' | 'america-west-4' | 'uk' | 'uk2' | 'uk3' | 'old-australian' | 'australia-nz' | 'australia-2' | 'pre-release-de' | 'pre-release-es' | 'german' | 'eu1' | 'spanish' | 'other';
782
- /**
783
- * Zone catalog: zone name -> base URL including the `/atservicesrest` version
784
- * path (lowercase on every zone). `other` has no catalog URL — a user-supplied
785
- * `baseUrl` is required.
786
- */
787
- declare const ZONE_CATALOG: Readonly<Record<ZoneName, string | null>>;
788
- /** All zone names, in catalog order (includes `'other'`). */
789
- declare const ZONES: readonly ZoneName[];
790
- /** Default zone — 'old-australian' (webservices6). */
791
- declare const DEFAULT_ZONE: ZoneName;
792
- /** The named config profiles (issue #4). `library` is the default and changes nothing. */
793
- type ConfigProfile = 'library' | 'agent';
794
- /**
795
- * Conservative limits for LLM-driven (agent) workloads (issue #4) — plain
796
- * data, exported for inspection and pinning. A looping agent can use up the
797
- * tenant's ~10,000 req/hour vendor budget, hold all 10 concurrent threads
798
- * (starving other integrations), and every retry spends budget, because the
799
- * limiter counts each attempt. The hourly limit is 80% of the vendor cap —
800
- * 2,000/hr stay available for the other integrations on the tenant.
801
- *
802
- * Resolution order: EXPLICIT config > profile > library default (the
803
- * existing validation runs on the final values). In agent mode the page size
804
- * is additionally CAPPED at `maxPageSize` (an explicit value above the cap
805
- * is clamped, not rejected).
806
- */
807
- declare const AGENT_PROFILE: {
808
- /** 80% of the 10,000/hr vendor cap. */
809
- readonly rateLimit: {
810
- readonly perHour: 8000;
811
- };
812
- /** Default page size in agent mode. */
813
- readonly pageSize: 25;
814
- /** Agent-mode page-size cap (explicit values above it are clamped). */
815
- readonly maxPageSize: 100;
816
- readonly timeoutMs: 20000;
817
- readonly maxRetries: 1;
818
- readonly maxConcurrent: 3;
819
- /** 4 MiB — an agent should not pull a 64 MiB body. */
820
- readonly maxResponseBytes: number;
821
- readonly resolution: {
822
- readonly maxScanRecords: 200;
823
- readonly maxScanPages: 2;
824
- };
825
- };
826
- declare const DEFAULT_PAGE_SIZE = 10;
827
- declare const MAX_PAGE_SIZE = 500;
828
- declare const DEFAULT_TIMEOUT_MS = 30000;
829
- declare const DEFAULT_MAX_RETRIES = 3;
830
- /** Autotask runs a weekly maintenance window (observed median ~2 h, ceiling 4 h — MAINTENANCE_WINDOW_MAX_MS); wait out one hour by default. */
831
- declare const DEFAULT_MAINTENANCE_MAX_WAIT_MS = 3600000;
832
- declare const DEFAULT_MAINTENANCE_POLL_MS = 30000;
833
- /**
834
- * Issue #114 (2026-10-19): the observed ceiling of the weekly maintenance
835
- * window — 4 h. Live evidence from 19 windows: 30-240 min, median ~2 h, max
836
- * 4 h. The default wait above stays 1 h (the common case, and a bounded
837
- * default for unattended callers); a worker that must ride out the worst
838
- * window passes `maintenanceMaxWaitMs: MAINTENANCE_WINDOW_MAX_MS`.
839
- */
840
- declare const MAINTENANCE_WINDOW_MAX_MS: number;
841
- declare const DEFAULT_MAX_CONCURRENT = 10;
842
- /** Default response-size cap (64 MiB) — bounds a runaway/hostile body in memory. */
843
- declare const DEFAULT_MAX_RESPONSE_BYTES: number;
844
- /** Bounded client-scan caps for resolution (section 19.2). */
845
- declare const DEFAULT_MAX_SCAN_RECORDS = 500;
846
- declare const DEFAULT_MAX_SCAN_PAGES = 4;
847
- /** Default read-cache TTL (issue #80: the plan-derived default class, 5 min). */
848
- declare const DEFAULT_READ_CACHE_TTL_MS = 300000;
849
- /** Default field-metadata cache TTL (issue #80: the 5 min class). */
850
- declare const DEFAULT_FIELD_CACHE_TTL_MS = 300000;
851
- /** Default resource-name cache TTL (issue #80: the plan-derived reference class, 1 h). */
852
- declare const DEFAULT_RESOURCE_NAME_CACHE_TTL_MS = 3600000;
853
623
  interface AutotaskConfig {
854
624
  /**
855
625
  * Config profile (issue #4): `'library'` (default — changes nothing) or
@@ -1229,83 +999,8 @@ interface ResolvedAutotaskConfig {
1229
999
  allowedOrigins: readonly string[];
1230
1000
  };
1231
1001
  }
1232
- /** Catalog URL for a named zone. Throws `AutotaskConfigError` for `'other'`. */
1233
- declare function zoneUrl(zone: ZoneName): string;
1234
- /**
1235
- * `baseUrl ?? zoneUrl(zone ?? 'old-australian')` — one resolved base URL for
1236
- * the whole client (no zone logic leaks into resources).
1237
- */
1238
- declare function resolveBaseUrl(partial: {
1239
- baseUrl?: string;
1240
- zone?: ZoneName;
1241
- }): string;
1242
- /**
1243
- * The credential core of `resolveConfig` (issue #80): the fail-closed
1244
- * credential trim + zone -> base-URL resolution WITHOUT building the
1245
- * cache instances. `ClientPool.keyFor` calls this to hash the credential
1246
- * tuple — with the channels default-on, the full `resolveConfig` would
1247
- * construct three throwaway cache instances on every pool access, so the
1248
- * key path must not (the pool key ignores cache config by design: same
1249
- * credentials = one client, first-built wins). `resolveConfig` reuses
1250
- * this for the same fields, then resolves the rest.
1251
- */
1252
- declare function resolveCredentials(config: AutotaskConfig): {
1253
- baseUrl: string;
1254
- zone?: ZoneName;
1255
- apiIntegrationCode: string;
1256
- userName: string;
1257
- secret: string;
1258
- impersonationResourceId?: string;
1259
- };
1260
- /** Validate + resolve an AutotaskConfig (fail closed; throws AutotaskConfigError). */
1261
- declare function resolveConfig(config: AutotaskConfig): ResolvedAutotaskConfig;
1262
-
1263
- /**
1264
- * A short-TTL in-memory cache of the `latest` walk's count probes (lazy
1265
- * purge on read; expiry is `Date.now()` based; LRU-ish eviction at the cap).
1266
- * Plain `number` values only — `set` refuses a non-finite number silently
1267
- * (the sentinel record never reaches it by construction; the guard keeps
1268
- * the store's type honest if a caller ever does).
1269
- */
1270
- declare class LatestCountCache {
1271
- /** The TTL in ms. */
1272
- readonly ttlMs: number;
1273
- /** The entry bound (applies to STORED entries). */
1274
- readonly maxEntries: number;
1275
- private readonly store;
1276
- /** The invalidation epoch (the `ReadCache` pattern — issue #139): bumped
1277
- * by `clear()`; capture it before a wire read and pass it to `set` so a
1278
- * probe in flight across a write cannot re-store its stale answer. */
1279
- private epochCounter;
1280
- constructor(ttlMs: number, maxEntries?: number);
1281
- /** The composite key: (resource plan key, canonical filter serialisation)
1282
- * — the `\u0000` separator is unencodable in a filter value, so no two
1283
- * (resource, conditions) pairs collide. */
1284
- static key(resourceKey: string, conditions: readonly FilterCondition[] | undefined): string;
1285
- /** The live entry's count, or `undefined` (absent OR expired — an expired
1286
- * entry is purged lazily on this read). */
1287
- get(key: string): number | undefined;
1288
- /** The invalidation epoch: bumped by `clear()`; capture it before a wire
1289
- * read and pass it to `set` so a probe in flight across a write cannot
1290
- * re-store its stale answer (issue #139, the `ReadCache` pattern). */
1291
- get epoch(): number;
1292
- /** Store a SUCCESSFUL plain-number count under `key`, live for `ttlMs`.
1293
- * `epoch` is the invalidation epoch the caller captured BEFORE its wire
1294
- * read: a probe that straddled a `clear()` (a write) is dropped, never
1295
- * re-stored with its pre-write body (issue #139). Past the cap: purge
1296
- * expired entries first, then evict the oldest-inserted (Map iteration
1297
- * order = insertion order). */
1298
- set(key: string, value: number, epoch?: number): void;
1299
- /** Drop one entry (absent = no-op). Issue #157: the stale-LOW recovery
1300
- * deletes the cached total before its one fresh wire re-probe, so the
1301
- * re-probe cannot be served by the entry it is meant to replace. */
1302
- delete(key: string): void;
1303
- /** Clear every entry (a real write through the owning client — the
1304
- * write-then-read re-fetch rule) and bump the invalidation epoch: a
1305
- * `set` captured before this `clear` is discarded (issue #139). */
1306
- clear(): void;
1307
- }
1308
1002
 
1003
+ /** Request shape + retriable-method set (split from http.ts, issue #166). */
1309
1004
  interface RequestOptions {
1310
1005
  method: 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE';
1311
1006
  /** Path after the base URL, already interpolated, e.g. '/V1.0/Companies/42'. */
@@ -1397,54 +1092,63 @@ interface RequestOptions {
1397
1092
  * `idempotent: true`.
1398
1093
  */
1399
1094
  declare const IDEMPOTENT_METHODS: readonly string[];
1095
+
1400
1096
  /**
1401
- * Build the absolute request URL (base + path + query). Issue #54: the path
1402
- * is guarded ({@link assertSafePath}) and the built URL must stay on the
1403
- * base's origin — the credential headers never leave the configured host.
1404
- */
1405
- declare function buildUrl(baseUrl: string, path: string, query?: Record<string, unknown>): string;
1406
- /**
1407
- * Map the vendor's `nextPageUrl` cursor to a request path for `baseUrl`.
1408
- * Issue #54: the cursor is server-supplied, so it is resolved against the
1409
- * base and REFUSED (ResponseRejectedError, zero wire) when its origin
1410
- * differs — page 2 never goes to another host with the credentials. The
1411
- * base pathname (e.g. `/atservicesrest`) is stripped so `buildUrl` does not
1412
- * double it.
1097
+ * A short-TTL in-memory cache of the `latest` walk's count probes (lazy
1098
+ * purge on read; expiry is `Date.now()` based; LRU-ish eviction at the cap).
1099
+ * Plain `number` values only — `set` refuses a non-finite number silently
1100
+ * (the sentinel record never reaches it by construction; the guard keeps
1101
+ * the store's type honest if a caller ever does).
1413
1102
  */
1414
- declare function cursorToPath(baseUrl: string, cursor: string): string;
1103
+ declare class LatestCountCache {
1104
+ /** The TTL in ms. */
1105
+ readonly ttlMs: number;
1106
+ /** The entry bound (applies to STORED entries). */
1107
+ readonly maxEntries: number;
1108
+ private readonly store;
1109
+ /** The invalidation epoch (the `ReadCache` pattern — issue #139): bumped
1110
+ * by `clear()`; capture it before a wire read and pass it to `set` so a
1111
+ * probe in flight across a write cannot re-store its stale answer. */
1112
+ private epochCounter;
1113
+ constructor(ttlMs: number, maxEntries?: number);
1114
+ /** The composite key: (resource plan key, canonical filter serialisation)
1115
+ * — the `\u0000` separator is unencodable in a filter value, so no two
1116
+ * (resource, conditions) pairs collide. */
1117
+ static key(resourceKey: string, conditions: readonly FilterCondition[] | undefined): string;
1118
+ /** The live entry's count, or `undefined` (absent OR expired — an expired
1119
+ * entry is purged lazily on this read). */
1120
+ get(key: string): number | undefined;
1121
+ /** The invalidation epoch: bumped by `clear()`; capture it before a wire
1122
+ * read and pass it to `set` so a probe in flight across a write cannot
1123
+ * re-store its stale answer (issue #139, the `ReadCache` pattern). */
1124
+ get epoch(): number;
1125
+ /** Store a SUCCESSFUL plain-number count under `key`, live for `ttlMs`.
1126
+ * `epoch` is the invalidation epoch the caller captured BEFORE its wire
1127
+ * read: a probe that straddled a `clear()` (a write) is dropped, never
1128
+ * re-stored with its pre-write body (issue #139). Past the cap: purge
1129
+ * expired entries first, then evict the oldest-inserted (Map iteration
1130
+ * order = insertion order). */
1131
+ set(key: string, value: number, epoch?: number): void;
1132
+ /** Drop one entry (absent = no-op). Issue #157: the stale-LOW recovery
1133
+ * deletes the cached total before its one fresh wire re-probe, so the
1134
+ * re-probe cannot be served by the entry it is meant to replace. */
1135
+ delete(key: string): void;
1136
+ /** Clear every entry (a real write through the owning client — the
1137
+ * write-then-read re-fetch rule) and bump the invalidation epoch: a
1138
+ * `set` captured before this `clear` is discarded (issue #139). */
1139
+ clear(): void;
1140
+ }
1141
+
1415
1142
  /**
1416
- * Build the QueryModel POST body shared by the page-1 `/query` POST and every
1417
- * cursor continuation (issue #118). Key order is pinned: `MaxRecords`,
1418
- * `IncludeFields`, `filter` (the POST-body order every walk test pins).
1143
+ * HttpClient — fetch transport (ARCHITECTURE section 8). Split from http.ts
1144
+ * (issue #166); see src/http.ts for the barrel and the behaviour summary.
1419
1145
  *
1420
- * - `MaxRecords` only when `maxRecords` is set. Live-verified 2026-10-19
1421
- * (ww29): the vendor IGNORES `MaxRecords` on a continuation and returns its
1422
- * own 500-row page — harmless, because the walk slices to its own limit.
1423
- * - `IncludeFields` only when `includeFields` is set, with `id` appended once
1424
- * (issue #59: the vendor omits `id` from a row unless it is named). The
1425
- * vendor HONOURS `IncludeFields` on a continuation, so carrying it turns a
1426
- * projected page-1 walk into a projected walk (before #118 page 2+ POSTed
1427
- * `{ filter }` alone and returned FULL rows — 4 keys on page 1, 73 on
1428
- * page 2, live-reproduced 2026-10-19 against ww29).
1429
- * - `filter` ALWAYS present (`[]` when no conditions) — node parity; see the
1430
- * comment at the assignment below.
1431
- */
1432
- declare function buildQueryBody(params: QueryParams): Record<string, unknown>;
1433
- /**
1434
- * Build the RequestOptions for a `/query` call (ARCHITECTURE section 8.2).
1435
- * POST-always by default — body `{ MaxRecords?, IncludeFields?, filter }` from
1436
- * {@link buildQueryBody} (one source of truth with the cursor continuations of
1437
- * a walk; `filter` is ALWAYS sent — an empty array when absent — node parity,
1438
- * and some zone versions 500 on its absence; the field is the conditions array).
1439
- * `via: 'get'` — GET `?search=<json>` with the FULL measured URL checked
1440
- * against the 2048-char cap; above it the call THROWS `QueryTooLongError`
1441
- * (never a silent switch to POST). When `includeFields` is set the SDK
1442
- * always appends `id` (issue #59: the vendor omits `id` from a row unless
1443
- * it is named, and every caller needs the id to act on the row).
1444
- */
1445
- declare function buildQueryRequest(baseUrl: string, resourcePath: string, params: QueryParams): RequestOptions;
1446
- /** Run `fn` with `signal` cancelling every SDK request it starts (and their retry waits). */
1447
- declare function runWithSignal<T>(signal: AbortSignal, fn: () => T): T;
1146
+ * `request()` is an orchestrator over: the pre-send gates (cooldown, breaker),
1147
+ * a per-attempt loop (`sendOnce` -> `handleSuccess` | `handleFailureStatus`
1148
+ * each yielding "done" or "retry"), and the settle steps (success/failure
1149
+ * bookkeeping, audit, cache invalidation).
1150
+ */
1151
+
1448
1152
  declare class HttpClient {
1449
1153
  /**
1450
1154
  * The LIVE base URL (issue #43): the construction-time value until a zone
@@ -1487,12 +1191,10 @@ declare class HttpClient {
1487
1191
  private readonly maintenanceMaxWaitMs;
1488
1192
  private readonly maintenancePollMs;
1489
1193
  private readonly maxResponseBytes;
1490
- private readonly perHour;
1491
- /** The resolved profile (issue #4) — the agent profile changes the
1492
- * exhaustion `suggestedAction` (stop/narrow, never "raise the limit"). */
1493
- private readonly profile;
1494
- /** Request timestamps inside the trailing hour (only used when `rateLimit.perHour` is set). */
1495
- private readonly hourStamps;
1194
+ /** Local hourly budget (undefined when `rateLimit.perHour` is off). */
1195
+ private readonly hourly;
1196
+ /** FIFO semaphore bounding in-flight requests to `maxConcurrent`. */
1197
+ private readonly semaphore;
1496
1198
  /** Tenant 429 cooldown gate store (undefined when the gate is disabled). */
1497
1199
  private readonly cooldownStore;
1498
1200
  private readonly cooldownMaxMs;
@@ -1536,8 +1238,6 @@ declare class HttpClient {
1536
1238
  * already travels in every auth header; nothing new crosses the boundary). */
1537
1239
  readonly userName: string;
1538
1240
  private readonly onAudit;
1539
- private inFlight;
1540
- private readonly waitQueue;
1541
1241
  constructor(config: ResolvedAutotaskConfig);
1542
1242
  /**
1543
1243
  * The LOCAL hourly-budget state (the sliding window this client counts):
@@ -1551,69 +1251,12 @@ declare class HttpClient {
1551
1251
  used: number;
1552
1252
  remaining: number;
1553
1253
  } | undefined;
1554
- /**
1555
- * Breaker success recording (issue #26): a 2xx that got through counts
1556
- * toward `successesToClose` whenever the host has an armed state (open or
1557
- * half-open — a half-open probe, or a threshold-bypass probe of a downed
1558
- * host; decision Q10). A probe completion decrements the admitted-probe
1559
- * budget. On reaching `successesToClose` the circuit CLOSES: counters
1560
- * reset and the entry is DELETED (a healthy host leaves no trace — the
1561
- * #6 delete-on-2xx precedent). A success while closed (or with no entry)
1562
- * is a no-op: the closed failure window is a rate window that prunes
1563
- * itself lazily, not a gate a success clears early.
1564
- */
1565
- private recordBreakerSuccess;
1566
- /**
1567
- * Breaker failure recording (issue #26): called from the outer catch (the
1568
- * single choke point every surfaced failure passes through) for errors
1569
- * the failure predicate counts. While closed, a counted failure appends
1570
- * to the window-pruned `failures` (keeping only timestamps strictly inside
1571
- * `failureWindowMs`) and OPENS the circuit at `failureThreshold`. While
1572
- * open / half-open (a probe failure, a racy late probe failure, or a
1573
- * threshold-bypass failure) it RE-ARMS the open period from now and
1574
- * resets the success count (the #6 "a 429 re-arms" precedent — a bypass
1575
- * failure never fails silently).
1576
- */
1577
- private recordBreakerFailure;
1578
- private acquire;
1579
- private release;
1580
- /**
1581
- * One request: build URL/headers, apply the whole-call deadline, retry
1582
- * idempotent methods on 429/5xx, map failures to the typed errors.
1583
- * Returns the RAW parsed body (2xx); `undefined` for an empty 2xx body.
1584
- */
1585
1254
  /**
1586
1255
  * One audit event per settled request (section 19.3): the correlation id,
1587
1256
  * the redacted request body, the outcome. An audit hook that throws never
1588
1257
  * breaks the request.
1589
1258
  */
1590
1259
  private emitAudit;
1591
- /** Sliding-window `rateLimit.perHour` limiter: waits for a slot within the call budget, else throws. */
1592
- private takeHourlySlot;
1593
- /**
1594
- * Issue #43: the re-point gate — the zone re-resolution is available for
1595
- * this request. ALL gates must hold (the WYRE prior art, adopted
1596
- * verbatim): the flag is ON (strict `true`, off by default), the live
1597
- * base is CATALOG-derived (an explicit baseUrl — a bare one, or
1598
- * `zone: 'other'` + baseUrl — is NEVER re-pointed: the operator said
1599
- * where to go), and the path is RELATIVE (an absolute path, e.g. a
1600
- * cursor `nextPageUrl`, is already baked to a host we do not own and
1601
- * cannot be rewritten). The fourth gate — "this is not already the
1602
- * recovery retry" (exactly ONE retry, never a loop) — is enforced at the
1603
- * call site by the request-local `zoneRetry` flag.
1604
- */
1605
- private canReResolveZone;
1606
- /**
1607
- * Issue #43: one UNAUTHENTICATED vendor zone-discovery call
1608
- * (`GET https://webservices.autotask.net/atservicesrest/v1.0/zoneInformation?user=<userName>`
1609
- * — NO auth headers: the recovery signal must not leak credentials to a
1610
- * host that is not the configured API base). Returns the tenant's
1611
- * resolved zone base URL, or undefined on ANY fault (network, non-2xx,
1612
- * redirect, malformed body, missing/invalid `url`) — the caller then
1613
- * propagates the original 401 untouched (zero retry). Bounded by the
1614
- * SAME whole-call deadline as the request it recovers.
1615
- */
1616
- private discoverZoneBase;
1617
1260
  /**
1618
1261
  * Issue #43: re-point the client to the tenant's newly resolved zone
1619
1262
  * base. The transport's PER-HOST state is RE-DERIVED, so the re-pointed
@@ -1626,63 +1269,78 @@ declare class HttpClient {
1626
1269
  * no envelope change).
1627
1270
  */
1628
1271
  private repointZoneBase;
1629
- request<T>(opts: RequestOptions): Promise<T>;
1630
- }
1631
- declare function unwrapItems<T>(body: unknown, operation?: string): {
1632
- items: T[];
1633
- pageDetails: PagingModel;
1634
- };
1635
- /**
1636
- * get: expects `{ item: T }`. `item === null` THROWS `NotFoundError` (the
1637
- * vendor not-found signal — HTTP may be 200) with `httpStatus: 200` and
1638
- * `resourceIds: [id]` when `id` is given — and, when `entity` is given as
1639
- * well, the labeled companion `details.idRefs: [{ entity, id }]` (issue
1640
- * #116: the legacy field never says which vendor table the id addresses,
1641
- * and the caller of a generic get knows it — the vendor entity name,
1642
- * singular snake_case, e.g. `company`, `ticket`, `resource`).
1643
- */
1644
- declare function unwrapItem<T>(body: unknown, id?: Identifier, operation?: string, entity?: string): T;
1645
- /** count: expects `{ queryCount: number }` (an object, not a bare number) → the plain number. */
1646
- declare function unwrapQueryCount(body: unknown, operation?: string): number;
1647
- /** create/update/delete: expects `{ itemId }` (accepts `{ id }` too) → `{ id }`. */
1648
- declare function unwrapOperation(body: unknown, operation?: string): OperationResult;
1649
- /** invoice markup/pdf + attachment downloads: raw pass-through (no re-wrap). */
1650
- declare function passthrough<T>(body: unknown): T;
1651
-
1652
- /** A page fetcher: request page N at the given size; report paging facts from `pageDetails`. */
1653
- type PageFetcher<T> = (page: number, pageSize: number) => Promise<Page<T>>;
1654
- /** 1000-page walk guard (the node's `MAX_PAGES`). */
1655
- declare const MAX_PAGES = 1000;
1656
- interface PaginateOptions {
1657
- /** Page size for the walk. Default 10; clamped into 1..500. */
1658
- pageSize?: number;
1659
1272
  /**
1660
- * `collectAll` only: refuse to accumulate more than this many records.
1661
- * Exceeding it throws `PaginationLimitError` (never a silent truncation).
1662
- * Default: unbounded (the 1000-page walk guard still applies).
1273
+ * Breaker success recording (issue #26). A probe admitted on one host must
1274
+ * never record onto another: if the call re-pointed (issue #43) the
1275
+ * outcome was measured on a different host — void the probe (the admitted
1276
+ * budget on the original host dangles for the rest of the open period;
1277
+ * bounded, conservative, nothing crosses hosts).
1663
1278
  */
1664
- maxRecords?: number;
1279
+ private recordBreakerSuccess;
1280
+ /** Breaker failure recording (issue #26); same host-pinning as the success recorder (issue #43). */
1281
+ private recordBreakerFailure;
1282
+ /** The caller's signal wins over the deadline when both fired. */
1283
+ private interrupted;
1284
+ /** A retry only runs when its wait fits inside what is left of the call budget. */
1285
+ private canWait;
1286
+ private pause;
1287
+ /** The deadline is a re-armable timer (a maintenance wait extends it); `AbortSignal.timeout` cannot be extended or cleared. */
1288
+ private armDeadline;
1289
+ /** If the retry's wait fits the budget: log, count the attempt, pause, and report true (loop again). */
1290
+ private retryAfterDelay;
1291
+ /**
1292
+ * Maintenance-window wait (the weekly Autotask window): bounded by
1293
+ * `maintenanceMaxWaitMs` from the FIRST such response (one budget shared
1294
+ * by the 2xx-page and any-status sites), polling `maintenancePollMs`, a
1295
+ * fresh per-attempt deadline after each wait; does not consume
1296
+ * `maxRetries`. True when a wait happened (loop again); false when the
1297
+ * budget is spent (`maintenanceBudgetSpent` is set).
1298
+ */
1299
+ private waitOutMaintenance;
1300
+ /** The wait is a FACT for the request: stamp `details.maintenance` (and the exhaustion action) on a surfaced error. */
1301
+ private stampMaintenance;
1302
+ private auditNotSent;
1303
+ /**
1304
+ * Tenant 429 cooldown gate (issue #6): a 429 armed the gate for this
1305
+ * tenant — fail LOCALLY (before the semaphore, the hourly limiter and
1306
+ * fetch: zero upstream calls) until the deadline passes.
1307
+ */
1308
+ private gateCooldown;
1309
+ /**
1310
+ * Host circuit breaker gate (issue #26): the SAME pre-send slot as the
1311
+ * #6 cooldown gate (cooldown first): OUTSIDE the retry loop, before the
1312
+ * hourly limiter, the semaphore and fetch — a refusal makes zero fetches,
1313
+ * consumes no hourly stamp and no concurrency slot.
1314
+ * `thresholdInformation.get()` bypasses the REFUSAL
1315
+ * (`bypassCircuitBreaker`) but its outcome is still recorded.
1316
+ */
1317
+ private gateBreaker;
1318
+ /**
1319
+ * Take the hourly slot and a semaphore permit, fetch, and read the body.
1320
+ * `retry` when a network error is retriable (already waited); throws the
1321
+ * typed error otherwise. The permit is released on every path.
1322
+ */
1323
+ private sendOnce;
1324
+ /** Classify a 2xx: empty body, JSON (redacted), or a non-JSON page (maintenance wait / retry / typed error). */
1325
+ private handleSuccess;
1326
+ private handleNonJson2xx;
1327
+ /**
1328
+ * Classify a non-2xx: any-status maintenance wait, the 429/5xx retry leg,
1329
+ * the 401 zone recovery, else throw the typed error (arming the 429
1330
+ * cooldown when it surfaces). Returns RETRY or throws.
1331
+ */
1332
+ private handleFailureStatus;
1333
+ private onSuccess;
1334
+ private onFailure;
1335
+ /** A real write (even a failed one — it may have partly applied) voids cached reads. */
1336
+ private invalidateAfterWrite;
1337
+ /**
1338
+ * One request: build URL/headers, apply the whole-call deadline, retry
1339
+ * idempotent methods on 429/5xx, map failures to the typed errors.
1340
+ * Returns the RAW parsed body (2xx); `undefined` for an empty 2xx body.
1341
+ */
1342
+ request<T>(opts: RequestOptions): Promise<T>;
1665
1343
  }
1666
- /** Clamp a requested page size into the vendor range 1..500. */
1667
- declare function clampPageSize(pageSize: number): number;
1668
- /**
1669
- * `ceil(total / pageSize)`; 0 for an empty result set. `total` must be a TRUE
1670
- * match count (`count()`, POST .../query/count) — never `pageDetails.requestCount`,
1671
- * which echoes the requested MaxRecords.
1672
- */
1673
- declare function totalPagesFor(total: number, pageSize: number): number;
1674
- /**
1675
- * Yield pages one at a time until the walk ends. Requests pages 1, 2, 3, ...
1676
- * at `clampPageSize(opts.pageSize ?? 10)`; a walk that would fetch a 1001st
1677
- * page throws `PaginationLimitError` before issuing the request.
1678
- */
1679
- declare function paginate<T>(fetchPage: PageFetcher<T>, opts?: PaginateOptions): AsyncGenerator<Page<T>, void>;
1680
- /** Yield items across pages (flattened). */
1681
- declare function paginateItems<T>(fetchPage: PageFetcher<T>, opts?: PaginateOptions): AsyncGenerator<T, void>;
1682
- /** Collect every item across all pages into one array (`queryAll`'s workhorse). */
1683
- declare function collectAll<T>(fetchPage: PageFetcher<T>, opts?: PaginateOptions): Promise<T[]>;
1684
- /** Materialise an async iterator of items into an array. */
1685
- declare function toArray<T>(iter: AsyncIterable<T>): Promise<T[]>;
1686
1344
 
1687
1345
  /**
1688
1346
  * Relationship map + blind-surface stamps + the delete-boundary /
@@ -1717,7 +1375,7 @@ declare function toArray<T>(iter: AsyncIterable<T>): Promise<T[]>;
1717
1375
  * queryBounded noteChars free-text cap (issue #61 — response-side only);
1718
1376
  * - docs/API.md §11.7/§11.8/§11.9/§11.10/§11.11/§11.12 render the same facts.
1719
1377
  *
1720
- * planHash: baf3e855956ed5450e1efea640845cb0fbc3a3a5a631a6159d4702b8dc726170
1378
+ * planHash: 95746a69c86daeb7a5d10fa77dd92189c87c8145c547d06275fd0b517b913c9b
1721
1379
  */
1722
1380
 
1723
1381
  /** One pinned blind-surface stamp (the result-time sentinel object). */
@@ -1875,6 +1533,13 @@ interface RelationshipResource {
1875
1533
  zoneFacts: {
1876
1534
  createRequiredSet?: string[];
1877
1535
  quirks?: string[];
1536
+ /** Recorded successful live writes (issue #195) — the gate's liveness evidence. */
1537
+ liveWrites?: Array<{
1538
+ op: string;
1539
+ date: string;
1540
+ outcome: string;
1541
+ note?: string;
1542
+ }>;
1878
1543
  createGuidance?: {
1879
1544
  createOp: string | null;
1880
1545
  parentScoped: boolean;
@@ -2152,7 +1817,44 @@ interface SearchWithDetail<T> {
2152
1817
  items: T[];
2153
1818
  miss?: MissDetail;
2154
1819
  }
2155
- declare abstract class BaseResource<T = Record<string, unknown>, TCreate = Record<string, unknown>, TUpdate = Record<string, unknown>> {
1820
+
1821
+ /** A page fetcher: request page N at the given size; report paging facts from `pageDetails`. */
1822
+ type PageFetcher<T> = (page: number, pageSize: number) => Promise<Page<T>>;
1823
+ /** 1000-page walk guard (the node's `MAX_PAGES`). */
1824
+ declare const MAX_PAGES = 1000;
1825
+ interface PaginateOptions {
1826
+ /** Page size for the walk. Default 10; clamped into 1..500. */
1827
+ pageSize?: number;
1828
+ /**
1829
+ * `collectAll` only: refuse to accumulate more than this many records.
1830
+ * Exceeding it throws `PaginationLimitError` (never a silent truncation).
1831
+ * Default: unbounded (the 1000-page walk guard still applies).
1832
+ */
1833
+ maxRecords?: number;
1834
+ }
1835
+ /** Clamp a requested page size into the vendor range 1..500. */
1836
+ declare function clampPageSize(pageSize: number): number;
1837
+ /**
1838
+ * `ceil(total / pageSize)`; 0 for an empty result set. `total` must be a TRUE
1839
+ * match count (`count()`, POST .../query/count) — never `pageDetails.requestCount`,
1840
+ * which echoes the requested MaxRecords.
1841
+ */
1842
+ declare function totalPagesFor(total: number, pageSize: number): number;
1843
+ /**
1844
+ * Yield pages one at a time until the walk ends. Requests pages 1, 2, 3, ...
1845
+ * at `clampPageSize(opts.pageSize ?? 10)`; a walk that would fetch a 1001st
1846
+ * page throws `PaginationLimitError` before issuing the request.
1847
+ */
1848
+ declare function paginate<T>(fetchPage: PageFetcher<T>, opts?: PaginateOptions): AsyncGenerator<Page<T>, void>;
1849
+ /** Yield items across pages (flattened). */
1850
+ declare function paginateItems<T>(fetchPage: PageFetcher<T>, opts?: PaginateOptions): AsyncGenerator<T, void>;
1851
+ /** Collect every item across all pages into one array (`queryAll`'s workhorse). */
1852
+ declare function collectAll<T>(fetchPage: PageFetcher<T>, opts?: PaginateOptions): Promise<T[]>;
1853
+ /** Materialise an async iterator of items into an array. */
1854
+ declare function toArray<T>(iter: AsyncIterable<T>): Promise<T[]>;
1855
+
1856
+ /** Query-walk layer of `BaseResource` (issue #165): paging, bounded query, blind count, latest probes. */
1857
+ declare abstract class QueryBase<T = Record<string, unknown>> {
2156
1858
  protected readonly http: HttpClient;
2157
1859
  protected readonly config: BaseResourceConfig;
2158
1860
  /** Default page size for query walks (the client's resolved `pageSize`). */
@@ -2170,10 +1872,8 @@ declare abstract class BaseResource<T = Record<string, unknown>, TCreate = Recor
2170
1872
  constructor(http: HttpClient, config: BaseResourceConfig, pageSize?: number);
2171
1873
  /** One page fetch: page 1 POSTs the QueryModel body; later pages POST the same body (`buildQueryBody`) to the absolute cursor (issue #118). */
2172
1874
  protected fetchPage(params: QueryParams, page: number, pageSize: number, state: QueryWalkState): Promise<Page<T>>;
2173
- private readPage;
2174
1875
  /** Build the per-walk fetcher (closure keeps cursor state private to this walk). */
2175
1876
  protected pageFetcher(params?: QueryParams): PageFetcher<T>;
2176
- private walkPageSize;
2177
1877
  /** Stream items across pages (the resource `query` surface). */
2178
1878
  protected queryItems(params?: QueryParams): AsyncIterable<T>;
2179
1879
  /** Stream page objects (the resource `queryPages` surface). */
@@ -2209,203 +1909,15 @@ declare abstract class BaseResource<T = Record<string, unknown>, TCreate = Recor
2209
1909
  * walk below is bit-for-bit the existing path.
2210
1910
  * Pure read; no mutation paths involved.
2211
1911
  */
2212
- queryBounded(params?: BoundedQueryParams): Promise<BoundedQueryResult<T>>;
2213
- /** Issue #61 (slice A): the noteChars truncation at the SINGLE chokepoint
2214
- * of `queryBounded` — the normal walk and the `latest` paths both
2215
- * produced their `BoundedQueryResult` here (the single chokepoint the
2216
- * plan pins: R5). Copy-on-truncate (the input records are never
2217
- * mutated); the additive `noteCharsTruncated` stamp = the truncated-
2218
- * field count, ABSENT when 0. The resource's untrusted-class field set
2219
- * is the generated stamp (the SAME plan column the registry's
2220
- * `metadata.untrustedFields` channel stamps — zero second source of
2221
- * truth); an absent set = the cap is a no-op for the resource (bit-for-
2222
- * bit the pre-slice result). */
2223
- private applyNoteChars;
2224
- /** The bounded walk loop (shared by the normal `queryBounded` path and the
2225
- * `latest` modes): walks the vendor cursor until `limit` TOTAL records
2226
- * are collected or the cursor is exhausted; the 1000-page guard is a
2227
- * SOFT stop (never a throw). ONE per-walk closure (walks never share
2228
- * state). */
2229
- private walkBounded;
2230
- /** A walk stop is TRUNCATED when the 1000-page guard fired, or the limit
2231
- * was met with a live next cursor (or a sliced final page): rows exist
2232
- * past the stop point, and a top-N-by-id over the collected set alone is
2233
- * unprovable (the `latest` mechanism refuses instead of guessing). */
2234
- private walkTruncated;
2235
- /** The 0-item result stamping — the ONE source of truth (the normal walk
2236
- * and the `latest` empty outcome both ride it): the typed blind-surface
2237
- * sentinel + the pinned empty-reason, through the filter-aware predicate
2238
- * `blindStampFor` (`unfiltered-blind` surfaces stamp ONLY the unfiltered
2239
- * call — a filtered empty result is a true absence; live-verified
2240
- * S12-B P1: the filtered tickets.query returns data on ww29). Additive:
2241
- * the walk values are never mutated. The PINNED reason is filter-aware
2242
- * like the blind stamps (post-verification F1): a FILTERED empty walk on
2243
- * a pinned surface is a true absence in that filter's scope, never a
2244
- * tenant-scope claim — the pin states "EMPTY FOR THIS API USER" across
2245
- * the whole surface, which a filter-scope 0 does not establish (no
2246
- * speculation). */
2247
- private stampEmptyQueryResult;
2248
- /** Issue #59: id comparison honouring the Identifier contract (safe
2249
- * numbers numerically; exact-digit strings via `BigInt`; mixed
2250
- * number/string via `BigInt(String(a))`) — ids above 2^53 stay exact. */
2251
- private compareIds;
2252
- /** Issue #127: the `latest` walk's count probes through the per-client
2253
- * short-TTL count cache (`LatestCountCache` — fixed 30 s TTL, the
2254
- * memory guard; cleared on every real write through this client, the
2255
- * write-then-read re-fetch rule). Only a SUCCESSFUL plain-number vendor
2256
- * count answer is stored: the blind-surface / pinned-empty sentinels are
2257
- * RECORDS and pass through un-stored (the plan-pinned stamps stay fresh
2258
- * and re-derive on every call), and an error rejects before any store.
2259
- * The key is (resource plan key, canonical filter serialisation — the
2260
- * normalised conditions' JSON): the initial `count(F)` probe and every
2261
- * `id gt T` threshold probe are separate entries, and a re-asked
2262
- * "top N" within the TTL makes ZERO extra count calls for every CACHED
2263
- * probe (the bracket/search sequence is deterministic given the counts);
2264
- * a probe that answered 0 is never cached, so it re-wires (issue #157).
2265
- * Issue #157: two corrections to the snapshot trade. (1) A total of 0 is
2266
- * NEVER stored — a 0 is rare and cheap to re-probe, and a cached 0 fed
2267
- * the false-empty branch (a repeat after an out-of-band insert returned
2268
- * no rows without walking). (2) `fresh: true` DELETES the entry before
2269
- * the wire read and re-stores the fresh answer — the ONE re-probe the
2270
- * stale-LOW recovery in `latestWalk` is allowed. Counts are snapshots,
2271
- * not contracts: the truncation guard covers the growth-of-total
2272
- * direction; a stale-LOW total within the TTL is resolved by that one
2273
- * fresh re-probe (never by the guard alone). The plain `count` op and
2274
- * `operations.aggregate` call `countGlobal` directly and promise fresh
2275
- * totals — this wrapper is used ONLY on the latest-walk probe path.
2276
- */
2277
- private latestProbeCount;
2278
- /** Issue #59: one `latest` threshold count probe — a ROWLESS
2279
- * `count(F ∧ id gt T)` call (the vendor caps — ≤500 OR-conditions,
2280
- * 8000 chars serialised — leave a single `gt` condition room on any
2281
- * filter). Issue #127: it rides the per-client short-TTL count cache — the same (resource, conditions) probe within the 30 s window is reused (zero vendor calls); a sentinel answer is never cached. The `BlindCountResult` sentinel (a record, not a number —
2282
- * the declared `number` return is the documented under-type) unwraps to
2283
- * its `count` value (always 0): at or above the max matching id the
2284
- * count is 0, which is exactly the bracket-termination signal. */
2285
- private countAboveId;
2286
- /**
2287
- * Issue #59: the `latest: N` mechanism — the N highest-`id` rows,
2288
- * count-anchored (the vendor has no sort parameter; `id` is the primary
2289
- * key, so "highest id" is the only order the SDK can prove). Three
2290
- * branches:
2291
- * 1. PROBE: `C = count(F)` — ONE rowless count call. A
2292
- * `BlindCountResult` sentinel (a record, not a number) routes to
2293
- * branch 3; a plain number to branch 2.
2294
- * 2. NON-BLIND:
2295
- * - `C === 0` → the stamped empty (1 wire total — the 0-item stamping
2296
- * reused; a pinned `emptyReason` where the plan pins one).
2297
- * - `C <= 2500` → FULL-SET mode: the bounded walk of `F` (limit `C`,
2298
- * page size min(500, C)) collects the COMPLETE matching set — wire
2299
- * 1 + ceil(C/500) <= 6, independent of table size. A truncated walk
2300
- * (the vendor's rows disagree with its own count) is
2301
- * LATEST_WINDOW_INCOMPLETE — the top-N of a truncated set is
2302
- * unprovable — EXCEPT issue #157: when `C` came from the CACHE, the
2303
- * total is re-probed ONCE fresh (the stale-LOW recovery: a larger
2304
- * fresh total continues the walk against it; the refusal stands only
2305
- * when the fresh probe confirms the cached value). Sort
2306
- * id-descending; return the top N (a set of C < N returns itself).
2307
- * - `C > 2500` → THRESHOLD mode: find the smallest id threshold `T`
2308
- * with `count(F ∧ id gt T) <= N` by exponential bracketing
2309
- * (T = 1, 2, 4, …) + binary search — each probe ONE rowless count
2310
- * call, the total budget LATEST_MAX_COUNT_PROBES (exhaustion →
2311
- * LATEST_THRESHOLD_UNRESOLVED; worst case 1 + 2·log2(maxId)). The
2312
- * window {F ∧ id gte T} holds exactly N+1 rows: `T` is the SMALLEST
2313
- * threshold with count <= N, so `count(F ∧ id gt (T-1)) > N`, and
2314
- * `count(gt (T-1)) = count(gt T) + count(eq T)` forces a matching
2315
- * row with `id == T` (ids are unique primary keys) — every row
2316
- * outside the window has a lower id, so the N highest of the window
2317
- * ARE the N highest overall. Final step: ONE bounded walk of the
2318
- * window (limit N+1, ≤ 6 pages), sort id-descending, take N.
2319
- * `hasMore: false` — complete FOR THE REQUEST (the table may hold
2320
- * more rows; `<resource>.count` is the total).
2321
- * 3. BLIND: the count cannot be trusted (a blind 0 proves nothing) → the
2322
- * bounded walk of `F` up to `limit` (default 500). A completing walk
2323
- * (cursor exhausted within the limit) returns the sorted top-N WITH
2324
- * the blind-surface sentinel stamp — the "highest id" claim is scoped
2325
- * to the caller-visible enumeration (the one new stamp usage: the
2326
- * normal path stamps only 0-item results). A truncated walk (the limit
2327
- * reached with a live next cursor, or the 1000-page guard) →
2328
- * LATEST_WINDOW_INCOMPLETE — a truncated enumeration's top-N-by-id is
2329
- * unprovable, so the op refuses instead of returning a possibly-wrong
2330
- * answer.
2331
- * `includeFields` always carries `id` (the P1 id-append,
2332
- * `buildQueryRequest`), which `latest` sorts on. Pure read; no mutation
2333
- * paths involved. Issue #127: every count probe of this walk (the
2334
- * initial `count(F)` + the `id gt T` threshold probes) rides the
2335
- * per-client short-TTL count cache (30 s; a real write through this
2336
- * client clears it) — a re-asked "top N" within the window reuses every
2337
- * CACHED probe (zero extra vendor count calls); sentinel answers are
2338
- * never cached (the plan-pinned stamps stay fresh), and a 0 total is
2339
- * never cached either (issue #157: a 0 is cheap to re-probe and a cached
2340
- * 0 would shadow an out-of-band insert), so a 0-answering probe re-wires.
2341
- * The stale-LOW direction is closed by the ONE fresh re-probe above. The
2342
- * stale-HIGH direction is the documented snapshot trade, NOT "safe by
2343
- * construction": the threshold probes are cache-served like every other
2344
- * probe (no fresh re-probe exists on that path), so a cached threshold
2345
- * count higher than reality can under-report the ROW COUNT within the
2346
- * TTL — the returned top-N stays correct, and full-set mode ends when the
2347
- * cursor exhausts. The plain `count` op and
2348
- * `operations.aggregate` bypass the cache by construction and promise
2349
- * fresh totals.
2350
- */
2351
- private latestWalk;
2352
- /** The shared `latest` completion: the (provably complete or
2353
- * stamp-scoped) set sorted id-descending, top N taken. `hasMore: false`
2354
- * — the result is complete FOR THE REQUEST (the table may hold more
2355
- * rows; `<resource>.count` is the total). */
2356
- private finishLatest;
2357
- /** The blind branch of `latestWalk` (branch 3): the bounded walk of `F`
2358
- * up to `limit` (default 500) + the id-descending top-N. A completing
2359
- * walk (cursor exhausted within the limit) is stamped with the
2360
- * blind-surface sentinel — the "highest id" claim is scoped to the
2361
- * caller-visible enumeration (the note says exactly that; the one new
2362
- * stamp usage, the normal path stamps only 0-item results); a truncated
2363
- * walk is LATEST_WINDOW_INCOMPLETE. */
2364
- private latestBlindWalk;
2365
- /** Issue #59: the typed refusal when the id-threshold probe budget is
2366
- * exhausted — the NEW code is an addition to the served error-code
2367
- * surface (docs/API.md §2; no new class — the `errorCodes` baseline is
2368
- * untouched). Zero wire beyond the probes. */
2369
- private latestThresholdUnresolvedError;
2370
- /** Issue #59: the typed refusal when a `latest` walk truncates — the NEW
2371
- * code is an addition to the served error-code surface (docs/API.md
2372
- * §2). A truncated enumeration's top-N-by-id is unprovable, so the op
2373
- * refuses instead of returning a possibly-wrong answer. */
2374
- private latestWindowIncompleteError;
1912
+ queryBounded(params?: BoundedQueryParams): Promise<BoundedQueryResult<T>>;
2375
1913
  /** `POST /V1.0/<E>/query/count` → `queryCount` unwrapped to a plain number —
2376
1914
  * or, on a plan-pinned blind surface, the `{ count: 0, blindSurface }`
2377
1915
  * typed sentinel (S12-C T10; see `BlindCountResult`). */
2378
1916
  protected countGlobal(params?: QueryParams): Promise<number>;
2379
- /** Single-record GET through the read cache (issue #80: default-on; with
2380
- * `cache: false` this is exactly one `http.request` — the bit-for-bit
2381
- * uncached path). Only the successful
2382
- * (already redacted) body is stored — errors throw before `set`.
2383
- * `fresh` skips the lookup (the read still refreshes the entry for the
2384
- * other callers): mutation-path reads (stale-object guard, dry-run diff)
2385
- * and the composite ROOT read of a hot resource (issue #36 — the
2386
- * ticket-composite root) must see the live record, never a snapshot.
2387
- * `resource` (issue #32) is the plan key of the entity this path
2388
- * points to: the stored entry's TTL is the per-resource override for
2389
- * that key when `cache.perResourceTtlMs` names it, else `ttlMs`. */
2390
- private cachedGet;
2391
- /**
2392
- * Entity-metadata read through the opt-in field cache (issue #31; off by
2393
- * default: with no fieldCache this is exactly one `http.request` — the
2394
- * bit-for-bit uncached trio path). One private helper beside `cachedGet`,
2395
- * for the same three reasons the read cache exists: a vendor drift
2396
- * (deterministic 500, INVALID_RESPONSE) must not be served stale, repeat
2397
- * reads must not pay the wire, and concurrent callers must not issue
2398
- * duplicate requests. The UNWRAPPED value is stored (never the raw
2399
- * envelope); an EMPTY or FAILED result is never cached (a failure
2400
- * rejects before any `set`; an empty is refused by the cache itself);
2401
- * concurrent callers share ONE in-flight wire request; the drift signal
2402
- * (the INVALID_RESPONSE shape drift, the deterministic validation 500)
2403
- * invalidates THIS entity's entries so the next call refetches
2404
- * (transport-level signals are also invalidated in the transport's own
2405
- * catch — the two sites cover the 2xx and non-2xx halves). `fresh`
2406
- * skips the lookup: fetch live and refresh the entries.
2407
- */
2408
- private cachedMeta;
1917
+ }
1918
+
1919
+ /** Read/meta layer of `BaseResource` (issue #165): get, entity/field/UDF info, context fetch, resolve/search, downloads. */
1920
+ declare abstract class MetaBase<T = Record<string, unknown>> extends QueryBase<T> {
2409
1921
  /** `GET /V1.0/<E>/{id}` → `{ item }` unwrapped (`item: null` → NotFoundError). */
2410
1922
  protected getGlobal(id: Identifier, fresh?: boolean): Promise<T>;
2411
1923
  /**
@@ -2441,109 +1953,8 @@ declare abstract class BaseResource<T = Record<string, unknown>, TCreate = Recor
2441
1953
  * accept all three shapes; empty/null → NotFoundError.
2442
1954
  */
2443
1955
  protected getScopedModel(parentId: Identifier, id: Identifier, fresh?: boolean): Promise<T>;
2444
- private unwrapModelLike;
2445
- /** Normalise a mutation body: `id` OR `itemId` → `id`; UDF map → UDF array (UDF-capable only). */
2446
- protected normalizeMutationBody(data: Record<string, unknown>): Record<string, unknown>;
2447
- /** `POST /V1.0/<E>` → `{ id }` (issue #13: a drifted 2xx runs the bounded marker recovery where the plan pins a marker field). */
2448
- protected createGlobal(data: TCreate, opts?: CreateOpts): Promise<OperationResult>;
2449
- /**
2450
- * Issue #13: the create-response envelope unwrap with the bounded marker
2451
- * recovery. The fast path is the plain `unwrapOperation` (a well-formed
2452
- * envelope costs ZERO extra requests and returns the byte-identical
2453
- * `{ id }` result). Only a typed `INVALID_RESPONSE` (a 2xx body that is
2454
- * not the specced envelope / `{ id }` / `{ itemId }` alternative) with a
2455
- * plan-pinned marker field AND `recoverIdFromMarker !== false` runs the
2456
- * fallback — and it can only run on the APPLY path: a dry run returns the
2457
- * pinned envelope BEFORE the mutating request, so the fallback never sees
2458
- * a dry-run response (skipped entirely by construction).
2459
- */
2460
- private unwrapCreateOperation;
2461
- /**
2462
- * Issue #13: the ONE bounded marker read on the resource's own query
2463
- * surface (`POST <collection>/query`, MaxRecords 5 — a read: idempotent,
2464
- * zero mutating wire; the fallback never issues anything else). Outcomes:
2465
- * exactly ONE numeric match → the normal success result stamped
2466
- * `idFrom: 'marker-recovery'` + the `shapeDrift` note; zero matches, more
2467
- * than one, or a cap-tripped search (a full 5 + a next cursor) → the
2468
- * existing `INVALID_RESPONSE` with the drift detail + the failed search
2469
- * (candidate ids listed — never a guessed id).
2470
- */
2471
- private recoverCreatedIdByMarker;
2472
- /** `PUT /V1.0/<E>/{id}` (the vendor tolerates PATCH at the same path) → `{ id }`.
2473
- * For collection-only-writable resources (`collectionUpdate`, D1) the
2474
- * vendor spec defines no put/patch on the item path (it is GET-only; the
2475
- * item-path PUT 405s), so the confirmed update hits the COLLECTION
2476
- * `PUT /V1.0/<E>` with the record id merged into the mutation body — the
2477
- * vendor keys the record by the id in the body (the same convention the
2478
- * parent-scoped `updateScopedRaw` PATCH uses).
2479
- *
2480
- * V2 partial-update merge: the vendor's collection PUT validates the FULL
2481
- * model (a partial body 500s 'Missing Required Field'), so a
2482
- * collectionUpdate update MERGES the caller's partial body into the
2483
- * record's current full model before the PUT: ONE fresh GET serves both
2484
- * the merge source and the stale-object guard's read (a `lastModifiedDate`
2485
- * mismatch throws STALE_OBJECT before the PUT; the guard semantics are
2486
- * unchanged — it is a no-op where the model lacks the field or the caller
2487
- * supplied no token). `opts.raw === true` sends the caller body as-is
2488
- * instead (the pre-merge wire; the guard keeps its own verification read
2489
- * when a token is supplied).
2490
- *
2491
- * Issue #34: with `update.putFallback: true` (OFF by default), a TYPED
2492
- * 404 on the pinned route retries ONCE as `PUT /{Entity}/{id}` where the
2493
- * gate holds — never a collectionUpdate route (the spec defines no
2494
- * item-path update there), never a `raw: true` update, never a non-404
2495
- * fault; the retry body runs the same fresh-read merge (see
2496
- * `putFallbackMergedBody`), so the fallback is never a null-clearing
2497
- * partial. A declined gate (a collectionUpdate route 404s, or the retry
2498
- * itself 404s) throws the self-explaining typed error (the route tried,
2499
- * the status, the opt-in; `details.putFallback`). */
2500
- /**
2501
- * Issue #34 gate: the fallback may fire only while `update.putFallback`
2502
- * is ON and the pinned update route answered a TYPED 404 (a transport
2503
- * `NotFoundError` with `httpStatus: 404`) — never a 400/405/422/5xx, and
2504
- * never a 2xx shape fault (those keep today's typed error byte-identical).
2505
- */
2506
- private putFallbackEligible;
2507
- /**
2508
- * Issue #34: the fallback retry body — the caller's (normalised) fields
2509
- * merged onto a FRESH unredacted read of the current record (the same
2510
- * merge the collection-update path performs; the read is the live record,
2511
- * never cached). A target miss on the merge read surfaces with the pinned
2512
- * update-target reason (the issue-#14 convention) — the recovery has
2513
- * nothing to merge onto, and no retry is issued.
2514
- */
2515
- private putFallbackMergedBody;
2516
- /**
2517
- * Issue #34: the self-explaining typed error a DECLINED gate throws. The
2518
- * original transport error keeps its identity (class / code / httpStatus);
2519
- * the message names the route tried, the status and the opt-in, and the
2520
- * structured detail rides under `details.putFallback`
2521
- * (`{ route, status, retried, optIn }`).
2522
- */
2523
- private putFallbackDeclined;
2524
- protected updateGlobal(id: Identifier, data: TUpdate, opts?: MutationOpts): Promise<OperationResult>;
2525
- /** `DELETE /V1.0/<E>/{id}` → `{ id }` (OperationResultModel). A blank 2xx
2526
- * (204 / empty body) is a valid vendor delete answer — synthesize the
2527
- * result from the path id (issue #25: the transport returns undefined
2528
- * for it; a non-blank wrong shape still throws via unwrapOperation). */
2529
- protected deleteGlobal(id: Identifier, opts?: MutationOpts): Promise<OperationResult>;
2530
1956
  protected scopedCollectionPath(parentId: Identifier): string;
2531
1957
  protected scopedItemPath(parentId: Identifier, id: Identifier): string;
2532
- /** Parent-scoped create: `POST .../{parentId}/<Child>` (issue #13: a drifted 2xx runs the bounded marker recovery where the plan pins a marker field). */
2533
- protected createScopedRaw(parentId: Identifier, data: TCreate, opts?: CreateOpts): Promise<OperationResult>;
2534
- /** Parent-scoped update: `PATCH .../{parentId}/<Child>` — the COLLECTION.
2535
- * Swagger documents put+patch on the scoped collection and has NO put/patch on
2536
- * the item path anywhere in the spec; the node strips the id from the path and
2537
- * PATCHes the collection, and the vendor keys the record by the id in the body. */
2538
- protected updateScopedRaw(parentId: Identifier, id: Identifier, data: TUpdate, opts?: MutationOpts): Promise<OperationResult>;
2539
- /** Parent-scoped delete: `DELETE .../{parentId}/<Child>/{id}` → `{ id }`
2540
- * (a blank 2xx synthesizes `{ id }` from the path id — issue #25). */
2541
- protected deleteScopedRaw(parentId: Identifier, id: Identifier, opts?: MutationOpts): Promise<OperationResult>;
2542
- /**
2543
- * Attachment delete: the vendor returns the deleted attachment MODEL, not
2544
- * OperationResultModel (G1 envelope.md) — pass it through typed.
2545
- */
2546
- protected deleteScopedModel(parentId: Identifier, id: Identifier, opts?: MutationOpts): Promise<T>;
2547
1958
  /** `GET /V1.0/<E>/entityInformation` → `{ info }` unwrapped.
2548
1959
  * Goes through the field cache when it is present (issue #80:
2549
1960
  * default-on; `fieldCache: false` = the bit-for-bit uncached wire
@@ -2568,7 +1979,6 @@ declare abstract class BaseResource<T = Record<string, unknown>, TCreate = Recor
2568
1979
  * entity's entries via the fieldCache's `invalidate` first — the trio
2569
1980
  * keeps its no-arg surface (the registry/MCP arity pin). */
2570
1981
  getUdfInfo(): Promise<Field[]>;
2571
- private unwrapFields;
2572
1982
  /**
2573
1983
  * Bounded read against another entity's global `query` endpoint (special-op
2574
1984
  * compositions only; the primary surface stays the resource's own ops).
@@ -2577,69 +1987,6 @@ declare abstract class BaseResource<T = Record<string, unknown>, TCreate = Recor
2577
1987
  maxRecords?: number;
2578
1988
  includeFields?: string[];
2579
1989
  }): Promise<TItem[]>;
2580
- /**
2581
- * `createIfNotExists` — the node's dedup composition: query by the caller's
2582
- * dedup fields (eq conditions, and-wrapped); a match short-circuits the
2583
- * create and returns the existing record; otherwise create. With no
2584
- * `dedupFields` this is a plain create (`created: true`).
2585
- *
2586
- * Top-level resources: `createIfNotExists(data, opts)` — the create POSTs
2587
- * the global collection. Parent-scoped resources:
2588
- * `createIfNotExists(parentId, data, opts)` — parentId is REQUIRED. Their
2589
- * global collection has no POST in the swagger; the only documented create
2590
- * is the scoped collection (`POST .../{parentId}/<Child>`), so a missing
2591
- * parentId throws a config error instead of issuing a wrong-path request.
2592
- * The dedup lookup stays a GLOBAL query (the entity carries the parent id
2593
- * field): the filter is the dedup fields + `parentField eq parentId`, which
2594
- * narrows the match set to the parent.
2595
- *
2596
- * (The node additionally verifies the parent exists for configuration items;
2597
- * the SDK omits that preflight — a missing parent surfaces as the vendor's
2598
- * 4xx on the create.)
2599
- */
2600
- createIfNotExists(data: TCreate, opts?: {
2601
- dedupFields?: string[];
2602
- dryRun?: boolean;
2603
- }): Promise<CreateIfNotExistsResult<T> | DryRunResult<TCreate>>;
2604
- createIfNotExists(parentId: Identifier, data: TCreate, opts?: {
2605
- dedupFields?: string[];
2606
- dryRun?: boolean;
2607
- }): Promise<CreateIfNotExistsResult<T> | DryRunResult<TCreate>>;
2608
- /**
2609
- * Stale-object guard (section 19.3): compare the plan's `staleCheck` field
2610
- * (vendor `lastModifiedDate`) against the caller-observed value. Mismatch
2611
- * throws `STALE_OBJECT`. Returns true when a comparison was actually made
2612
- * (the resource model carries the field AND the vendor answered it AND the
2613
- * caller supplied an expected value); false when the check is unavailable.
2614
- */
2615
- protected staleObjectCheck(current: Record<string, unknown>, opts: MutationOpts, operation: string): boolean;
2616
- /**
2617
- * Stale-object guard for a REAL mutation: the caller supplied an expected
2618
- * `lastModifiedDate` and the model carries the field → fetch the current
2619
- * record and compare before the mutating request (mismatch throws
2620
- * STALE_OBJECT; a vanished record propagates the vendor's NotFoundError).
2621
- */
2622
- protected guardStaleBeforeMutation(id: Identifier, opts: MutationOpts, operation: string, parentId?: Identifier): Promise<void>;
2623
- /**
2624
- * `create` dry-run: input validation + parent verification (scoped
2625
- * resources) + the pinned envelope. NO request is issued (scoped parent
2626
- * verification is a read). Duplicate detection has no reliable lookup for
2627
- * a plain create (that is `createIfNotExists`), so it is not claimed.
2628
- */
2629
- protected runCreateDryRun<TData extends object>(data: TData, parentId?: Identifier): Promise<DryRunResult<TData>>;
2630
- /**
2631
- * `update` dry-run: input validation + current-record fetch (a missing
2632
- * record carries `warnings` and no `diff` — pinned), the stale-object
2633
- * check (mismatch throws STALE_OBJECT) and the best-effort `diff`. NO
2634
- * mutating request is issued.
2635
- */
2636
- protected runUpdateDryRun<TData extends object>(id: Identifier, data: TData, opts?: MutationOpts, parentId?: Identifier): Promise<DryRunResult<TData>>;
2637
- /**
2638
- * `delete` dry-run: current-record verification + the stale-object check +
2639
- * the pinned envelope (no diff — a delete has no before/after fields). NO
2640
- * mutating request is issued.
2641
- */
2642
- protected runDeleteDryRun(id: Identifier, opts?: MutationOpts, parentId?: Identifier): Promise<DryRunResult<Record<string, unknown>>>;
2643
1990
  /**
2644
1991
  * Attachment `download`: `GET .../{parentId}/<Child>/{id}/data` → Buffer
2645
1992
  * (node-proven `/data` path, quirk #9; the metadata GET is `get`).
@@ -2718,8 +2065,6 @@ declare abstract class BaseResource<T = Record<string, unknown>, TCreate = Recor
2718
2065
  searchWithDetail(query: string, opts?: {
2719
2066
  limit?: number;
2720
2067
  }): Promise<SearchWithDetail<T>>;
2721
- /** The shared miss explanation for `resolveWithDetail` / `searchWithDetail`. */
2722
- private missDetail;
2723
2068
  /** The plain value projection of `resolveDetailed` (the `resolve` floor). */
2724
2069
  protected resolveBase(identifier: number | string): Promise<T | null>;
2725
2070
  /** The items of one page of the resource's own `/query`. */
@@ -2751,6 +2096,128 @@ declare abstract class BaseResource<T = Record<string, unknown>, TCreate = Recor
2751
2096
  }): Promise<T[]>;
2752
2097
  }
2753
2098
 
2099
+ /** Mutation layer of `BaseResource` (issue #165): create/update/delete, PUT fallback, create-recovery, dry-run. */
2100
+ declare abstract class MutationBase<T = Record<string, unknown>, TCreate = Record<string, unknown>, TUpdate = Record<string, unknown>> extends MetaBase<T> {
2101
+ /** Normalise a mutation body: `id` OR `itemId` → `id`; UDF map → UDF array (UDF-capable only). */
2102
+ protected normalizeMutationBody(data: Record<string, unknown>): Record<string, unknown>;
2103
+ /** `POST /V1.0/<E>` → `{ id }` (issue #13: a drifted 2xx runs the bounded marker recovery where the plan pins a marker field). */
2104
+ protected createGlobal(data: TCreate, opts?: CreateOpts): Promise<OperationResult>;
2105
+ protected updateGlobal(id: Identifier, data: TUpdate, opts?: MutationOpts): Promise<OperationResult>;
2106
+ /** `DELETE /V1.0/<E>/{id}` → `{ id }` (OperationResultModel). A blank 2xx
2107
+ * (204 / empty body) is a valid vendor delete answer — synthesize the
2108
+ * result from the path id (issue #25: the transport returns undefined
2109
+ * for it; a non-blank wrong shape still throws via unwrapOperation). */
2110
+ protected deleteGlobal(id: Identifier, opts?: MutationOpts): Promise<OperationResult>;
2111
+ /** Parent-scoped create: `POST .../{parentId}/<Child>` (issue #13: a drifted 2xx runs the bounded marker recovery where the plan pins a marker field). */
2112
+ protected createScopedRaw(parentId: Identifier, data: TCreate, opts?: CreateOpts): Promise<OperationResult>;
2113
+ /** Parent-scoped update: `PATCH .../{parentId}/<Child>` — the COLLECTION.
2114
+ * Swagger documents put+patch on the scoped collection and has NO put/patch on
2115
+ * the item path anywhere in the spec; the node strips the id from the path and
2116
+ * PATCHes the collection, and the vendor keys the record by the id in the body. */
2117
+ protected updateScopedRaw(parentId: Identifier, id: Identifier, data: TUpdate, opts?: MutationOpts): Promise<OperationResult>;
2118
+ /** Parent-scoped delete: `DELETE .../{parentId}/<Child>/{id}` → `{ id }`
2119
+ * (a blank 2xx synthesizes `{ id }` from the path id — issue #25). */
2120
+ protected deleteScopedRaw(parentId: Identifier, id: Identifier, opts?: MutationOpts): Promise<OperationResult>;
2121
+ /**
2122
+ * Attachment delete: the vendor returns the deleted attachment MODEL, not
2123
+ * OperationResultModel (G1 envelope.md) — pass it through typed.
2124
+ */
2125
+ protected deleteScopedModel(parentId: Identifier, id: Identifier, opts?: MutationOpts): Promise<T>;
2126
+ /**
2127
+ * `createIfNotExists` — the node's dedup composition: query by the caller's
2128
+ * dedup fields (eq conditions, and-wrapped); a match short-circuits the
2129
+ * create and returns the existing record; otherwise create. With no
2130
+ * `dedupFields` this is a plain create (`created: true`).
2131
+ *
2132
+ * Top-level resources: `createIfNotExists(data, opts)` — the create POSTs
2133
+ * the global collection. Parent-scoped resources:
2134
+ * `createIfNotExists(parentId, data, opts)` — parentId is REQUIRED. Their
2135
+ * global collection has no POST in the swagger; the only documented create
2136
+ * is the scoped collection (`POST .../{parentId}/<Child>`), so a missing
2137
+ * parentId throws a config error instead of issuing a wrong-path request.
2138
+ * The dedup lookup stays a GLOBAL query (the entity carries the parent id
2139
+ * field): the filter is the dedup fields + `parentField eq parentId`, which
2140
+ * narrows the match set to the parent.
2141
+ *
2142
+ * (The node additionally verifies the parent exists for configuration items;
2143
+ * the SDK omits that preflight — a missing parent surfaces as the vendor's
2144
+ * 4xx on the create.)
2145
+ */
2146
+ createIfNotExists(data: TCreate, opts?: {
2147
+ dedupFields?: string[];
2148
+ dryRun?: boolean;
2149
+ }): Promise<CreateIfNotExistsResult<T> | DryRunResult<TCreate>>;
2150
+ createIfNotExists(parentId: Identifier, data: TCreate, opts?: {
2151
+ dedupFields?: string[];
2152
+ dryRun?: boolean;
2153
+ }): Promise<CreateIfNotExistsResult<T> | DryRunResult<TCreate>>;
2154
+ /**
2155
+ * Stale-object guard (section 19.3): compare the plan's `staleCheck` field
2156
+ * (vendor `lastModifiedDate`) against the caller-observed value. Mismatch
2157
+ * throws `STALE_OBJECT`. Returns true when a comparison was actually made
2158
+ * (the resource model carries the field AND the vendor answered it AND the
2159
+ * caller supplied an expected value); false when the check is unavailable.
2160
+ */
2161
+ protected staleObjectCheck(current: Record<string, unknown>, opts: MutationOpts, operation: string): boolean;
2162
+ /**
2163
+ * Stale-object guard for a REAL mutation: the caller supplied an expected
2164
+ * `lastModifiedDate` and the model carries the field → fetch the current
2165
+ * record and compare before the mutating request (mismatch throws
2166
+ * STALE_OBJECT; a vanished record propagates the vendor's NotFoundError).
2167
+ */
2168
+ protected guardStaleBeforeMutation(id: Identifier, opts: MutationOpts, operation: string, parentId?: Identifier): Promise<void>;
2169
+ /**
2170
+ * `create` dry-run: input validation + parent verification (scoped
2171
+ * resources) + the pinned envelope. NO request is issued (scoped parent
2172
+ * verification is a read). Duplicate detection has no reliable lookup for
2173
+ * a plain create (that is `createIfNotExists`), so it is not claimed.
2174
+ */
2175
+ protected runCreateDryRun<TData extends object>(data: TData, parentId?: Identifier): Promise<DryRunResult<TData>>;
2176
+ /**
2177
+ * `update` dry-run: input validation + current-record fetch (a missing
2178
+ * record carries `warnings` and no `diff` — pinned), the stale-object
2179
+ * check (mismatch throws STALE_OBJECT) and the best-effort `diff`. NO
2180
+ * mutating request is issued.
2181
+ */
2182
+ protected runUpdateDryRun<TData extends object>(id: Identifier, data: TData, opts?: MutationOpts, parentId?: Identifier): Promise<DryRunResult<TData>>;
2183
+ /**
2184
+ * `delete` dry-run: current-record verification + the stale-object check +
2185
+ * the pinned envelope (no diff — a delete has no before/after fields). NO
2186
+ * mutating request is issued.
2187
+ */
2188
+ protected runDeleteDryRun(id: Identifier, opts?: MutationOpts, parentId?: Identifier): Promise<DryRunResult<Record<string, unknown>>>;
2189
+ }
2190
+
2191
+ /**
2192
+ * BaseResource — shared scaffolding for every resource client
2193
+ * (ARCHITECTURE section 11).
2194
+ *
2195
+ * Concrete resources extend `BaseResource` and expose narrowly-typed public
2196
+ * methods that delegate to the protected primitives here. The base stays
2197
+ * generic about filters (the G3 `query.ts` builder is the single filter
2198
+ * surface; resources pass user filters through, never invent per-resource
2199
+ * filter sets).
2200
+ *
2201
+ * Wire contract (pinned, node-proven; the continuation body live-verified
2202
+ * 2026-10-19 — issue #118):
2203
+ * - page 1: `POST /V1.0/<E>/query` with the `QueryModel` body
2204
+ * (`{ MaxRecords, IncludeFields?, filter }` — G3 `buildQueryRequest`).
2205
+ * - subsequent pages: the vendor returns an ABSOLUTE `pageDetails.nextPageUrl`
2206
+ * cursor; the walk POSTs the SAME body (`buildQueryBody` — MaxRecords,
2207
+ * IncludeFields, the preserved filter) to the cursor
2208
+ * (same-origin: stripped of the client base; cross-origin: re-based onto the
2209
+ * client base URL, mirroring the node's custom-zone behaviour) until
2210
+ * `nextPageUrl` is null. The 1000-page guard (`MAX_PAGES`) is enforced by
2211
+ * the G3 walker (`PaginationLimitError` before the 1001st fetch).
2212
+ * - `item: null` on a single GET is the vendor not-found signal →
2213
+ * `NotFoundError` (G3 `unwrapItem`).
2214
+ * - create/update/delete normalise `OperationResultModel { itemId }` (or
2215
+ * `{ id }`) to `{ id }`; attachment deletes return the deleted model.
2216
+ */
2217
+
2218
+ declare abstract class BaseResource<T = Record<string, unknown>, TCreate = Record<string, unknown>, TUpdate = Record<string, unknown>> extends MutationBase<T, TCreate, TUpdate> {
2219
+ }
2220
+
2754
2221
  /**
2755
2222
  * AppointmentsResource — Appointment resource (G5 batch B, plan key 'appointments').
2756
2223
  * GENERATED by scripts/generate-batch.mjs from capabilities.plan.json + api-docs.json.
@@ -3092,17 +2559,6 @@ declare class ClassificationIconsResource extends BaseResource<ClassificationIco
3092
2559
  }): Promise<ClassificationIconSummary[]>;
3093
2560
  }
3094
2561
 
3095
- /**
3096
- * Companies special ops — node-parity search compositions (G4 batch A).
3097
- *
3098
- * Node parity (n8n autotask nodes `searchCompanyByDomain` / identity search):
3099
- * the vendor has no free-text or domain search — domain lookups are
3100
- * `contains` filters on `webAddress`, with a contact-email fallback. The
3101
- * node's `searchType: 'eq'` request is mapped to `contains` (there is no
3102
- * exact-domain operator that fits a substring of a URL); the mapping is
3103
- * pinned, not a preference.
3104
- */
3105
-
3106
2562
  interface CompaniesDomainSearchOptions {
3107
2563
  /** Node-parity knob: `'eq'` is mapped to `contains` (vendor has no exact
3108
2564
  * domain operator for URL fields). Both values behave identically. */
@@ -3110,6 +2566,7 @@ interface CompaniesDomainSearchOptions {
3110
2566
  /** Max companies to return (default 25, clamped to 1..500). */
3111
2567
  limit?: number;
3112
2568
  }
2569
+
3113
2570
  interface CompanySearchOptions {
3114
2571
  /** Max companies to return (default 25, clamped to 1..500). */
3115
2572
  limit?: number;
@@ -3131,6 +2588,7 @@ interface CompanyFamily {
3131
2588
  interface CompanyFamilyRow extends Company {
3132
2589
  family?: CompanyFamily;
3133
2590
  }
2591
+
3134
2592
  interface CompaniesUpsertByNameParams {
3135
2593
  /** The company phone (live-required on the ww29 create). */
3136
2594
  phone: string;
@@ -3167,8 +2625,16 @@ interface CompaniesUpsertByNameResult {
3167
2625
  /** The vendor side effects reported on the created result (the V5 auto-location). */
3168
2626
  sideEffects?: string[];
3169
2627
  }
2628
+
2629
+ /** The list parts that accept a per-part field projection (issue #200). `company` is the single get and is not projectable. */
2630
+ declare const FULL_PROFILE_PROJECTABLE_PARTS: readonly ["locations", "contacts", "notes", "projects", "openTickets"];
2631
+ type CompanyFullProfilePartName = (typeof FULL_PROFILE_PROJECTABLE_PARTS)[number];
3170
2632
  /** Options for `fullProfile` (all optional; the pinned defaults). */
3171
2633
  interface CompanyFullProfileOptions {
2634
+ /** Max location records (default 50, 1-500). */
2635
+ locationLimit?: number;
2636
+ /** Per-part field projection (issue #200): keys are part names (`locations`, `contacts`, `notes`, `projects`, `openTickets`), values non-empty lists of exact vendor field names. A listed part serves ONLY those fields (pushed to the wire as IncludeFields, then picked client-side); an absent part keeps the full model. Unknown part key or field name → typed CONFIG_ERROR before any request. With `names: true`, name siblings appear only for the id fields you kept. */
2637
+ fields?: Partial<Record<CompanyFullProfilePartName, string[]>>;
3172
2638
  /** Max contact records (default 50). */
3173
2639
  contactLimit?: number;
3174
2640
  /** Max note records (default 50). */
@@ -3230,6 +2696,7 @@ interface CompanyFullProfile {
3230
2696
  projects: 'ok';
3231
2697
  };
3232
2698
  }
2699
+
3233
2700
  /** The closed `source` set for `companies.unbilledWork`. */
3234
2701
  type UnbilledWorkSource = 'posted_uninvoiced' | 'invoice' | 'date_range' | 'tickets';
3235
2702
  /** Options for `unbilledWork` (closed bag; the pinned defaults). */
@@ -3252,7 +2719,7 @@ interface UnbilledWorkOptions {
3252
2719
  noteChars?: number;
3253
2720
  /** The rollup mode (default `'ticket'` — per-ticket rows; `'entry'` — the capped per-entry list). */
3254
2721
  rollup?: 'ticket' | 'entry';
3255
- /** The per-part record cap (default 50, clamped 1..500 — the fullProfile house clamp). */
2722
+ /** The per-part record cap (default 25, clamped 1..500 — the fullProfile house clamp). */
3256
2723
  limit?: number;
3257
2724
  }
3258
2725
  /** One capped part (the single-page bounded read's shape + status). */
@@ -5257,7 +4724,6 @@ declare class ContractServiceUnitsResource extends BaseResource<ContractServiceU
5257
4724
  }): Promise<ContractServiceUnitSummary | null>;
5258
4725
  }
5259
4726
 
5260
- /** The closed labour-cost-method set (the ladder rung a row STARTS from). */
5261
4727
  type ProfitabilityLabourCostMethod = 'billing_item_our_cost' | 'contract_role_cost' | 'resource_internal_cost' | 'provided';
5262
4728
  /** A ladder rung that actually carried rows (plus 'missing'). */
5263
4729
  type ProfitRateSource = 'billing_item.ourCost' | 'contract_role_costs.rate' | 'resource.internalCost' | 'provided' | 'missing';
@@ -8191,6 +7657,40 @@ declare class TicketChangeRequestApprovalsResource extends BaseResource<TicketCh
8191
7657
  }): Promise<TicketChangeRequestApprovalSummary | null>;
8192
7658
  }
8193
7659
 
7660
+ type MoveStatus = 'moved' | 'moved_source_absent' | 'moved_manual_delete';
7661
+ interface MoveManualAction {
7662
+ /** What the person must do in the Autotask UI. */
7663
+ action: 'delete_source';
7664
+ /** A clickable deep link (the entity when ExecuteCommand supports it, else its parent ticket); null when no UI host is derivable. */
7665
+ uiLink: string | null;
7666
+ reason: string;
7667
+ }
7668
+ interface MoveResult {
7669
+ status: MoveStatus;
7670
+ sourceId: number;
7671
+ newId: number;
7672
+ correlationId: string;
7673
+ /** The full source record as read before the delete — the caller persists it (the SDK stores nothing). */
7674
+ snapshot: Record<string, unknown>;
7675
+ /** Soft facts (not refusals): companyChanged, contractChanged, ... */
7676
+ facts: Record<string, unknown>;
7677
+ manualAction?: MoveManualAction;
7678
+ }
7679
+ interface MoveToTicketOptions {
7680
+ /** Dry-run: run the GET-only preview and return the pinned envelope (the default at the governor). */
7681
+ dryRun?: boolean;
7682
+ /** The caller's snapshot of the source's lastModified value; a mismatch throws STALE_OBJECT before any write. */
7683
+ lastModifiedDate?: string;
7684
+ /** May LOWER the source-age limit (default 14 days); never raised. */
7685
+ maxSourceAgeDays?: number;
7686
+ /** Per-call retry budget for the READS (every write is sent once regardless). */
7687
+ maxRetries?: number;
7688
+ }
7689
+
7690
+ /** ticket_charges.moveToTicket (issue #197): create -> verify -> delete on the shared move engine. */
7691
+ type TicketChargesMoveToTicketOptions = MoveToTicketOptions;
7692
+ type TicketChargesMoveToTicketResult = MoveResult;
7693
+
8194
7694
  /**
8195
7695
  * TicketChargesResource — TicketCharge resource (G4 batch A, plan key 'ticket_charges').
8196
7696
  * GENERATED by scripts/generate-batch.mjs from capabilities.plan.json + api-docs.json.
@@ -8238,6 +7738,8 @@ declare class TicketChargesResource extends BaseResource<TicketCharge, TicketCha
8238
7738
  search(query: string, opts?: {
8239
7739
  limit?: number;
8240
7740
  }): Promise<TicketChargeSummary[]>;
7741
+ /** Node-parity special op (hand-written in src/resources/special/ticket_charges.ts). */
7742
+ moveToTicket(sourceId: Identifier, toTicketId: Identifier, opts?: TicketChargesMoveToTicketOptions): Promise<TicketChargesMoveToTicketResult | DryRunResult<Record<string, unknown>>>;
8241
7743
  }
8242
7744
 
8243
7745
  /**
@@ -8527,13 +8029,19 @@ declare class TicketSecondaryResourcesResource extends BaseResource<TicketSecond
8527
8029
  }
8528
8030
 
8529
8031
  /**
8530
- * Tickets special ops — node-parity SLA / summary / timeline (G4 batch A).
8531
- *
8532
- * The node exposes three ticket compositions the vendor does not: an SLA
8533
- * health rollup, a one-call summary with truncated long text, and a merged
8534
- * chronological timeline (notes + time entries + optional histories). Each
8535
- * composes bounded vendor queries; field names are pinned from api-docs.json.
8032
+ * One route fact on a composite child part that the default global `/query`
8033
+ * route did not serve (issue #35): the route attempted, the path it
8034
+ * attempted, and the HTTP status that failed it (null when the failure was
8035
+ * not an HTTP status — a shape or transport fault).
8536
8036
  */
8037
+ interface TicketChildRouteFact {
8038
+ /** The route that was attempted (the plan-declared scoped collection read is 'scoped'). */
8039
+ route: 'global' | 'scoped';
8040
+ /** The path the route attempted (e.g. '/V1.0/TicketNotes/query' or '/V1.0/Tickets/527119/Notes'). */
8041
+ path: string;
8042
+ /** The HTTP status that failed the route (null for a non-HTTP failure). */
8043
+ httpStatus: number | null;
8044
+ }
8537
8045
 
8538
8046
  interface TicketSlaHealth {
8539
8047
  ticketId: Identifier;
@@ -8615,20 +8123,7 @@ interface TicketTimeline {
8615
8123
  histories?: 'ok' | 'ok-scoped' | 'miss';
8616
8124
  };
8617
8125
  }
8618
- /**
8619
- * One route fact on a composite child part that the default global `/query`
8620
- * route did not serve (issue #35): the route attempted, the path it
8621
- * attempted, and the HTTP status that failed it (null when the failure was
8622
- * not an HTTP status — a shape or transport fault).
8623
- */
8624
- interface TicketChildRouteFact {
8625
- /** The route that was attempted (the plan-declared scoped collection read is 'scoped'). */
8626
- route: 'global' | 'scoped';
8627
- /** The path the route attempted (e.g. '/V1.0/TicketNotes/query' or '/V1.0/Tickets/527119/Notes'). */
8628
- path: string;
8629
- /** The HTTP status that failed the route (null for a non-HTTP failure). */
8630
- httpStatus: number | null;
8631
- }
8126
+
8632
8127
  interface OpenWithNoteAndAssignParams {
8633
8128
  /** The company the ticket opens under (the vendor field companyID). */
8634
8129
  companyID: number;
@@ -8700,6 +8195,7 @@ interface OpenWithNoteAndAssignResult {
8700
8195
  note: string;
8701
8196
  };
8702
8197
  }
8198
+
8703
8199
  interface TicketChangeStatusResult {
8704
8200
  ticketId: Identifier;
8705
8201
  previousStatus: number | null;
@@ -8717,6 +8213,7 @@ interface TicketChangeStatusNoChange {
8717
8213
  status: number;
8718
8214
  reason: 'NO_CHANGE';
8719
8215
  }
8216
+
8720
8217
  /** Options for `fullContext` (all optional; the pinned defaults). */
8721
8218
  interface TicketFullContextOptions {
8722
8219
  /** Max note records (default 50). */
@@ -8926,37 +8423,6 @@ declare class TicketWebhooksResource extends BaseResource<TicketWebhook, TicketW
8926
8423
  }): Promise<TicketWebhookSummary[]>;
8927
8424
  }
8928
8425
 
8929
- /**
8930
- * Time entry special ops — date windows + posting status (G5 batch B).
8931
- *
8932
- * Node parity (nodes/Autotask/resources/timeEntries/execute.ts): each window
8933
- * is ONE bounded server-filtered query on `dateWorked` (gte/lte). The node
8934
- * computes the bounds in the configured timezone; the SDK pins UTC (the API
8935
- * is UTC — plan metadata) and the second-precision `YYYY-MM-DDTHH:mm:ssZ`
8936
- * value format the node sends. Issue #66 (sub-ask 3) makes the zone
8937
- * OPT-IN: `opts.tz` (an IANA zone) anchors the window's calendar day/period
8938
- * in that zone — computed locally and converted to UTC for the wire —
8939
- * while omitted `tz` keeps the UTC behaviour bit-for-bit (the node-parity
8940
- * timezone behaviour is now available on demand).
8941
- *
8942
- * `getPosted`/`getUnposted` keep their names and their documented meaning
8943
- * ("posted" / "not posted") and the wire is the specification's own
8944
- * `postedDate` presence (correct-by-spec, the way every op follows the
8945
- * vendored contract). W-D3 (campaign adjudication 2026-10-04, RE-VERIFIED
8946
- * LIVE against ww29 on 2026-10-04 with a field-existence oracle): this
8947
- * zone's TimeEntry entity exposes NO posted-state filter field — the vendor
8948
- * rejects `postingStatus`, `postedDate` AND `status` with "Unable to find X
8949
- * in the TimeEntry Entity" (only dateWorked / resourceID / ticketID /
8950
- * taskID resolve as filter fields). On such a zone a 500 from these ops is
8951
- * the KNOWN wall, not a transient fault — the typed pointer note rides the
8952
- * error (plan.pointerNotes, gate clause 13): the working window read on
8953
- * those zones is `postedWithin` (the dateWorked window, live-verified).
8954
- * Zones that honour the published spec answer `postedDate` filters normally.
8955
- * The old `postingStatus eq` wire was the plan's G4-era picklist claim —
8956
- * SUPERSEDED. The node's heavier client-side BillingItems composition is out
8957
- * of scope (plan row = server filter).
8958
- */
8959
-
8960
8426
  /** The shared window opts (issue #66: the `DateWindowOptions` shape — `now`,
8961
8427
  * `limit`, and the `tz` IANA-zone anchor; omitted `tz` = UTC, the current
8962
8428
  * behaviour bit-for-bit) under its historical name. */
@@ -8996,6 +8462,7 @@ interface TimeEntriesPostedWindowResult {
8996
8462
  /** True when the vendor reports more matching records than the bounded read returned (a live `pageDetails.nextPageUrl` cursor) — the posted/unposted counts then cover the returned rows ONLY (at most `limit`); re-query with a wider window or a narrowing filter to reconcile the totals. */
8997
8463
  truncated: boolean;
8998
8464
  }
8465
+
8999
8466
  /**
9000
8467
  * `createForResource` params. The typed linkage pins + the time window are
9001
8468
  * first-class; anything else passes through as a vendor TimeEntry field
@@ -9058,6 +8525,10 @@ interface TimeEntriesCreateForResourceResult {
9058
8525
  discoveryMerges: number;
9059
8526
  }
9060
8527
 
8528
+ /** time_entries.moveToTicket (issue #197): create -> verify -> delete on the shared move engine. */
8529
+ type TimeEntriesMoveToTicketOptions = MoveToTicketOptions;
8530
+ type TimeEntriesMoveToTicketResult = MoveResult;
8531
+
9061
8532
  /**
9062
8533
  * TimeEntriesResource — TimeEntry resource (G5 batch B, plan key 'time_entries').
9063
8534
  * GENERATED by scripts/generate-batch.mjs from capabilities.plan.json + api-docs.json.
@@ -9133,6 +8604,8 @@ declare class TimeEntriesResource extends BaseResource<TimeEntry, TimeEntryCreat
9133
8604
  /** Node-parity special op (hand-written in src/resources/special/time_entries.ts). */
9134
8605
  lastFullWeek(opts?: TimeEntriesWindowOptions): Promise<TimeEntry[]>;
9135
8606
  /** Node-parity special op (hand-written in src/resources/special/time_entries.ts). */
8607
+ moveToTicket(sourceId: Identifier, toTicketId: Identifier, opts?: TimeEntriesMoveToTicketOptions): Promise<TimeEntriesMoveToTicketResult | DryRunResult<Record<string, unknown>>>;
8608
+ /** Node-parity special op (hand-written in src/resources/special/time_entries.ts). */
9136
8609
  postedWithin(from: string, to: string, opts?: TimeEntriesPostedWindowOptions): Promise<TimeEntriesPostedWindowResult>;
9137
8610
  /** Node-parity special op (hand-written in src/resources/special/time_entries.ts). */
9138
8611
  today(opts?: TimeEntriesWindowOptions): Promise<TimeEntry[]>;
@@ -9470,4 +8943,4 @@ declare class AutotaskClient {
9470
8943
  }): Promise<PromiseSettledResult<R>[]>;
9471
8944
  }
9472
8945
 
9473
- export { ConfigurationItemRelatedItemsResource as $, type AutotaskConfig as A, BadRequestError as B, CREDENTIAL_HEADER_NAMES as C, type ClassificationIconsResourceQueryParams as D, CompaniesResource as E, type CompaniesResourceQueryParams as F, CompanyAlertsResource as G, type CompanyAlertsResourceQueryParams as H, CompanyLocationsResource as I, type CompanyLocationsResourceQueryParams as J, CompanyNotesResource as K, type CompanyNotesResourceQueryParams as L, CompanySiteConfigurationsResource as M, type CompanySiteConfigurationsResourceQueryParams as N, CompanyWebhooksResource as O, type CompanyWebhooksResourceQueryParams as P, type ConfigProfile as Q, ConfigurationItemBillingProductAssociationsResource as R, type ConfigurationItemBillingProductAssociationsResourceQueryParams as S, ConfigurationItemCategoriesResource as T, type ConfigurationItemCategoriesResourceQueryParams as U, ConfigurationItemCategoryUdfAssociationsResource as V, type ConfigurationItemCategoryUdfAssociationsResourceQueryParams as W, ConfigurationItemDnsRecordsResource as X, type ConfigurationItemDnsRecordsResourceQueryParams as Y, ConfigurationItemNotesResource as Z, type ConfigurationItemNotesResourceQueryParams as _, AutotaskClient as a, type ContractsResourceQueryParams as a$, type ConfigurationItemRelatedItemsResourceQueryParams as a0, ConfigurationItemSslSubjectAlternativeNamesResource as a1, type ConfigurationItemSslSubjectAlternativeNamesResourceQueryParams as a2, ConfigurationItemTypesResource as a3, type ConfigurationItemTypesResourceQueryParams as a4, ConfigurationItemWebhooksResource as a5, type ConfigurationItemWebhooksResourceQueryParams as a6, ConfigurationItemsResource as a7, type ConfigurationItemsResourceQueryParams as a8, ConfirmationRequiredError as a9, type ContractExclusionSetsResourceQueryParams as aA, ContractMilestonesResource as aB, type ContractMilestonesResourceQueryParams as aC, ContractNotesResource as aD, type ContractNotesResourceQueryParams as aE, ContractRatesResource as aF, type ContractRatesResourceQueryParams as aG, ContractRetainersResource as aH, type ContractRetainersResourceQueryParams as aI, ContractRoleCostsResource as aJ, type ContractRoleCostsResourceQueryParams as aK, ContractServiceAdjustmentsResource as aL, type ContractServiceAdjustmentsResourceQueryParams as aM, ContractServiceBundleAdjustmentsResource as aN, type ContractServiceBundleAdjustmentsResourceQueryParams as aO, ContractServiceBundleUnitsResource as aP, type ContractServiceBundleUnitsResourceQueryParams as aQ, ContractServiceBundlesResource as aR, type ContractServiceBundlesResourceQueryParams as aS, ContractServiceUnitsResource as aT, type ContractServiceUnitsResourceQueryParams as aU, ContractServicesResource as aV, type ContractServicesResourceQueryParams as aW, ContractTicketPurchasesResource as aX, type ContractTicketPurchasesResourceQueryParams as aY, type ContractsProfitabilityResult as aZ, ContractsResource as a_, ConflictError as aa, ContactGroupContactsResource as ab, type ContactGroupContactsResourceQueryParams as ac, ContactGroupsResource as ad, type ContactGroupsResourceQueryParams as ae, ContactWebhooksResource as af, type ContactWebhooksResourceQueryParams as ag, ContactsResource as ah, type ContactsResourceQueryParams as ai, ContractBillingRulesResource as aj, type ContractBillingRulesResourceQueryParams as ak, ContractBlockHourFactorsResource as al, type ContractBlockHourFactorsResourceQueryParams as am, ContractBlocksResource as an, type ContractBlocksResourceQueryParams as ao, ContractChargesResource as ap, type ContractChargesResourceQueryParams as aq, ContractExclusionBillingCodesResource as ar, type ContractExclusionBillingCodesResourceQueryParams as as, ContractExclusionRolesResource as at, type ContractExclusionRolesResourceQueryParams as au, ContractExclusionSetExcludedRolesResource as av, type ContractExclusionSetExcludedRolesResourceQueryParams as aw, ContractExclusionSetExcludedWorkTypesResource as ax, type ContractExclusionSetExcludedWorkTypesResourceQueryParams as ay, ContractExclusionSetsResource as az, AGENT_PROFILE as b, NotificationHistoryResource as b$, type CooldownStore as b0, type CostRateResolution as b1, CountriesResource as b2, type CountriesResourceQueryParams as b3, type CredentialShapeExpectation as b4, DEFAULT_CIRCUIT_BREAKER_FAILURE_THRESHOLD as b5, DEFAULT_CIRCUIT_BREAKER_MAX_ENTRIES as b6, DEFAULT_CIRCUIT_BREAKER_OPEN_TIMEOUT_MS as b7, DEFAULT_CIRCUIT_BREAKER_SUCCESSES_TO_CLOSE as b8, DEFAULT_CIRCUIT_BREAKER_WINDOW_MS as b9, type ExpenseItemAttachmentsResourceQueryParams as bA, ExpenseItemsResource as bB, type ExpenseItemsResourceQueryParams as bC, ExpenseReportsResource as bD, type ExpenseReportsResourceQueryParams as bE, ForbiddenError as bF, HolidaySetsResource as bG, type HolidaySetsResourceQueryParams as bH, HolidaysResource as bI, type HolidaysResourceQueryParams as bJ, HostPolicyDeniedError as bK, HttpClient as bL, IDEMPOTENT_METHODS as bM, InMemoryCircuitBreakerStore as bN, InMemoryCooldownStore as bO, InventoryProductsResource as bP, type InventoryProductsResourceQueryParams as bQ, InvoicesResource as bR, type InvoicesResourceQueryParams as bS, type Logger as bT, MAINTENANCE_WINDOW_MAX_MS as bU, MAX_PAGES as bV, MAX_PAGE_SIZE as bW, MarkerUnsafeIdError as bX, ModulesResource as bY, NoopLogger as bZ, NotFoundError as b_, DEFAULT_COOLDOWN_DEFAULT_MS as ba, DEFAULT_COOLDOWN_MAX_ENTRIES as bb, DEFAULT_COOLDOWN_MAX_MS as bc, DEFAULT_FIELD_CACHE_TTL_MS as bd, DEFAULT_MAINTENANCE_MAX_WAIT_MS as be, DEFAULT_MAINTENANCE_POLL_MS as bf, DEFAULT_MAX_CONCURRENT as bg, DEFAULT_MAX_RESPONSE_BYTES as bh, DEFAULT_MAX_RETRIES as bi, DEFAULT_MAX_SCAN_PAGES as bj, DEFAULT_MAX_SCAN_RECORDS as bk, DEFAULT_PAGE_SIZE as bl, DEFAULT_READ_CACHE_TTL_MS as bm, DEFAULT_RESOURCE_NAME_CACHE_TTL_MS as bn, DEFAULT_TIMEOUT_MS as bo, DEFAULT_ZONE as bp, DeleteBoundaryError as bq, DepartmentsResource as br, type DepartmentsResourceQueryParams as bs, DomainRegistrarsResource as bt, type DomainRegistrarsResourceQueryParams as bu, EmptyResponseError as bv, EntityInformationResource as bw, type ErrorCategory as bx, type ErrorIdRef as by, ExpenseItemAttachmentsResource as bz, AppointmentsResource as c, ResourceTimeOffAdditionalResource as c$, type NotificationHistoryResourceQueryParams as c0, OpportunitiesResource as c1, type OpportunitiesResourceQueryParams as c2, OpportunityAttachmentsResource as c3, type OpportunityAttachmentsResourceQueryParams as c4, OpportunityCategoriesResource as c5, type OpportunityCategoriesResourceQueryParams as c6, type PageFetcher as c7, type PaginateOptions as c8, PaginationLimitError as c9, PurchaseOrderItemReceivingResource as cA, type PurchaseOrderItemReceivingResourceQueryParams as cB, PurchaseOrderItemsResource as cC, type PurchaseOrderItemsResourceQueryParams as cD, PurchaseOrdersResource as cE, type PurchaseOrdersResourceQueryParams as cF, QueryTooLongError as cG, QuoteItemsResource as cH, type QuoteItemsResourceQueryParams as cI, QuoteLocationsResource as cJ, type QuoteLocationsResourceQueryParams as cK, QuoteTemplatesResource as cL, type QuoteTemplatesResourceQueryParams as cM, QuotesResource as cN, type QuotesResourceQueryParams as cO, REDACTED as cP, RateLimitError as cQ, RecoveryTruncatedError as cR, type RequestOptions as cS, ResolutionError as cT, type ResolvedAutotaskConfig as cU, ResourceRoleQueuesResource as cV, type ResourceRoleQueuesResourceQueryParams as cW, ResourceRolesResource as cX, type ResourceRolesResourceQueryParams as cY, ResourceSkillsResource as cZ, type ResourceSkillsResourceQueryParams as c_, PhasesResource as ca, type PhasesResourceQueryParams as cb, ProductVendorsResource as cc, type ProductVendorsResourceQueryParams as cd, ProductsResource as ce, type ProductsResourceQueryParams as cf, type ProfitRateSource as cg, type ProfitabilityActivityCategory as ch, type ProfitabilityDataQualityWarning as ci, type ProfitabilityHighestCostTicket as cj, type ProfitabilityLabourCostMethod as ck, type ProfitabilityMiscoding as cl, type ProfitabilityMonthlyRow as cm, type ProfitabilityOpenRenewalItem as cn, type ProfitabilityOptions as co, type ProfitabilityPart as cp, type ProfitabilityPartDigest as cq, type ProfitabilityRevenueByType as cr, ProjectChargesResource as cs, type ProjectChargesResourceQueryParams as ct, ProjectNotesResource as cu, type ProjectNotesResourceQueryParams as cv, ProjectsResource as cw, type ProjectsResourceQueryParams as cx, PurchaseApprovalsResource as cy, type PurchaseApprovalsResourceQueryParams as cz, type AppointmentsResourceQueryParams as d, type TicketChecklistItemsResourceQueryParams as d$, type ResourceTimeOffAdditionalResourceQueryParams as d0, ResourceTimeOffApproversResource as d1, type ResourceTimeOffApproversResourceQueryParams as d2, ResourceTimeOffBalancesResource as d3, type ResourceTimeOffBalancesResourceQueryParams as d4, ResourcesResource as d5, type ResourcesResourceQueryParams as d6, ResponseRejectedError as d7, RolesResource as d8, type RolesResourceQueryParams as d9, type SurveysResourceQueryParams as dA, TagAliasesResource as dB, type TagAliasesResourceQueryParams as dC, TagGroupsResource as dD, type TagGroupsResourceQueryParams as dE, TagsResource as dF, type TagsResourceQueryParams as dG, TaskSecondaryResourcesResource as dH, type TaskSecondaryResourcesResourceQueryParams as dI, TasksResource as dJ, type TasksResourceQueryParams as dK, ThresholdInformationResource as dL, TicketAdditionalConfigurationItemsResource as dM, type TicketAdditionalConfigurationItemsResourceQueryParams as dN, TicketAdditionalContactsResource as dO, type TicketAdditionalContactsResourceQueryParams as dP, TicketAttachmentsResource as dQ, type TicketAttachmentsResourceQueryParams as dR, TicketCategoriesResource as dS, type TicketCategoriesResourceQueryParams as dT, TicketCategoryFieldDefaultsResource as dU, type TicketCategoryFieldDefaultsResourceQueryParams as dV, TicketChangeRequestApprovalsResource as dW, type TicketChangeRequestApprovalsResourceQueryParams as dX, TicketChargesResource as dY, type TicketChargesResourceQueryParams as dZ, TicketChecklistItemsResource as d_, ServerError as da, ServiceCallTaskResourcesResource as db, type ServiceCallTaskResourcesResourceQueryParams as dc, ServiceCallTasksResource as dd, type ServiceCallTasksResourceQueryParams as de, ServiceCallTicketResourcesResource as df, type ServiceCallTicketResourcesResourceQueryParams as dg, ServiceCallTicketsResource as dh, type ServiceCallTicketsResourceQueryParams as di, ServiceCallsResource as dj, type ServiceCallsResourceQueryParams as dk, ServiceLevelAgreementResultsResource as dl, type ServiceLevelAgreementResultsResourceQueryParams as dm, ServicesResource as dn, type ServicesResourceQueryParams as dp, SkillsResource as dq, type SkillsResourceQueryParams as dr, StaleObjectError as ds, SubscriptionPeriodsResource as dt, type SubscriptionPeriodsResourceQueryParams as du, SubscriptionsResource as dv, type SubscriptionsResourceQueryParams as dw, SurveyResultsResource as dx, type SurveyResultsResourceQueryParams as dy, SurveysResource as dz, AuthenticateResource as e, unwrapItem as e$, TicketChecklistLibrariesResource as e0, type TicketChecklistLibrariesResourceQueryParams as e1, TicketHistoryResource as e2, type TicketHistoryResourceQueryParams as e3, TicketNoteAttachmentsResource as e4, type TicketNoteAttachmentsResourceQueryParams as e5, TicketNoteWebhooksResource as e6, type TicketNoteWebhooksResourceQueryParams as e7, TicketNotesResource as e8, type TicketNotesResourceQueryParams as e9, buildUrl as eA, clampPageSize as eB, collectAll as eC, cooldownDurationMs as eD, cursorToPath as eE, defaultCircuitBreakerStore as eF, defaultCooldownStore as eG, errorFromStatus as eH, formatVendorDetail as eI, isAutotaskError as eJ, isBreakerFailure as eK, isCredentialHeaderName as eL, isDeterministicVendor500 as eM, mergeDetails as eN, paginate as eO, paginateItems as eP, parseVendorErrors as eQ, passthrough as eR, redactRecord as eS, resetDefaultCircuitBreakerStore as eT, resetDefaultCooldownStore as eU, resolveBaseUrl as eV, resolveConfig as eW, resolveCredentials as eX, runWithSignal as eY, toArray as eZ, totalPagesFor as e_, TicketSecondaryResourcesResource as ea, type TicketSecondaryResourcesResourceQueryParams as eb, TicketWebhooksResource as ec, type TicketWebhooksResourceQueryParams as ed, TicketsResource as ee, type TicketsResourceQueryParams as ef, TimeEntriesResource as eg, type TimeEntriesResourceQueryParams as eh, TimeEntryAttachmentsResource as ei, type TimeEntryAttachmentsResourceQueryParams as ej, TimeOffRequestsResource as ek, type TimeOffRequestsResourceQueryParams as el, UnauthorizedError as em, UnexpectedContentTypeError as en, UnprocessableEntityError as eo, type VendorFieldError as ep, VersionInformationResource as eq, VersionResource as er, ZONES as es, ZONE_CATALOG as et, ZoneInformationResource as eu, type ZoneName as ev, buildBreakerKey as ew, buildQueryBody as ex, buildQueryRequest as ey, buildTenantKey as ez, AutotaskAbortError as f, unwrapItems as f0, unwrapOperation as f1, unwrapQueryCount as f2, zoneUrl as f3, type BlindSurfaceInfo as f4, type RelationshipResource as f5, type BlindSurfaceInventory as f6, type BlindSurfaceRow as f7, type CreateBlockerKind as f8, type CreateGuidanceReport as f9, type FieldCacheKind as fa, FIELD_CACHE_KINDS as fb, AutotaskConfigError as g, AutotaskError as h, type AutotaskErrorOptions as i, AutotaskNetworkError as j, AutotaskTimeoutError as k, BillingCodesResource as l, type BillingCodesResourceQueryParams as m, BillingItemsResource as n, type BillingItemsResourceQueryParams as o, CREDENTIAL_SHAPE_POINTER as p, ChangeRequestLinksResource as q, type ChangeRequestLinksResourceQueryParams as r, ChecklistLibrariesResource as s, type ChecklistLibrariesResourceQueryParams as t, ChecklistLibraryChecklistItemsResource as u, type ChecklistLibraryChecklistItemsResourceQueryParams as v, CircuitBreakerError as w, type CircuitBreakerState as x, type CircuitBreakerStore as y, ClassificationIconsResource as z };
8946
+ export { type ConfigurationItemSslSubjectAlternativeNamesResourceQueryParams as $, type AutotaskConfig as A, BillingCodesResource as B, CREDENTIAL_HEADER_NAMES as C, CompanyLocationsResource as D, type CompanyLocationsResourceQueryParams as E, CompanyNotesResource as F, type CompanyNotesResourceQueryParams as G, CompanySiteConfigurationsResource as H, type CompanySiteConfigurationsResourceQueryParams as I, CompanyWebhooksResource as J, type CompanyWebhooksResourceQueryParams as K, type ConfigProfile as L, ConfigurationItemBillingProductAssociationsResource as M, type ConfigurationItemBillingProductAssociationsResourceQueryParams as N, ConfigurationItemCategoriesResource as O, type ConfigurationItemCategoriesResourceQueryParams as P, ConfigurationItemCategoryUdfAssociationsResource as Q, type ResolvedAutotaskConfig as R, type ConfigurationItemCategoryUdfAssociationsResourceQueryParams as S, ConfigurationItemDnsRecordsResource as T, type ConfigurationItemDnsRecordsResourceQueryParams as U, ConfigurationItemNotesResource as V, type ConfigurationItemNotesResourceQueryParams as W, ConfigurationItemRelatedItemsResource as X, type ConfigurationItemRelatedItemsResourceQueryParams as Y, type ZoneName as Z, ConfigurationItemSslSubjectAlternativeNamesResource as _, AutotaskClient as a, DEFAULT_CIRCUIT_BREAKER_FAILURE_THRESHOLD as a$, ConfigurationItemTypesResource as a0, type ConfigurationItemTypesResourceQueryParams as a1, ConfigurationItemWebhooksResource as a2, type ConfigurationItemWebhooksResourceQueryParams as a3, ConfigurationItemsResource as a4, type ConfigurationItemsResourceQueryParams as a5, ContactGroupContactsResource as a6, type ContactGroupContactsResourceQueryParams as a7, ContactGroupsResource as a8, type ContactGroupsResourceQueryParams as a9, ContractRatesResource as aA, type ContractRatesResourceQueryParams as aB, ContractRetainersResource as aC, type ContractRetainersResourceQueryParams as aD, ContractRoleCostsResource as aE, type ContractRoleCostsResourceQueryParams as aF, ContractServiceAdjustmentsResource as aG, type ContractServiceAdjustmentsResourceQueryParams as aH, ContractServiceBundleAdjustmentsResource as aI, type ContractServiceBundleAdjustmentsResourceQueryParams as aJ, ContractServiceBundleUnitsResource as aK, type ContractServiceBundleUnitsResourceQueryParams as aL, ContractServiceBundlesResource as aM, type ContractServiceBundlesResourceQueryParams as aN, ContractServiceUnitsResource as aO, type ContractServiceUnitsResourceQueryParams as aP, ContractServicesResource as aQ, type ContractServicesResourceQueryParams as aR, ContractTicketPurchasesResource as aS, type ContractTicketPurchasesResourceQueryParams as aT, type ContractsProfitabilityResult as aU, ContractsResource as aV, type ContractsResourceQueryParams as aW, type CooldownStore as aX, type CostRateResolution as aY, CountriesResource as aZ, type CountriesResourceQueryParams as a_, ContactWebhooksResource as aa, type ContactWebhooksResourceQueryParams as ab, ContactsResource as ac, type ContactsResourceQueryParams as ad, ContractBillingRulesResource as ae, type ContractBillingRulesResourceQueryParams as af, ContractBlockHourFactorsResource as ag, type ContractBlockHourFactorsResourceQueryParams as ah, ContractBlocksResource as ai, type ContractBlocksResourceQueryParams as aj, ContractChargesResource as ak, type ContractChargesResourceQueryParams as al, ContractExclusionBillingCodesResource as am, type ContractExclusionBillingCodesResourceQueryParams as an, ContractExclusionRolesResource as ao, type ContractExclusionRolesResourceQueryParams as ap, ContractExclusionSetExcludedRolesResource as aq, type ContractExclusionSetExcludedRolesResourceQueryParams as ar, ContractExclusionSetExcludedWorkTypesResource as as, type ContractExclusionSetExcludedWorkTypesResourceQueryParams as at, ContractExclusionSetsResource as au, type ContractExclusionSetsResourceQueryParams as av, ContractMilestonesResource as aw, type ContractMilestonesResourceQueryParams as ax, ContractNotesResource as ay, type ContractNotesResourceQueryParams as az, AutotaskError as b, type ProfitabilityPartDigest as b$, DEFAULT_CIRCUIT_BREAKER_MAX_ENTRIES as b0, DEFAULT_CIRCUIT_BREAKER_OPEN_TIMEOUT_MS as b1, DEFAULT_CIRCUIT_BREAKER_SUCCESSES_TO_CLOSE as b2, DEFAULT_CIRCUIT_BREAKER_WINDOW_MS as b3, DEFAULT_COOLDOWN_DEFAULT_MS as b4, DEFAULT_COOLDOWN_MAX_ENTRIES as b5, DEFAULT_COOLDOWN_MAX_MS as b6, DEFAULT_ZONE as b7, DepartmentsResource as b8, type DepartmentsResourceQueryParams as b9, NoopLogger as bA, NotificationHistoryResource as bB, type NotificationHistoryResourceQueryParams as bC, OpportunitiesResource as bD, type OpportunitiesResourceQueryParams as bE, OpportunityAttachmentsResource as bF, type OpportunityAttachmentsResourceQueryParams as bG, OpportunityCategoriesResource as bH, type OpportunityCategoriesResourceQueryParams as bI, type PageFetcher as bJ, type PaginateOptions as bK, PhasesResource as bL, type PhasesResourceQueryParams as bM, ProductVendorsResource as bN, type ProductVendorsResourceQueryParams as bO, ProductsResource as bP, type ProductsResourceQueryParams as bQ, type ProfitRateSource as bR, type ProfitabilityActivityCategory as bS, type ProfitabilityDataQualityWarning as bT, type ProfitabilityHighestCostTicket as bU, type ProfitabilityLabourCostMethod as bV, type ProfitabilityMiscoding as bW, type ProfitabilityMonthlyRow as bX, type ProfitabilityOpenRenewalItem as bY, type ProfitabilityOptions as bZ, type ProfitabilityPart as b_, DomainRegistrarsResource as ba, type DomainRegistrarsResourceQueryParams as bb, EntityInformationResource as bc, type ErrorCategory as bd, type ErrorIdRef as be, ExpenseItemAttachmentsResource as bf, type ExpenseItemAttachmentsResourceQueryParams as bg, ExpenseItemsResource as bh, type ExpenseItemsResourceQueryParams as bi, ExpenseReportsResource as bj, type ExpenseReportsResourceQueryParams as bk, HolidaySetsResource as bl, type HolidaySetsResourceQueryParams as bm, HolidaysResource as bn, type HolidaysResourceQueryParams as bo, HttpClient as bp, IDEMPOTENT_METHODS as bq, InMemoryCircuitBreakerStore as br, InMemoryCooldownStore as bs, InventoryProductsResource as bt, type InventoryProductsResourceQueryParams as bu, InvoicesResource as bv, type InvoicesResourceQueryParams as bw, type Logger as bx, MAX_PAGES as by, ModulesResource as bz, type AutotaskErrorOptions as c, type SurveysResourceQueryParams as c$, type ProfitabilityRevenueByType as c0, ProjectChargesResource as c1, type ProjectChargesResourceQueryParams as c2, ProjectNotesResource as c3, type ProjectNotesResourceQueryParams as c4, ProjectsResource as c5, type ProjectsResourceQueryParams as c6, PurchaseApprovalsResource as c7, type PurchaseApprovalsResourceQueryParams as c8, PurchaseOrderItemReceivingResource as c9, ResourcesResource as cA, type ResourcesResourceQueryParams as cB, RolesResource as cC, type RolesResourceQueryParams as cD, ServiceCallTaskResourcesResource as cE, type ServiceCallTaskResourcesResourceQueryParams as cF, ServiceCallTasksResource as cG, type ServiceCallTasksResourceQueryParams as cH, ServiceCallTicketResourcesResource as cI, type ServiceCallTicketResourcesResourceQueryParams as cJ, ServiceCallTicketsResource as cK, type ServiceCallTicketsResourceQueryParams as cL, ServiceCallsResource as cM, type ServiceCallsResourceQueryParams as cN, ServiceLevelAgreementResultsResource as cO, type ServiceLevelAgreementResultsResourceQueryParams as cP, ServicesResource as cQ, type ServicesResourceQueryParams as cR, SkillsResource as cS, type SkillsResourceQueryParams as cT, SubscriptionPeriodsResource as cU, type SubscriptionPeriodsResourceQueryParams as cV, SubscriptionsResource as cW, type SubscriptionsResourceQueryParams as cX, SurveyResultsResource as cY, type SurveyResultsResourceQueryParams as cZ, SurveysResource as c_, type PurchaseOrderItemReceivingResourceQueryParams as ca, PurchaseOrderItemsResource as cb, type PurchaseOrderItemsResourceQueryParams as cc, PurchaseOrdersResource as cd, type PurchaseOrdersResourceQueryParams as ce, QuoteItemsResource as cf, type QuoteItemsResourceQueryParams as cg, QuoteLocationsResource as ch, type QuoteLocationsResourceQueryParams as ci, QuoteTemplatesResource as cj, type QuoteTemplatesResourceQueryParams as ck, QuotesResource as cl, type QuotesResourceQueryParams as cm, REDACTED as cn, ResourceRoleQueuesResource as co, type ResourceRoleQueuesResourceQueryParams as cp, ResourceRolesResource as cq, type ResourceRolesResourceQueryParams as cr, ResourceSkillsResource as cs, type ResourceSkillsResourceQueryParams as ct, ResourceTimeOffAdditionalResource as cu, type ResourceTimeOffAdditionalResourceQueryParams as cv, ResourceTimeOffApproversResource as cw, type ResourceTimeOffApproversResourceQueryParams as cx, ResourceTimeOffBalancesResource as cy, type ResourceTimeOffBalancesResourceQueryParams as cz, type RequestOptions as d, isBreakerFailure as d$, TagAliasesResource as d0, type TagAliasesResourceQueryParams as d1, TagGroupsResource as d2, type TagGroupsResourceQueryParams as d3, TagsResource as d4, type TagsResourceQueryParams as d5, TaskSecondaryResourcesResource as d6, type TaskSecondaryResourcesResourceQueryParams as d7, TasksResource as d8, type TasksResourceQueryParams as d9, TicketNotesResource as dA, type TicketNotesResourceQueryParams as dB, TicketSecondaryResourcesResource as dC, type TicketSecondaryResourcesResourceQueryParams as dD, TicketWebhooksResource as dE, type TicketWebhooksResourceQueryParams as dF, TicketsResource as dG, type TicketsResourceQueryParams as dH, TimeEntriesResource as dI, type TimeEntriesResourceQueryParams as dJ, TimeEntryAttachmentsResource as dK, type TimeEntryAttachmentsResourceQueryParams as dL, TimeOffRequestsResource as dM, type TimeOffRequestsResourceQueryParams as dN, VersionInformationResource as dO, VersionResource as dP, ZONES as dQ, ZONE_CATALOG as dR, ZoneInformationResource as dS, buildBreakerKey as dT, buildTenantKey as dU, clampPageSize as dV, collectAll as dW, cooldownDurationMs as dX, defaultCircuitBreakerStore as dY, defaultCooldownStore as dZ, isAutotaskError as d_, ThresholdInformationResource as da, TicketAdditionalConfigurationItemsResource as db, type TicketAdditionalConfigurationItemsResourceQueryParams as dc, TicketAdditionalContactsResource as dd, type TicketAdditionalContactsResourceQueryParams as de, TicketAttachmentsResource as df, type TicketAttachmentsResourceQueryParams as dg, TicketCategoriesResource as dh, type TicketCategoriesResourceQueryParams as di, TicketCategoryFieldDefaultsResource as dj, type TicketCategoryFieldDefaultsResourceQueryParams as dk, TicketChangeRequestApprovalsResource as dl, type TicketChangeRequestApprovalsResourceQueryParams as dm, TicketChargesResource as dn, type TicketChargesResourceQueryParams as dp, TicketChecklistItemsResource as dq, type TicketChecklistItemsResourceQueryParams as dr, TicketChecklistLibrariesResource as ds, type TicketChecklistLibrariesResourceQueryParams as dt, TicketHistoryResource as du, type TicketHistoryResourceQueryParams as dv, TicketNoteAttachmentsResource as dw, type TicketNoteAttachmentsResourceQueryParams as dx, TicketNoteWebhooksResource as dy, type TicketNoteWebhooksResourceQueryParams as dz, AGENT_PROFILE as e, isCredentialHeaderName as e0, paginate as e1, paginateItems as e2, redactRecord as e3, resetDefaultCircuitBreakerStore as e4, resetDefaultCooldownStore as e5, resolveBaseUrl as e6, toArray as e7, totalPagesFor as e8, zoneUrl as e9, type BlindSurfaceInfo as ea, type RelationshipResource as eb, type BlindSurfaceInventory as ec, type BlindSurfaceRow as ed, type CreateBlockerKind as ee, type CreateGuidanceReport as ef, type FieldCacheKind as eg, FIELD_CACHE_KINDS as eh, AppointmentsResource as f, type AppointmentsResourceQueryParams as g, AuthenticateResource as h, AutotaskConfigError as i, type BillingCodesResourceQueryParams as j, BillingItemsResource as k, type BillingItemsResourceQueryParams as l, ChangeRequestLinksResource as m, type ChangeRequestLinksResourceQueryParams as n, ChecklistLibrariesResource as o, type ChecklistLibrariesResourceQueryParams as p, ChecklistLibraryChecklistItemsResource as q, type ChecklistLibraryChecklistItemsResourceQueryParams as r, type CircuitBreakerState as s, type CircuitBreakerStore as t, ClassificationIconsResource as u, type ClassificationIconsResourceQueryParams as v, CompaniesResource as w, type CompaniesResourceQueryParams as x, CompanyAlertsResource as y, type CompanyAlertsResourceQueryParams as z };